annotate src/share/vm/gc_implementation/g1/g1_globals.hpp @ 2382:49a67202bc67

7011855: G1: non-product flag to artificially grow the heap Summary: It introduces non-product cmd line parameter G1DummyRegionsPerGC which indicates how many "dummy" regions to allocate at the end of each GC. This allows the G1 heap to grow artificially and makes concurrent marking cycles more frequent irrespective of what the application that is running is doing. The dummy regions will be found totally empty during cleanup so this parameter can also be used to stress the concurrent cleanup operation. Reviewed-by: brutisso, johnc
author tonyp
date Tue, 19 Apr 2011 15:46:59 -0400
parents e1162778c1c8
children cd8e33b2a8ad
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 \
johnc@2346 92 experimental(bool, G1UseConcMarkReferenceProcessing, true, \
johnc@2283 93 "If true, enable reference discovery during concurrent " \
johnc@2346 94 "marking and reference processing at the end of remark.") \
ysr@342 95 \
tonyp@1282 96 product(intx, G1SATBBufferSize, 1*K, \
ysr@342 97 "Number of entries in an SATB log buffer.") \
ysr@342 98 \
tonyp@1282 99 develop(intx, G1SATBProcessCompletedThreshold, 20, \
ysr@342 100 "Number of completed buffers that triggers log processing.") \
ysr@342 101 \
tonyp@2034 102 product(uintx, G1SATBBufferEnqueueingThresholdPercent, 60, \
tonyp@2034 103 "Before enqueueing them, each mutator thread tries to do some " \
tonyp@2034 104 "filtering on the SATB buffers it generates. If post-filtering " \
tonyp@2034 105 "the percentage of retained entries is over this threshold " \
tonyp@2034 106 "the buffer will be enqueued for processing. A value of 0 " \
tonyp@2034 107 "specifies that mutator threads should not do such filtering.") \
tonyp@2034 108 \
ysr@342 109 develop(intx, G1ExtraRegionSurvRate, 33, \
ysr@342 110 "If the young survival rate is S, and there's room left in " \
ysr@342 111 "to-space, we will allow regions whose survival rate is up to " \
ysr@342 112 "S + (1 - S)*X, where X is this parameter (as a fraction.)") \
ysr@342 113 \
ysr@342 114 develop(intx, G1InitYoungSurvRatio, 50, \
ysr@342 115 "Expected Survival Rate for newly allocated bytes") \
ysr@342 116 \
ysr@342 117 develop(bool, G1SATBPrintStubs, false, \
ysr@342 118 "If true, print generated stubs for the SATB barrier") \
ysr@342 119 \
tonyp@1282 120 experimental(intx, G1ExpandByPercentOfAvailable, 20, \
ysr@342 121 "When expanding, % of uncommitted space to claim.") \
ysr@342 122 \
ysr@342 123 develop(bool, G1RSBarrierRegionFilter, true, \
ysr@342 124 "If true, generate region filtering code in RS barrier") \
ysr@342 125 \
ysr@342 126 develop(bool, G1RSBarrierNullFilter, true, \
ysr@342 127 "If true, generate null-pointer filtering code in RS barrier") \
ysr@342 128 \
ysr@342 129 develop(bool, G1PrintCTFilterStats, false, \
ysr@342 130 "If true, print stats on RS filtering effectiveness") \
ysr@342 131 \
iveresov@616 132 develop(bool, G1DeferredRSUpdate, true, \
iveresov@616 133 "If true, use deferred RS updates") \
iveresov@616 134 \
ysr@342 135 develop(bool, G1RSLogCheckCardTable, false, \
ysr@342 136 "If true, verify that no dirty cards remain after RS log " \
ysr@342 137 "processing.") \
ysr@342 138 \
ysr@342 139 develop(bool, G1RSCountHisto, false, \
ysr@342 140 "If true, print a histogram of RS occupancies after each pause") \
ysr@342 141 \
tonyp@2282 142 product(bool, G1PrintRegionLivenessInfo, false, \
tonyp@2282 143 "Prints the liveness information for all regions in the heap " \
tonyp@2282 144 "at the end of a marking cycle.") \
ysr@342 145 \
ysr@342 146 develop(bool, G1PrintParCleanupStats, false, \
ysr@342 147 "When true, print extra stats about parallel cleanup.") \
ysr@342 148 \
tonyp@883 149 product(intx, G1UpdateBufferSize, 256, \
tonyp@883 150 "Size of an update buffer") \
tonyp@883 151 \
tonyp@1282 152 product(intx, G1ConcRefinementYellowZone, 0, \
tonyp@883 153 "Number of enqueued update buffers that will " \
iveresov@1111 154 "trigger concurrent processing. Will be selected ergonomically " \
iveresov@1111 155 "by default.") \
tonyp@883 156 \
tonyp@1282 157 product(intx, G1ConcRefinementRedZone, 0, \
tonyp@883 158 "Maximum number of enqueued update buffers before mutator " \
iveresov@1111 159 "threads start processing new ones instead of enqueueing them. " \
iveresov@1111 160 "Will be selected ergonomically by default. Zero will disable " \
iveresov@1111 161 "concurrent processing.") \
iveresov@1111 162 \
tonyp@1282 163 product(intx, G1ConcRefinementGreenZone, 0, \
iveresov@1111 164 "The number of update buffers that are left in the queue by the " \
iveresov@1111 165 "concurrent processing threads. Will be selected ergonomically " \
iveresov@1111 166 "by default.") \
iveresov@1111 167 \
tonyp@1282 168 product(intx, G1ConcRefinementServiceIntervalMillis, 300, \
iveresov@1111 169 "The last concurrent refinement thread wakes up every " \
iveresov@1111 170 "specified number of milliseconds to do miscellaneous work.") \
iveresov@1111 171 \
tonyp@1282 172 product(intx, G1ConcRefinementThresholdStep, 0, \
iveresov@1111 173 "Each time the rset update queue increases by this amount " \
iveresov@1111 174 "activate the next refinement thread if available. " \
iveresov@1111 175 "Will be selected ergonomically by default.") \
iveresov@1111 176 \
tonyp@1282 177 product(intx, G1RSetUpdatingPauseTimePercent, 10, \
iveresov@1111 178 "A target percentage of time that is allowed to be spend on " \
iveresov@1111 179 "process RS update buffers during the collection pause.") \
iveresov@1111 180 \
tonyp@1282 181 product(bool, G1UseAdaptiveConcRefinement, true, \
iveresov@1111 182 "Select green, yellow and red zones adaptively to meet the " \
iveresov@1111 183 "the pause requirements.") \
ysr@342 184 \
ysr@342 185 develop(intx, G1ConcRSLogCacheSize, 10, \
ysr@342 186 "Log base 2 of the length of conc RS hot-card cache.") \
ysr@342 187 \
johnc@751 188 develop(intx, G1ConcRSHotCardLimit, 4, \
ysr@342 189 "The threshold that defines (>=) a hot card.") \
ysr@342 190 \
johnc@2278 191 develop(intx, G1MaxHotCardCountSizePercent, 25, \
johnc@2278 192 "The maximum size of the hot card count cache as a " \
johnc@2278 193 "percentage of the number of cards for the maximum heap.") \
johnc@2278 194 \
ysr@342 195 develop(bool, G1PrintOopAppls, false, \
ysr@342 196 "When true, print applications of closures to external locs.") \
ysr@342 197 \
iveresov@1261 198 develop(intx, G1RSetRegionEntriesBase, 256, \
iveresov@1261 199 "Max number of regions in a fine-grain table per MB.") \
iveresov@1261 200 \
iveresov@1261 201 product(intx, G1RSetRegionEntries, 0, \
iveresov@1261 202 "Max number of regions for which we keep bitmaps." \
iveresov@1261 203 "Will be set ergonomically by default") \
iveresov@1261 204 \
iveresov@1261 205 develop(intx, G1RSetSparseRegionEntriesBase, 4, \
iveresov@1261 206 "Max number of entries per region in a sparse table " \
iveresov@1261 207 "per MB.") \
iveresov@1261 208 \
iveresov@1261 209 product(intx, G1RSetSparseRegionEntries, 0, \
iveresov@1261 210 "Max number of entries per region in a sparse table." \
iveresov@1261 211 "Will be set ergonomically by default.") \
ysr@342 212 \
ysr@342 213 develop(bool, G1RecordHRRSOops, false, \
ysr@342 214 "When true, record recent calls to rem set operations.") \
ysr@342 215 \
ysr@342 216 develop(bool, G1RecordHRRSEvents, false, \
ysr@342 217 "When true, record recent calls to rem set operations.") \
ysr@342 218 \
ysr@342 219 develop(intx, G1MaxVerifyFailures, -1, \
ysr@342 220 "The maximum number of verification failrues to print. " \
ysr@342 221 "-1 means print all.") \
ysr@342 222 \
ysr@342 223 develop(bool, G1ScrubRemSets, true, \
ysr@342 224 "When true, do RS scrubbing after cleanup.") \
ysr@342 225 \
ysr@342 226 develop(bool, G1RSScrubVerbose, false, \
ysr@342 227 "When true, do RS scrubbing with verbose output.") \
ysr@342 228 \
ysr@342 229 develop(bool, G1YoungSurvRateVerbose, false, \
ysr@342 230 "print out the survival rate of young regions according to age.") \
ysr@342 231 \
ysr@342 232 develop(intx, G1YoungSurvRateNumRegionsSummary, 0, \
ysr@342 233 "the number of regions for which we'll print a surv rate " \
ysr@342 234 "summary.") \
ysr@342 235 \
tonyp@1282 236 product(intx, G1ReservePercent, 10, \
ysr@342 237 "It determines the minimum reserve we should have in the heap " \
ysr@342 238 "to minimize the probability of promotion failure.") \
ysr@342 239 \
tonyp@1282 240 diagnostic(bool, G1PrintHeapRegions, false, \
ysr@342 241 "If set G1 will print information on which regions are being " \
ysr@342 242 "allocated and which are reclaimed.") \
ysr@342 243 \
ysr@342 244 develop(bool, G1HRRSUseSparseTable, true, \
ysr@342 245 "When true, use sparse table to save space.") \
ysr@342 246 \
ysr@342 247 develop(bool, G1HRRSFlushLogBuffersOnVerify, false, \
ysr@342 248 "Forces flushing of log buffers before verification.") \
ysr@342 249 \
ysr@1087 250 develop(bool, G1FailOnFPError, false, \
ysr@1087 251 "When set, G1 will fail when it encounters an FP 'error', " \
ysr@1087 252 "so as to allow debugging") \
ysr@1087 253 \
johnc@751 254 develop(bool, G1FixedTenuringThreshold, false, \
apetrusenko@545 255 "When set, G1 will not adjust the tenuring threshold") \
apetrusenko@545 256 \
johnc@751 257 develop(bool, G1FixedEdenSize, false, \
apetrusenko@545 258 "When set, G1 will not allocate unused survivor space regions") \
apetrusenko@545 259 \
johnc@751 260 develop(uintx, G1FixedSurvivorSpaceSize, 0, \
apetrusenko@545 261 "If non-0 is the size of the G1 survivor space, " \
tonyp@638 262 "otherwise SurvivorRatio is used to determine the size") \
tonyp@638 263 \
tonyp@942 264 product(uintx, G1HeapRegionSize, 0, \
tonyp@942 265 "Size of the G1 regions.") \
tonyp@942 266 \
tonyp@1357 267 experimental(bool, G1UseParallelRSetUpdating, true, \
tonyp@638 268 "Enables the parallelization of remembered set updating " \
tonyp@638 269 "during evacuation pauses") \
tonyp@638 270 \
tonyp@1357 271 experimental(bool, G1UseParallelRSetScanning, true, \
tonyp@638 272 "Enables the parallelization of remembered set scanning " \
iveresov@794 273 "during evacuation pauses") \
iveresov@794 274 \
tonyp@1282 275 product(uintx, G1ConcRefinementThreads, 0, \
iveresov@794 276 "If non-0 is the number of parallel rem set update threads, " \
johnc@890 277 "otherwise the value is determined ergonomically.") \
johnc@890 278 \
johnc@890 279 develop(intx, G1CardCountCacheExpandThreshold, 16, \
johnc@890 280 "Expand the card count cache if the number of collisions for " \
apetrusenko@940 281 "a particular entry exceeds this value.") \
apetrusenko@940 282 \
apetrusenko@940 283 develop(bool, G1VerifyCTCleanup, false, \
ysr@1194 284 "Verify card table cleanup.") \
ysr@1194 285 \
iveresov@1261 286 product(uintx, G1RSetScanBlockSize, 64, \
iveresov@1261 287 "Size of a work unit of cards claimed by a worker thread" \
iveresov@1261 288 "during RSet scanning.") \
iveresov@1261 289 \
tonyp@2037 290 develop(uintx, G1SecondaryFreeListAppendLength, 5, \
tonyp@2037 291 "The number of regions we will add to the secondary free list " \
tonyp@2037 292 "at every append operation") \
tonyp@2037 293 \
tonyp@2037 294 develop(bool, G1ConcRegionFreeingVerbose, false, \
tonyp@2037 295 "Enables verboseness during concurrent region freeing") \
tonyp@2037 296 \
tonyp@2037 297 develop(bool, G1StressConcRegionFreeing, false, \
tonyp@2037 298 "It stresses the concurrent region freeing operation") \
tonyp@2037 299 \
tonyp@2037 300 develop(uintx, G1StressConcRegionFreeingDelayMillis, 0, \
tonyp@2037 301 "Artificial delay during concurrent region freeing") \
tonyp@2037 302 \
tonyp@2382 303 develop(uintx, G1DummyRegionsPerGC, 0, \
tonyp@2382 304 "The number of dummy regions G1 will allocate at the end of " \
tonyp@2382 305 "each evacuation pause in order to artificially fill up the " \
tonyp@2382 306 "heap and stress the marking implementation.") \
tonyp@2382 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