annotate src/share/vm/gc_implementation/g1/g1_globals.hpp @ 3104:a9647476d1a4

7132029: G1: mixed GC phase lasts for longer than it should Summary: Revamp of the mechanism that chooses old regions for inclusion in the CSet. It simplifies the code and introduces min and max bounds on the number of old regions added to the CSet at each mixed GC to avoid pathological cases. It also ensures that when we do a mixed GC we'll always find old regions to add to the CSet (i.e., it eliminates the case where a mixed GC will collect no old regions which can happen today). Reviewed-by: johnc, brutisso
author tonyp
date Wed, 15 Feb 2012 13:06:53 -0500
parents 1d6185f732aa
children 21595f05bc93
rev   line source
ysr@342 1 /*
tonyp@3104 2 * Copyright (c) 2001, 2012, 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 \
ysr@342 42 develop(intx, G1MarkingVerboseLevel, 0, \
ysr@342 43 "Level (0-4) of verboseness of the marking code") \
ysr@342 44 \
tonyp@1044 45 develop(bool, G1PrintReachableAtInitialMark, false, \
tonyp@1044 46 "Reachable object dump at the initial mark pause") \
tonyp@1044 47 \
tonyp@1044 48 develop(bool, G1VerifyDuringGCPrintReachable, false, \
tonyp@1044 49 "If conc mark verification fails, dump reachable objects") \
tonyp@1044 50 \
tonyp@1044 51 develop(ccstr, G1PrintReachableBaseFile, NULL, \
tonyp@1044 52 "The base file name for the reachable object dumps") \
ysr@342 53 \
ysr@342 54 develop(bool, G1TraceMarkStackOverflow, false, \
ysr@342 55 "If true, extra debugging code for CM restart for ovflw.") \
ysr@342 56 \
tonyp@1282 57 diagnostic(bool, G1SummarizeConcMark, false, \
ysr@342 58 "Summarize concurrent mark info") \
ysr@342 59 \
johnc@751 60 diagnostic(bool, G1SummarizeRSetStats, false, \
ysr@342 61 "Summarize remembered set processing info") \
ysr@342 62 \
tonyp@884 63 diagnostic(intx, G1SummarizeRSetStatsPeriod, 0, \
tonyp@884 64 "The period (in number of GCs) at which we will generate " \
tonyp@884 65 "update buffer processing info " \
tonyp@884 66 "(0 means do not periodically generate this info); " \
tonyp@884 67 "it also requires -XX:+G1SummarizeRSetStats") \
tonyp@884 68 \
tonyp@1282 69 diagnostic(bool, G1TraceConcRefinement, false, \
ysr@342 70 "Trace G1 concurrent refinement") \
ysr@342 71 \
johnc@751 72 product(intx, G1MarkRegionStackSize, 1024 * 1024, \
ysr@342 73 "Size of the region stack for concurrent marking.") \
ysr@342 74 \
johnc@2059 75 product(double, G1ConcMarkStepDurationMillis, 10.0, \
johnc@2059 76 "Target duration of individual concurrent marking steps " \
johnc@2059 77 "in milliseconds.") \
johnc@2059 78 \
johnc@2059 79 product(intx, G1RefProcDrainInterval, 10, \
johnc@2059 80 "The number of discovered reference objects to process before " \
johnc@2059 81 "draining concurrent marking work queues.") \
johnc@2059 82 \
johnc@2346 83 experimental(bool, G1UseConcMarkReferenceProcessing, true, \
johnc@2283 84 "If true, enable reference discovery during concurrent " \
johnc@2346 85 "marking and reference processing at the end of remark.") \
ysr@342 86 \
tonyp@1282 87 product(intx, G1SATBBufferSize, 1*K, \
ysr@342 88 "Number of entries in an SATB log buffer.") \
ysr@342 89 \
tonyp@1282 90 develop(intx, G1SATBProcessCompletedThreshold, 20, \
ysr@342 91 "Number of completed buffers that triggers log processing.") \
ysr@342 92 \
tonyp@2034 93 product(uintx, G1SATBBufferEnqueueingThresholdPercent, 60, \
tonyp@2034 94 "Before enqueueing them, each mutator thread tries to do some " \
tonyp@2034 95 "filtering on the SATB buffers it generates. If post-filtering " \
tonyp@2034 96 "the percentage of retained entries is over this threshold " \
tonyp@2034 97 "the buffer will be enqueued for processing. A value of 0 " \
tonyp@2034 98 "specifies that mutator threads should not do such filtering.") \
tonyp@2034 99 \
ysr@342 100 develop(intx, G1ExtraRegionSurvRate, 33, \
ysr@342 101 "If the young survival rate is S, and there's room left in " \
ysr@342 102 "to-space, we will allow regions whose survival rate is up to " \
ysr@342 103 "S + (1 - S)*X, where X is this parameter (as a fraction.)") \
ysr@342 104 \
ysr@342 105 develop(intx, G1InitYoungSurvRatio, 50, \
ysr@342 106 "Expected Survival Rate for newly allocated bytes") \
ysr@342 107 \
ysr@342 108 develop(bool, G1SATBPrintStubs, false, \
ysr@342 109 "If true, print generated stubs for the SATB barrier") \
ysr@342 110 \
tonyp@1282 111 experimental(intx, G1ExpandByPercentOfAvailable, 20, \
ysr@342 112 "When expanding, % of uncommitted space to claim.") \
ysr@342 113 \
ysr@342 114 develop(bool, G1RSBarrierRegionFilter, true, \
ysr@342 115 "If true, generate region filtering code in RS barrier") \
ysr@342 116 \
ysr@342 117 develop(bool, G1RSBarrierNullFilter, true, \
ysr@342 118 "If true, generate null-pointer filtering code in RS barrier") \
ysr@342 119 \
iveresov@616 120 develop(bool, G1DeferredRSUpdate, true, \
iveresov@616 121 "If true, use deferred RS updates") \
iveresov@616 122 \
ysr@342 123 develop(bool, G1RSLogCheckCardTable, false, \
ysr@342 124 "If true, verify that no dirty cards remain after RS log " \
ysr@342 125 "processing.") \
ysr@342 126 \
ysr@342 127 develop(bool, G1RSCountHisto, false, \
ysr@342 128 "If true, print a histogram of RS occupancies after each pause") \
ysr@342 129 \
tonyp@2686 130 diagnostic(bool, G1PrintRegionLivenessInfo, false, \
tonyp@2686 131 "Prints the liveness information for all regions in the heap " \
tonyp@2686 132 "at the end of a marking cycle.") \
ysr@342 133 \
ysr@342 134 develop(bool, G1PrintParCleanupStats, false, \
ysr@342 135 "When true, print extra stats about parallel cleanup.") \
ysr@342 136 \
tonyp@883 137 product(intx, G1UpdateBufferSize, 256, \
tonyp@883 138 "Size of an update buffer") \
tonyp@883 139 \
tonyp@1282 140 product(intx, G1ConcRefinementYellowZone, 0, \
tonyp@883 141 "Number of enqueued update buffers that will " \
iveresov@1111 142 "trigger concurrent processing. Will be selected ergonomically " \
iveresov@1111 143 "by default.") \
tonyp@883 144 \
tonyp@1282 145 product(intx, G1ConcRefinementRedZone, 0, \
tonyp@883 146 "Maximum number of enqueued update buffers before mutator " \
iveresov@1111 147 "threads start processing new ones instead of enqueueing them. " \
iveresov@1111 148 "Will be selected ergonomically by default. Zero will disable " \
iveresov@1111 149 "concurrent processing.") \
iveresov@1111 150 \
tonyp@1282 151 product(intx, G1ConcRefinementGreenZone, 0, \
iveresov@1111 152 "The number of update buffers that are left in the queue by the " \
iveresov@1111 153 "concurrent processing threads. Will be selected ergonomically " \
iveresov@1111 154 "by default.") \
iveresov@1111 155 \
tonyp@1282 156 product(intx, G1ConcRefinementServiceIntervalMillis, 300, \
iveresov@1111 157 "The last concurrent refinement thread wakes up every " \
iveresov@1111 158 "specified number of milliseconds to do miscellaneous work.") \
iveresov@1111 159 \
tonyp@1282 160 product(intx, G1ConcRefinementThresholdStep, 0, \
iveresov@1111 161 "Each time the rset update queue increases by this amount " \
iveresov@1111 162 "activate the next refinement thread if available. " \
iveresov@1111 163 "Will be selected ergonomically by default.") \
iveresov@1111 164 \
tonyp@1282 165 product(intx, G1RSetUpdatingPauseTimePercent, 10, \
iveresov@1111 166 "A target percentage of time that is allowed to be spend on " \
iveresov@1111 167 "process RS update buffers during the collection pause.") \
iveresov@1111 168 \
tonyp@1282 169 product(bool, G1UseAdaptiveConcRefinement, true, \
iveresov@1111 170 "Select green, yellow and red zones adaptively to meet the " \
iveresov@1111 171 "the pause requirements.") \
ysr@342 172 \
ysr@342 173 develop(intx, G1ConcRSLogCacheSize, 10, \
ysr@342 174 "Log base 2 of the length of conc RS hot-card cache.") \
ysr@342 175 \
johnc@751 176 develop(intx, G1ConcRSHotCardLimit, 4, \
ysr@342 177 "The threshold that defines (>=) a hot card.") \
ysr@342 178 \
johnc@2278 179 develop(intx, G1MaxHotCardCountSizePercent, 25, \
johnc@2278 180 "The maximum size of the hot card count cache as a " \
johnc@2278 181 "percentage of the number of cards for the maximum heap.") \
johnc@2278 182 \
ysr@342 183 develop(bool, G1PrintOopAppls, false, \
ysr@342 184 "When true, print applications of closures to external locs.") \
ysr@342 185 \
iveresov@1261 186 develop(intx, G1RSetRegionEntriesBase, 256, \
iveresov@1261 187 "Max number of regions in a fine-grain table per MB.") \
iveresov@1261 188 \
iveresov@1261 189 product(intx, G1RSetRegionEntries, 0, \
iveresov@1261 190 "Max number of regions for which we keep bitmaps." \
iveresov@1261 191 "Will be set ergonomically by default") \
iveresov@1261 192 \
iveresov@1261 193 develop(intx, G1RSetSparseRegionEntriesBase, 4, \
iveresov@1261 194 "Max number of entries per region in a sparse table " \
iveresov@1261 195 "per MB.") \
iveresov@1261 196 \
iveresov@1261 197 product(intx, G1RSetSparseRegionEntries, 0, \
iveresov@1261 198 "Max number of entries per region in a sparse table." \
iveresov@1261 199 "Will be set ergonomically by default.") \
ysr@342 200 \
ysr@342 201 develop(bool, G1RecordHRRSOops, false, \
ysr@342 202 "When true, record recent calls to rem set operations.") \
ysr@342 203 \
ysr@342 204 develop(bool, G1RecordHRRSEvents, false, \
ysr@342 205 "When true, record recent calls to rem set operations.") \
ysr@342 206 \
ysr@342 207 develop(intx, G1MaxVerifyFailures, -1, \
ysr@342 208 "The maximum number of verification failrues to print. " \
ysr@342 209 "-1 means print all.") \
ysr@342 210 \
ysr@342 211 develop(bool, G1ScrubRemSets, true, \
ysr@342 212 "When true, do RS scrubbing after cleanup.") \
ysr@342 213 \
ysr@342 214 develop(bool, G1RSScrubVerbose, false, \
ysr@342 215 "When true, do RS scrubbing with verbose output.") \
ysr@342 216 \
ysr@342 217 develop(bool, G1YoungSurvRateVerbose, false, \
ysr@342 218 "print out the survival rate of young regions according to age.") \
ysr@342 219 \
ysr@342 220 develop(intx, G1YoungSurvRateNumRegionsSummary, 0, \
ysr@342 221 "the number of regions for which we'll print a surv rate " \
ysr@342 222 "summary.") \
ysr@342 223 \
tonyp@2684 224 product(uintx, G1ReservePercent, 10, \
ysr@342 225 "It determines the minimum reserve we should have in the heap " \
ysr@342 226 "to minimize the probability of promotion failure.") \
ysr@342 227 \
tonyp@1282 228 diagnostic(bool, G1PrintHeapRegions, false, \
ysr@342 229 "If set G1 will print information on which regions are being " \
ysr@342 230 "allocated and which are reclaimed.") \
ysr@342 231 \
ysr@342 232 develop(bool, G1HRRSUseSparseTable, true, \
ysr@342 233 "When true, use sparse table to save space.") \
ysr@342 234 \
ysr@342 235 develop(bool, G1HRRSFlushLogBuffersOnVerify, false, \
ysr@342 236 "Forces flushing of log buffers before verification.") \
ysr@342 237 \
ysr@1087 238 develop(bool, G1FailOnFPError, false, \
ysr@1087 239 "When set, G1 will fail when it encounters an FP 'error', " \
ysr@1087 240 "so as to allow debugging") \
ysr@1087 241 \
tonyp@942 242 product(uintx, G1HeapRegionSize, 0, \
tonyp@942 243 "Size of the G1 regions.") \
tonyp@942 244 \
tonyp@1357 245 experimental(bool, G1UseParallelRSetUpdating, true, \
tonyp@638 246 "Enables the parallelization of remembered set updating " \
tonyp@638 247 "during evacuation pauses") \
tonyp@638 248 \
tonyp@1357 249 experimental(bool, G1UseParallelRSetScanning, true, \
tonyp@638 250 "Enables the parallelization of remembered set scanning " \
iveresov@794 251 "during evacuation pauses") \
iveresov@794 252 \
tonyp@1282 253 product(uintx, G1ConcRefinementThreads, 0, \
iveresov@794 254 "If non-0 is the number of parallel rem set update threads, " \
johnc@890 255 "otherwise the value is determined ergonomically.") \
johnc@890 256 \
johnc@890 257 develop(intx, G1CardCountCacheExpandThreshold, 16, \
johnc@890 258 "Expand the card count cache if the number of collisions for " \
apetrusenko@940 259 "a particular entry exceeds this value.") \
apetrusenko@940 260 \
apetrusenko@940 261 develop(bool, G1VerifyCTCleanup, false, \
ysr@1194 262 "Verify card table cleanup.") \
ysr@1194 263 \
iveresov@1261 264 product(uintx, G1RSetScanBlockSize, 64, \
iveresov@1261 265 "Size of a work unit of cards claimed by a worker thread" \
iveresov@1261 266 "during RSet scanning.") \
iveresov@1261 267 \
tonyp@2037 268 develop(uintx, G1SecondaryFreeListAppendLength, 5, \
tonyp@2037 269 "The number of regions we will add to the secondary free list " \
tonyp@2037 270 "at every append operation") \
tonyp@2037 271 \
tonyp@2037 272 develop(bool, G1ConcRegionFreeingVerbose, false, \
tonyp@2037 273 "Enables verboseness during concurrent region freeing") \
tonyp@2037 274 \
tonyp@2037 275 develop(bool, G1StressConcRegionFreeing, false, \
tonyp@2037 276 "It stresses the concurrent region freeing operation") \
tonyp@2037 277 \
tonyp@2037 278 develop(uintx, G1StressConcRegionFreeingDelayMillis, 0, \
tonyp@2037 279 "Artificial delay during concurrent region freeing") \
tonyp@2037 280 \
tonyp@2382 281 develop(uintx, G1DummyRegionsPerGC, 0, \
tonyp@2382 282 "The number of dummy regions G1 will allocate at the end of " \
tonyp@2382 283 "each evacuation pause in order to artificially fill up the " \
tonyp@2382 284 "heap and stress the marking implementation.") \
tonyp@2382 285 \
johnc@2069 286 develop(bool, G1ExitOnExpansionFailure, false, \
johnc@2069 287 "Raise a fatal VM exit out of memory failure in the event " \
tonyp@2413 288 " that heap expansion fails due to running out of swap.") \
tonyp@2413 289 \
tonyp@2413 290 develop(uintx, G1ConcMarkForceOverflow, 0, \
tonyp@2413 291 "The number of times we'll force an overflow during " \
brutisso@2923 292 "concurrent marking") \
brutisso@2923 293 \
brutisso@2923 294 develop(uintx, G1DefaultMinNewGenPercent, 20, \
brutisso@2923 295 "Percentage (0-100) of the heap size to use as minimum " \
brutisso@2923 296 "young gen size.") \
brutisso@2923 297 \
brutisso@2980 298 develop(uintx, G1DefaultMaxNewGenPercent, 80, \
brutisso@2923 299 "Percentage (0-100) of the heap size to use as maximum " \
tonyp@3104 300 "young gen size.") \
tonyp@3104 301 \
tonyp@3104 302 develop(uintx, G1OldCSetRegionLiveThresholdPercent, 95, \
tonyp@3104 303 "Threshold for regions to be added to the collection set. " \
tonyp@3104 304 "Regions with more live bytes that this will not be collected.") \
tonyp@3104 305 \
tonyp@3104 306 develop(uintx, G1OldReclaimableThresholdPercent, 1, \
tonyp@3104 307 "Threshold for the remaining old reclaimable bytes, expressed " \
tonyp@3104 308 "as a percentage of the heap size. If the old reclaimable bytes " \
tonyp@3104 309 "are under this we will not collect them with more mixed GCs.") \
tonyp@3104 310 \
tonyp@3104 311 develop(uintx, G1MaxMixedGCNum, 4, \
tonyp@3104 312 "The maximum desired number of mixed GCs after a marking cycle.") \
tonyp@3104 313 \
tonyp@3104 314 develop(uintx, G1OldCSetRegionThresholdPercent, 10, \
tonyp@3104 315 "An upper bound for the number of old CSet regions expressed " \
tonyp@3104 316 "as a percentage of the heap size.")
ysr@342 317
ysr@350 318 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 319
stefank@1879 320 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP