annotate src/share/vm/gc_implementation/g1/g1_globals.hpp @ 2278:02f49b66361a

7026932: G1: No need to abort VM when card count cache expansion fails Summary: Manage allocation/freeing of the card cache counts and epochs arrays directly so that an allocation failure while attempting to expand these arrays does not abort the JVM. Failure to expand these arrays is not fatal. Reviewed-by: iveresov, tonyp
author johnc
date Mon, 28 Mar 2011 10:58:54 -0700
parents c33825b68624
children 371bbc844bf1
rev   line source
ysr@342 1 /*
tonyp@2034 2 * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
ysr@342 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ysr@342 4 *
ysr@342 5 * This code is free software; you can redistribute it and/or modify it
ysr@342 6 * under the terms of the GNU General Public License version 2 only, as
ysr@342 7 * published by the Free Software Foundation.
ysr@342 8 *
ysr@342 9 * This code is distributed in the hope that it will be useful, but WITHOUT
ysr@342 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ysr@342 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
ysr@342 12 * version 2 for more details (a copy is included in the LICENSE file that
ysr@342 13 * accompanied this code).
ysr@342 14 *
ysr@342 15 * You should have received a copy of the GNU General Public License version
ysr@342 16 * 2 along with this work; if not, write to the Free Software Foundation,
ysr@342 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ysr@342 18 *
trims@1472 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1472 20 * or visit www.oracle.com if you need additional information or have any
trims@1472 21 * questions.
ysr@342 22 *
ysr@342 23 */
ysr@342 24
stefank@1879 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP
stefank@1879 26 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP
stefank@1879 27
stefank@1879 28 #include "runtime/globals.hpp"
stefank@1879 29
ysr@342 30 //
ysr@342 31 // Defines all globals flags used by the garbage-first compiler.
ysr@342 32 //
ysr@342 33
ysr@350 34 #define G1_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw) \
ysr@342 35 \
johnc@751 36 product(intx, G1ConfidencePercent, 50, \
ysr@342 37 "Confidence level for MMU/pause predictions") \
ysr@342 38 \
tonyp@884 39 develop(intx, G1MarkingOverheadPercent, 0, \
ysr@342 40 "Overhead of concurrent marking") \
ysr@342 41 \
johnc@751 42 develop(bool, G1Gen, true, \
ysr@342 43 "If true, it will enable the generational G1") \
ysr@342 44 \
johnc@751 45 develop(intx, G1PolicyVerbose, 0, \
ysr@342 46 "The verbosity level on G1 policy decisions") \
ysr@342 47 \
ysr@342 48 develop(intx, G1MarkingVerboseLevel, 0, \
ysr@342 49 "Level (0-4) of verboseness of the marking code") \
ysr@342 50 \
tonyp@1044 51 develop(bool, G1PrintReachableAtInitialMark, false, \
tonyp@1044 52 "Reachable object dump at the initial mark pause") \
tonyp@1044 53 \
tonyp@1044 54 develop(bool, G1VerifyDuringGCPrintReachable, false, \
tonyp@1044 55 "If conc mark verification fails, dump reachable objects") \
tonyp@1044 56 \
tonyp@1044 57 develop(ccstr, G1PrintReachableBaseFile, NULL, \
tonyp@1044 58 "The base file name for the reachable object dumps") \
ysr@342 59 \
ysr@342 60 develop(bool, G1TraceMarkStackOverflow, false, \
ysr@342 61 "If true, extra debugging code for CM restart for ovflw.") \
ysr@342 62 \
ysr@342 63 develop(intx, G1PausesBtwnConcMark, -1, \
ysr@342 64 "If positive, fixed number of pauses between conc markings") \
ysr@342 65 \
tonyp@1282 66 diagnostic(bool, G1SummarizeConcMark, false, \
ysr@342 67 "Summarize concurrent mark info") \
ysr@342 68 \
johnc@751 69 diagnostic(bool, G1SummarizeRSetStats, false, \
ysr@342 70 "Summarize remembered set processing info") \
ysr@342 71 \
tonyp@884 72 diagnostic(intx, G1SummarizeRSetStatsPeriod, 0, \
tonyp@884 73 "The period (in number of GCs) at which we will generate " \
tonyp@884 74 "update buffer processing info " \
tonyp@884 75 "(0 means do not periodically generate this info); " \
tonyp@884 76 "it also requires -XX:+G1SummarizeRSetStats") \
tonyp@884 77 \
tonyp@1282 78 diagnostic(bool, G1TraceConcRefinement, false, \
ysr@342 79 "Trace G1 concurrent refinement") \
ysr@342 80 \
johnc@751 81 product(intx, G1MarkRegionStackSize, 1024 * 1024, \
ysr@342 82 "Size of the region stack for concurrent marking.") \
ysr@342 83 \
johnc@2059 84 product(double, G1ConcMarkStepDurationMillis, 10.0, \
johnc@2059 85 "Target duration of individual concurrent marking steps " \
johnc@2059 86 "in milliseconds.") \
johnc@2059 87 \
johnc@2059 88 product(intx, G1RefProcDrainInterval, 10, \
johnc@2059 89 "The number of discovered reference objects to process before " \
johnc@2059 90 "draining concurrent marking work queues.") \
johnc@2059 91 \
ysr@342 92 develop(bool, G1SATBBarrierPrintNullPreVals, false, \
ysr@342 93 "If true, count frac of ptr writes with null pre-vals.") \
ysr@342 94 \
tonyp@1282 95 product(intx, G1SATBBufferSize, 1*K, \
ysr@342 96 "Number of entries in an SATB log buffer.") \
ysr@342 97 \
tonyp@1282 98 develop(intx, G1SATBProcessCompletedThreshold, 20, \
ysr@342 99 "Number of completed buffers that triggers log processing.") \
ysr@342 100 \
tonyp@2034 101 product(uintx, G1SATBBufferEnqueueingThresholdPercent, 60, \
tonyp@2034 102 "Before enqueueing them, each mutator thread tries to do some " \
tonyp@2034 103 "filtering on the SATB buffers it generates. If post-filtering " \
tonyp@2034 104 "the percentage of retained entries is over this threshold " \
tonyp@2034 105 "the buffer will be enqueued for processing. A value of 0 " \
tonyp@2034 106 "specifies that mutator threads should not do such filtering.") \
tonyp@2034 107 \
ysr@342 108 develop(intx, G1ExtraRegionSurvRate, 33, \
ysr@342 109 "If the young survival rate is S, and there's room left in " \
ysr@342 110 "to-space, we will allow regions whose survival rate is up to " \
ysr@342 111 "S + (1 - S)*X, where X is this parameter (as a fraction.)") \
ysr@342 112 \
ysr@342 113 develop(intx, G1InitYoungSurvRatio, 50, \
ysr@342 114 "Expected Survival Rate for newly allocated bytes") \
ysr@342 115 \
ysr@342 116 develop(bool, G1SATBPrintStubs, false, \
ysr@342 117 "If true, print generated stubs for the SATB barrier") \
ysr@342 118 \
tonyp@1282 119 experimental(intx, G1ExpandByPercentOfAvailable, 20, \
ysr@342 120 "When expanding, % of uncommitted space to claim.") \
ysr@342 121 \
ysr@342 122 develop(bool, G1RSBarrierRegionFilter, true, \
ysr@342 123 "If true, generate region filtering code in RS barrier") \
ysr@342 124 \
ysr@342 125 develop(bool, G1RSBarrierNullFilter, true, \
ysr@342 126 "If true, generate null-pointer filtering code in RS barrier") \
ysr@342 127 \
ysr@342 128 develop(bool, G1PrintCTFilterStats, false, \
ysr@342 129 "If true, print stats on RS filtering effectiveness") \
ysr@342 130 \
iveresov@616 131 develop(bool, G1DeferredRSUpdate, true, \
iveresov@616 132 "If true, use deferred RS updates") \
iveresov@616 133 \
ysr@342 134 develop(bool, G1RSLogCheckCardTable, false, \
ysr@342 135 "If true, verify that no dirty cards remain after RS log " \
ysr@342 136 "processing.") \
ysr@342 137 \
ysr@342 138 develop(bool, G1RSCountHisto, false, \
ysr@342 139 "If true, print a histogram of RS occupancies after each pause") \
ysr@342 140 \
ysr@342 141 develop(intx, G1PrintRegionLivenessInfo, 0, \
ysr@342 142 "When > 0, print the occupancies of the <n> best and worst" \
ysr@342 143 "regions.") \
ysr@342 144 \
ysr@342 145 develop(bool, G1PrintParCleanupStats, false, \
ysr@342 146 "When true, print extra stats about parallel cleanup.") \
ysr@342 147 \
ysr@342 148 develop(bool, G1DisablePreBarrier, false, \
ysr@342 149 "Disable generation of pre-barrier (i.e., marking barrier) ") \
ysr@342 150 \
ysr@342 151 develop(bool, G1DisablePostBarrier, false, \
ysr@342 152 "Disable generation of post-barrier (i.e., RS barrier) ") \
ysr@342 153 \
tonyp@883 154 product(intx, G1UpdateBufferSize, 256, \
tonyp@883 155 "Size of an update buffer") \
tonyp@883 156 \
tonyp@1282 157 product(intx, G1ConcRefinementYellowZone, 0, \
tonyp@883 158 "Number of enqueued update buffers that will " \
iveresov@1111 159 "trigger concurrent processing. Will be selected ergonomically " \
iveresov@1111 160 "by default.") \
tonyp@883 161 \
tonyp@1282 162 product(intx, G1ConcRefinementRedZone, 0, \
tonyp@883 163 "Maximum number of enqueued update buffers before mutator " \
iveresov@1111 164 "threads start processing new ones instead of enqueueing them. " \
iveresov@1111 165 "Will be selected ergonomically by default. Zero will disable " \
iveresov@1111 166 "concurrent processing.") \
iveresov@1111 167 \
tonyp@1282 168 product(intx, G1ConcRefinementGreenZone, 0, \
iveresov@1111 169 "The number of update buffers that are left in the queue by the " \
iveresov@1111 170 "concurrent processing threads. Will be selected ergonomically " \
iveresov@1111 171 "by default.") \
iveresov@1111 172 \
tonyp@1282 173 product(intx, G1ConcRefinementServiceIntervalMillis, 300, \
iveresov@1111 174 "The last concurrent refinement thread wakes up every " \
iveresov@1111 175 "specified number of milliseconds to do miscellaneous work.") \
iveresov@1111 176 \
tonyp@1282 177 product(intx, G1ConcRefinementThresholdStep, 0, \
iveresov@1111 178 "Each time the rset update queue increases by this amount " \
iveresov@1111 179 "activate the next refinement thread if available. " \
iveresov@1111 180 "Will be selected ergonomically by default.") \
iveresov@1111 181 \
tonyp@1282 182 product(intx, G1RSetUpdatingPauseTimePercent, 10, \
iveresov@1111 183 "A target percentage of time that is allowed to be spend on " \
iveresov@1111 184 "process RS update buffers during the collection pause.") \
iveresov@1111 185 \
tonyp@1282 186 product(bool, G1UseAdaptiveConcRefinement, true, \
iveresov@1111 187 "Select green, yellow and red zones adaptively to meet the " \
iveresov@1111 188 "the pause requirements.") \
ysr@342 189 \
ysr@342 190 develop(intx, G1ConcRSLogCacheSize, 10, \
ysr@342 191 "Log base 2 of the length of conc RS hot-card cache.") \
ysr@342 192 \
johnc@751 193 develop(intx, G1ConcRSHotCardLimit, 4, \
ysr@342 194 "The threshold that defines (>=) a hot card.") \
ysr@342 195 \
johnc@2278 196 develop(intx, G1MaxHotCardCountSizePercent, 25, \
johnc@2278 197 "The maximum size of the hot card count cache as a " \
johnc@2278 198 "percentage of the number of cards for the maximum heap.") \
johnc@2278 199 \
ysr@342 200 develop(bool, G1PrintOopAppls, false, \
ysr@342 201 "When true, print applications of closures to external locs.") \
ysr@342 202 \
iveresov@1261 203 develop(intx, G1RSetRegionEntriesBase, 256, \
iveresov@1261 204 "Max number of regions in a fine-grain table per MB.") \
iveresov@1261 205 \
iveresov@1261 206 product(intx, G1RSetRegionEntries, 0, \
iveresov@1261 207 "Max number of regions for which we keep bitmaps." \
iveresov@1261 208 "Will be set ergonomically by default") \
iveresov@1261 209 \
iveresov@1261 210 develop(intx, G1RSetSparseRegionEntriesBase, 4, \
iveresov@1261 211 "Max number of entries per region in a sparse table " \
iveresov@1261 212 "per MB.") \
iveresov@1261 213 \
iveresov@1261 214 product(intx, G1RSetSparseRegionEntries, 0, \
iveresov@1261 215 "Max number of entries per region in a sparse table." \
iveresov@1261 216 "Will be set ergonomically by default.") \
ysr@342 217 \
ysr@342 218 develop(bool, G1RecordHRRSOops, false, \
ysr@342 219 "When true, record recent calls to rem set operations.") \
ysr@342 220 \
ysr@342 221 develop(bool, G1RecordHRRSEvents, false, \
ysr@342 222 "When true, record recent calls to rem set operations.") \
ysr@342 223 \
ysr@342 224 develop(intx, G1MaxVerifyFailures, -1, \
ysr@342 225 "The maximum number of verification failrues to print. " \
ysr@342 226 "-1 means print all.") \
ysr@342 227 \
ysr@342 228 develop(bool, G1ScrubRemSets, true, \
ysr@342 229 "When true, do RS scrubbing after cleanup.") \
ysr@342 230 \
ysr@342 231 develop(bool, G1RSScrubVerbose, false, \
ysr@342 232 "When true, do RS scrubbing with verbose output.") \
ysr@342 233 \
ysr@342 234 develop(bool, G1YoungSurvRateVerbose, false, \
ysr@342 235 "print out the survival rate of young regions according to age.") \
ysr@342 236 \
ysr@342 237 develop(intx, G1YoungSurvRateNumRegionsSummary, 0, \
ysr@342 238 "the number of regions for which we'll print a surv rate " \
ysr@342 239 "summary.") \
ysr@342 240 \
tonyp@1282 241 product(intx, G1ReservePercent, 10, \
ysr@342 242 "It determines the minimum reserve we should have in the heap " \
ysr@342 243 "to minimize the probability of promotion failure.") \
ysr@342 244 \
tonyp@1282 245 diagnostic(bool, G1PrintHeapRegions, false, \
ysr@342 246 "If set G1 will print information on which regions are being " \
ysr@342 247 "allocated and which are reclaimed.") \
ysr@342 248 \
ysr@342 249 develop(bool, G1HRRSUseSparseTable, true, \
ysr@342 250 "When true, use sparse table to save space.") \
ysr@342 251 \
ysr@342 252 develop(bool, G1HRRSFlushLogBuffersOnVerify, false, \
ysr@342 253 "Forces flushing of log buffers before verification.") \
ysr@342 254 \
ysr@1087 255 develop(bool, G1FailOnFPError, false, \
ysr@1087 256 "When set, G1 will fail when it encounters an FP 'error', " \
ysr@1087 257 "so as to allow debugging") \
ysr@1087 258 \
johnc@751 259 develop(bool, G1FixedTenuringThreshold, false, \
apetrusenko@545 260 "When set, G1 will not adjust the tenuring threshold") \
apetrusenko@545 261 \
johnc@751 262 develop(bool, G1FixedEdenSize, false, \
apetrusenko@545 263 "When set, G1 will not allocate unused survivor space regions") \
apetrusenko@545 264 \
johnc@751 265 develop(uintx, G1FixedSurvivorSpaceSize, 0, \
apetrusenko@545 266 "If non-0 is the size of the G1 survivor space, " \
tonyp@638 267 "otherwise SurvivorRatio is used to determine the size") \
tonyp@638 268 \
tonyp@942 269 product(uintx, G1HeapRegionSize, 0, \
tonyp@942 270 "Size of the G1 regions.") \
tonyp@942 271 \
tonyp@1357 272 experimental(bool, G1UseParallelRSetUpdating, true, \
tonyp@638 273 "Enables the parallelization of remembered set updating " \
tonyp@638 274 "during evacuation pauses") \
tonyp@638 275 \
tonyp@1357 276 experimental(bool, G1UseParallelRSetScanning, true, \
tonyp@638 277 "Enables the parallelization of remembered set scanning " \
iveresov@794 278 "during evacuation pauses") \
iveresov@794 279 \
tonyp@1282 280 product(uintx, G1ConcRefinementThreads, 0, \
iveresov@794 281 "If non-0 is the number of parallel rem set update threads, " \
johnc@890 282 "otherwise the value is determined ergonomically.") \
johnc@890 283 \
johnc@890 284 develop(intx, G1CardCountCacheExpandThreshold, 16, \
johnc@890 285 "Expand the card count cache if the number of collisions for " \
apetrusenko@940 286 "a particular entry exceeds this value.") \
apetrusenko@940 287 \
apetrusenko@940 288 develop(bool, G1VerifyCTCleanup, false, \
ysr@1194 289 "Verify card table cleanup.") \
ysr@1194 290 \
iveresov@1261 291 product(uintx, G1RSetScanBlockSize, 64, \
iveresov@1261 292 "Size of a work unit of cards claimed by a worker thread" \
iveresov@1261 293 "during RSet scanning.") \
iveresov@1261 294 \
tonyp@2037 295 develop(uintx, G1SecondaryFreeListAppendLength, 5, \
tonyp@2037 296 "The number of regions we will add to the secondary free list " \
tonyp@2037 297 "at every append operation") \
tonyp@2037 298 \
tonyp@2037 299 develop(bool, G1ConcRegionFreeingVerbose, false, \
tonyp@2037 300 "Enables verboseness during concurrent region freeing") \
tonyp@2037 301 \
tonyp@2037 302 develop(bool, G1StressConcRegionFreeing, false, \
tonyp@2037 303 "It stresses the concurrent region freeing operation") \
tonyp@2037 304 \
tonyp@2037 305 develop(uintx, G1StressConcRegionFreeingDelayMillis, 0, \
tonyp@2037 306 "Artificial delay during concurrent region freeing") \
tonyp@2037 307 \
johnc@2069 308 develop(bool, ReduceInitialCardMarksForG1, false, \
ysr@1194 309 "When ReduceInitialCardMarks is true, this flag setting " \
johnc@2069 310 " controls whether G1 allows the RICM optimization") \
johnc@2069 311 \
johnc@2069 312 develop(bool, G1ExitOnExpansionFailure, false, \
johnc@2069 313 "Raise a fatal VM exit out of memory failure in the event " \
johnc@2069 314 " that heap expansion fails due to running out of swap.")
ysr@342 315
ysr@350 316 G1_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG, DECLARE_MANAGEABLE_FLAG, DECLARE_PRODUCT_RW_FLAG)
stefank@1879 317
stefank@1879 318 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP