src/share/vm/gc_implementation/g1/g1_globals.hpp

Thu, 22 Sep 2011 10:57:37 -0700

author
johnc
date
Thu, 22 Sep 2011 10:57:37 -0700
changeset 3175
4dfb2df418f2
parent 3121
3bddbf0f57d6
child 3184
246daf2c601d
permissions
-rw-r--r--

6484982: G1: process references during evacuation pauses
Summary: G1 now uses two reference processors - one is used by concurrent marking and the other is used by STW GCs (both full and incremental evacuation pauses). In an evacuation pause, the reference processor is embedded into the closures used to scan objects. Doing so causes causes reference objects to be 'discovered' by the reference processor. At the end of the evacuation pause, these discovered reference objects are processed - preserving (and copying) referent objects (and their reachable graphs) as appropriate.
Reviewed-by: ysr, jwilhelm, brutisso, stefank, tonyp

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

mercurial