annotate src/share/vm/gc_implementation/g1/g1_globals.hpp @ 2037:0fa27f37d4d4

6977804: G1: remove the zero-filling thread Summary: This changeset removes the zero-filling thread from G1 and collapses the two free region lists we had before (the "free" and "unclean" lists) into one. The new free list uses the new heap region sets / lists abstractions that we'll ultimately use it to keep track of all regions in the heap. A heap region set was also introduced for the humongous regions. Finally, this change increases the concurrency between the thread that completes freeing regions (after a cleanup pause) and the rest of the system (before we'd have to wait for said thread to complete before allocating a new region). The changest also includes a lot of refactoring and code simplification. Reviewed-by: jcoomes, johnc
author tonyp
date Wed, 19 Jan 2011 19:30:42 -0500
parents 7e37af9d69ef
children 234761c55641
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 \
ysr@342 84 develop(bool, G1SATBBarrierPrintNullPreVals, false, \
ysr@342 85 "If true, count frac of ptr writes with null pre-vals.") \
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 \
ysr@342 120 develop(bool, G1PrintCTFilterStats, false, \
ysr@342 121 "If true, print stats on RS filtering effectiveness") \
ysr@342 122 \
iveresov@616 123 develop(bool, G1DeferredRSUpdate, true, \
iveresov@616 124 "If true, use deferred RS updates") \
iveresov@616 125 \
ysr@342 126 develop(bool, G1RSLogCheckCardTable, false, \
ysr@342 127 "If true, verify that no dirty cards remain after RS log " \
ysr@342 128 "processing.") \
ysr@342 129 \
ysr@342 130 develop(bool, G1RSCountHisto, false, \
ysr@342 131 "If true, print a histogram of RS occupancies after each pause") \
ysr@342 132 \
ysr@342 133 develop(intx, G1PrintRegionLivenessInfo, 0, \
ysr@342 134 "When > 0, print the occupancies of the <n> best and worst" \
ysr@342 135 "regions.") \
ysr@342 136 \
ysr@342 137 develop(bool, G1PrintParCleanupStats, false, \
ysr@342 138 "When true, print extra stats about parallel cleanup.") \
ysr@342 139 \
ysr@342 140 develop(bool, G1DisablePreBarrier, false, \
ysr@342 141 "Disable generation of pre-barrier (i.e., marking barrier) ") \
ysr@342 142 \
ysr@342 143 develop(bool, G1DisablePostBarrier, false, \
ysr@342 144 "Disable generation of post-barrier (i.e., RS barrier) ") \
ysr@342 145 \
tonyp@883 146 product(intx, G1UpdateBufferSize, 256, \
tonyp@883 147 "Size of an update buffer") \
tonyp@883 148 \
tonyp@1282 149 product(intx, G1ConcRefinementYellowZone, 0, \
tonyp@883 150 "Number of enqueued update buffers that will " \
iveresov@1111 151 "trigger concurrent processing. Will be selected ergonomically " \
iveresov@1111 152 "by default.") \
tonyp@883 153 \
tonyp@1282 154 product(intx, G1ConcRefinementRedZone, 0, \
tonyp@883 155 "Maximum number of enqueued update buffers before mutator " \
iveresov@1111 156 "threads start processing new ones instead of enqueueing them. " \
iveresov@1111 157 "Will be selected ergonomically by default. Zero will disable " \
iveresov@1111 158 "concurrent processing.") \
iveresov@1111 159 \
tonyp@1282 160 product(intx, G1ConcRefinementGreenZone, 0, \
iveresov@1111 161 "The number of update buffers that are left in the queue by the " \
iveresov@1111 162 "concurrent processing threads. Will be selected ergonomically " \
iveresov@1111 163 "by default.") \
iveresov@1111 164 \
tonyp@1282 165 product(intx, G1ConcRefinementServiceIntervalMillis, 300, \
iveresov@1111 166 "The last concurrent refinement thread wakes up every " \
iveresov@1111 167 "specified number of milliseconds to do miscellaneous work.") \
iveresov@1111 168 \
tonyp@1282 169 product(intx, G1ConcRefinementThresholdStep, 0, \
iveresov@1111 170 "Each time the rset update queue increases by this amount " \
iveresov@1111 171 "activate the next refinement thread if available. " \
iveresov@1111 172 "Will be selected ergonomically by default.") \
iveresov@1111 173 \
tonyp@1282 174 product(intx, G1RSetUpdatingPauseTimePercent, 10, \
iveresov@1111 175 "A target percentage of time that is allowed to be spend on " \
iveresov@1111 176 "process RS update buffers during the collection pause.") \
iveresov@1111 177 \
tonyp@1282 178 product(bool, G1UseAdaptiveConcRefinement, true, \
iveresov@1111 179 "Select green, yellow and red zones adaptively to meet the " \
iveresov@1111 180 "the pause requirements.") \
ysr@342 181 \
ysr@342 182 develop(intx, G1ConcRSLogCacheSize, 10, \
ysr@342 183 "Log base 2 of the length of conc RS hot-card cache.") \
ysr@342 184 \
johnc@751 185 develop(intx, G1ConcRSHotCardLimit, 4, \
ysr@342 186 "The threshold that defines (>=) a hot card.") \
ysr@342 187 \
ysr@342 188 develop(bool, G1PrintOopAppls, false, \
ysr@342 189 "When true, print applications of closures to external locs.") \
ysr@342 190 \
iveresov@1261 191 develop(intx, G1RSetRegionEntriesBase, 256, \
iveresov@1261 192 "Max number of regions in a fine-grain table per MB.") \
iveresov@1261 193 \
iveresov@1261 194 product(intx, G1RSetRegionEntries, 0, \
iveresov@1261 195 "Max number of regions for which we keep bitmaps." \
iveresov@1261 196 "Will be set ergonomically by default") \
iveresov@1261 197 \
iveresov@1261 198 develop(intx, G1RSetSparseRegionEntriesBase, 4, \
iveresov@1261 199 "Max number of entries per region in a sparse table " \
iveresov@1261 200 "per MB.") \
iveresov@1261 201 \
iveresov@1261 202 product(intx, G1RSetSparseRegionEntries, 0, \
iveresov@1261 203 "Max number of entries per region in a sparse table." \
iveresov@1261 204 "Will be set ergonomically by default.") \
ysr@342 205 \
ysr@342 206 develop(bool, G1RecordHRRSOops, false, \
ysr@342 207 "When true, record recent calls to rem set operations.") \
ysr@342 208 \
ysr@342 209 develop(bool, G1RecordHRRSEvents, false, \
ysr@342 210 "When true, record recent calls to rem set operations.") \
ysr@342 211 \
ysr@342 212 develop(intx, G1MaxVerifyFailures, -1, \
ysr@342 213 "The maximum number of verification failrues to print. " \
ysr@342 214 "-1 means print all.") \
ysr@342 215 \
ysr@342 216 develop(bool, G1ScrubRemSets, true, \
ysr@342 217 "When true, do RS scrubbing after cleanup.") \
ysr@342 218 \
ysr@342 219 develop(bool, G1RSScrubVerbose, false, \
ysr@342 220 "When true, do RS scrubbing with verbose output.") \
ysr@342 221 \
ysr@342 222 develop(bool, G1YoungSurvRateVerbose, false, \
ysr@342 223 "print out the survival rate of young regions according to age.") \
ysr@342 224 \
ysr@342 225 develop(intx, G1YoungSurvRateNumRegionsSummary, 0, \
ysr@342 226 "the number of regions for which we'll print a surv rate " \
ysr@342 227 "summary.") \
ysr@342 228 \
tonyp@1282 229 product(intx, G1ReservePercent, 10, \
ysr@342 230 "It determines the minimum reserve we should have in the heap " \
ysr@342 231 "to minimize the probability of promotion failure.") \
ysr@342 232 \
tonyp@1282 233 diagnostic(bool, G1PrintHeapRegions, false, \
ysr@342 234 "If set G1 will print information on which regions are being " \
ysr@342 235 "allocated and which are reclaimed.") \
ysr@342 236 \
ysr@342 237 develop(bool, G1HRRSUseSparseTable, true, \
ysr@342 238 "When true, use sparse table to save space.") \
ysr@342 239 \
ysr@342 240 develop(bool, G1HRRSFlushLogBuffersOnVerify, false, \
ysr@342 241 "Forces flushing of log buffers before verification.") \
ysr@342 242 \
ysr@1087 243 develop(bool, G1FailOnFPError, false, \
ysr@1087 244 "When set, G1 will fail when it encounters an FP 'error', " \
ysr@1087 245 "so as to allow debugging") \
ysr@1087 246 \
johnc@751 247 develop(bool, G1FixedTenuringThreshold, false, \
apetrusenko@545 248 "When set, G1 will not adjust the tenuring threshold") \
apetrusenko@545 249 \
johnc@751 250 develop(bool, G1FixedEdenSize, false, \
apetrusenko@545 251 "When set, G1 will not allocate unused survivor space regions") \
apetrusenko@545 252 \
johnc@751 253 develop(uintx, G1FixedSurvivorSpaceSize, 0, \
apetrusenko@545 254 "If non-0 is the size of the G1 survivor space, " \
tonyp@638 255 "otherwise SurvivorRatio is used to determine the size") \
tonyp@638 256 \
tonyp@942 257 product(uintx, G1HeapRegionSize, 0, \
tonyp@942 258 "Size of the G1 regions.") \
tonyp@942 259 \
tonyp@1357 260 experimental(bool, G1UseParallelRSetUpdating, true, \
tonyp@638 261 "Enables the parallelization of remembered set updating " \
tonyp@638 262 "during evacuation pauses") \
tonyp@638 263 \
tonyp@1357 264 experimental(bool, G1UseParallelRSetScanning, true, \
tonyp@638 265 "Enables the parallelization of remembered set scanning " \
iveresov@794 266 "during evacuation pauses") \
iveresov@794 267 \
tonyp@1282 268 product(uintx, G1ConcRefinementThreads, 0, \
iveresov@794 269 "If non-0 is the number of parallel rem set update threads, " \
johnc@890 270 "otherwise the value is determined ergonomically.") \
johnc@890 271 \
johnc@890 272 develop(intx, G1CardCountCacheExpandThreshold, 16, \
johnc@890 273 "Expand the card count cache if the number of collisions for " \
apetrusenko@940 274 "a particular entry exceeds this value.") \
apetrusenko@940 275 \
apetrusenko@940 276 develop(bool, G1VerifyCTCleanup, false, \
ysr@1194 277 "Verify card table cleanup.") \
ysr@1194 278 \
iveresov@1261 279 product(uintx, G1RSetScanBlockSize, 64, \
iveresov@1261 280 "Size of a work unit of cards claimed by a worker thread" \
iveresov@1261 281 "during RSet scanning.") \
iveresov@1261 282 \
tonyp@2037 283 develop(uintx, G1SecondaryFreeListAppendLength, 5, \
tonyp@2037 284 "The number of regions we will add to the secondary free list " \
tonyp@2037 285 "at every append operation") \
tonyp@2037 286 \
tonyp@2037 287 develop(bool, G1ConcRegionFreeingVerbose, false, \
tonyp@2037 288 "Enables verboseness during concurrent region freeing") \
tonyp@2037 289 \
tonyp@2037 290 develop(bool, G1StressConcRegionFreeing, false, \
tonyp@2037 291 "It stresses the concurrent region freeing operation") \
tonyp@2037 292 \
tonyp@2037 293 develop(uintx, G1StressConcRegionFreeingDelayMillis, 0, \
tonyp@2037 294 "Artificial delay during concurrent region freeing") \
tonyp@2037 295 \
tonyp@2037 296 develop(bool, ReduceInitialCardMarksForG1, false, \
ysr@1194 297 "When ReduceInitialCardMarks is true, this flag setting " \
ysr@1194 298 " controls whether G1 allows the RICM optimization")
ysr@342 299
ysr@350 300 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 301
stefank@1879 302 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP