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

Wed, 07 Jan 2015 15:15:37 +0100

author
tschatzl
date
Wed, 07 Jan 2015 15:15:37 +0100
changeset 7828
cbc7c4c9e11c
parent 7656
ad32e85474ff
child 7994
04ff2f6cd0eb
permissions
-rw-r--r--

8048179: Early reclaim of large objects that are referenced by a few objects
Summary: Push the remembered sets of large objects with few referenced into the dirty card queue at the beginning of the evacuation so that they may end up with zero remembered set entries at the end of the collection, and are potentially reclaimed. Also improve timing measurements of the early reclaim mechanism, and shorten flag names.
Reviewed-by: brutisso, jmasa, dfazunen

ysr@777 1 /*
tschatzl@6402 2 * Copyright (c) 2001, 2014, 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"
ysr@777 29 //
ysr@777 30 // Defines all globals flags used by the garbage-first compiler.
ysr@777 31 //
ysr@777 32
ysr@785 33 #define G1_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw) \
ysr@777 34 \
poonam@4650 35 product(uintx, G1ConfidencePercent, 50, \
ysr@777 36 "Confidence level for MMU/pause predictions") \
ysr@777 37 \
tonyp@1319 38 develop(intx, G1MarkingOverheadPercent, 0, \
ysr@777 39 "Overhead of concurrent marking") \
ysr@777 40 \
ysr@777 41 develop(intx, G1MarkingVerboseLevel, 0, \
ysr@777 42 "Level (0-4) of verboseness of the marking code") \
ysr@777 43 \
tonyp@1479 44 develop(bool, G1PrintReachableAtInitialMark, false, \
tonyp@1479 45 "Reachable object dump at the initial mark pause") \
tonyp@1479 46 \
tonyp@1479 47 develop(bool, G1VerifyDuringGCPrintReachable, false, \
tonyp@1479 48 "If conc mark verification fails, dump reachable objects") \
tonyp@1479 49 \
tonyp@1479 50 develop(ccstr, G1PrintReachableBaseFile, NULL, \
tonyp@1479 51 "The base file name for the reachable object dumps") \
ysr@777 52 \
ysr@777 53 develop(bool, G1TraceMarkStackOverflow, false, \
ysr@777 54 "If true, extra debugging code for CM restart for ovflw.") \
ysr@777 55 \
johnc@3891 56 develop(bool, G1TraceHeapRegionRememberedSet, false, \
johnc@3891 57 "Enables heap region remembered set debug logs") \
johnc@3891 58 \
tonyp@1717 59 diagnostic(bool, G1SummarizeConcMark, false, \
ysr@777 60 "Summarize concurrent mark info") \
ysr@777 61 \
johnc@1186 62 diagnostic(bool, G1SummarizeRSetStats, false, \
ysr@777 63 "Summarize remembered set processing info") \
ysr@777 64 \
tonyp@1319 65 diagnostic(intx, G1SummarizeRSetStatsPeriod, 0, \
tonyp@1319 66 "The period (in number of GCs) at which we will generate " \
tonyp@1319 67 "update buffer processing info " \
tonyp@1319 68 "(0 means do not periodically generate this info); " \
tonyp@1319 69 "it also requires -XX:+G1SummarizeRSetStats") \
tonyp@1319 70 \
tonyp@1717 71 diagnostic(bool, G1TraceConcRefinement, false, \
ysr@777 72 "Trace G1 concurrent refinement") \
ysr@777 73 \
tschatzl@6229 74 experimental(bool, G1TraceStringSymbolTableScrubbing, false, \
tschatzl@6229 75 "Trace information string and symbol table scrubbing.") \
tschatzl@6229 76 \
johnc@2494 77 product(double, G1ConcMarkStepDurationMillis, 10.0, \
johnc@2494 78 "Target duration of individual concurrent marking steps " \
johnc@2494 79 "in milliseconds.") \
johnc@2494 80 \
johnc@2494 81 product(intx, G1RefProcDrainInterval, 10, \
johnc@2494 82 "The number of discovered reference objects to process before " \
johnc@2494 83 "draining concurrent marking work queues.") \
johnc@2494 84 \
johnc@2781 85 experimental(bool, G1UseConcMarkReferenceProcessing, true, \
johnc@2718 86 "If true, enable reference discovery during concurrent " \
johnc@2781 87 "marking and reference processing at the end of remark.") \
ysr@777 88 \
tonyp@1717 89 product(intx, G1SATBBufferSize, 1*K, \
ysr@777 90 "Number of entries in an SATB log buffer.") \
ysr@777 91 \
tonyp@1717 92 develop(intx, G1SATBProcessCompletedThreshold, 20, \
ysr@777 93 "Number of completed buffers that triggers log processing.") \
ysr@777 94 \
tonyp@2469 95 product(uintx, G1SATBBufferEnqueueingThresholdPercent, 60, \
tonyp@2469 96 "Before enqueueing them, each mutator thread tries to do some " \
tonyp@2469 97 "filtering on the SATB buffers it generates. If post-filtering " \
tonyp@2469 98 "the percentage of retained entries is over this threshold " \
tonyp@2469 99 "the buffer will be enqueued for processing. A value of 0 " \
tonyp@2469 100 "specifies that mutator threads should not do such filtering.") \
tonyp@2469 101 \
ysr@777 102 develop(bool, G1SATBPrintStubs, false, \
ysr@777 103 "If true, print generated stubs for the SATB barrier") \
ysr@777 104 \
tonyp@1717 105 experimental(intx, G1ExpandByPercentOfAvailable, 20, \
ysr@777 106 "When expanding, % of uncommitted space to claim.") \
ysr@777 107 \
ysr@777 108 develop(bool, G1RSBarrierRegionFilter, true, \
ysr@777 109 "If true, generate region filtering code in RS barrier") \
ysr@777 110 \
ysr@777 111 develop(bool, G1RSLogCheckCardTable, false, \
ysr@777 112 "If true, verify that no dirty cards remain after RS log " \
ysr@777 113 "processing.") \
ysr@777 114 \
tonyp@3121 115 diagnostic(bool, G1PrintRegionLivenessInfo, false, \
tonyp@3121 116 "Prints the liveness information for all regions in the heap " \
tonyp@3121 117 "at the end of a marking cycle.") \
ysr@777 118 \
tonyp@1318 119 product(intx, G1UpdateBufferSize, 256, \
tonyp@1318 120 "Size of an update buffer") \
tonyp@1318 121 \
tonyp@1717 122 product(intx, G1ConcRefinementYellowZone, 0, \
tonyp@1318 123 "Number of enqueued update buffers that will " \
iveresov@1546 124 "trigger concurrent processing. Will be selected ergonomically " \
iveresov@1546 125 "by default.") \
tonyp@1318 126 \
tonyp@1717 127 product(intx, G1ConcRefinementRedZone, 0, \
tonyp@1318 128 "Maximum number of enqueued update buffers before mutator " \
iveresov@1546 129 "threads start processing new ones instead of enqueueing them. " \
iveresov@1546 130 "Will be selected ergonomically by default. Zero will disable " \
iveresov@1546 131 "concurrent processing.") \
iveresov@1546 132 \
tonyp@1717 133 product(intx, G1ConcRefinementGreenZone, 0, \
iveresov@1546 134 "The number of update buffers that are left in the queue by the " \
iveresov@1546 135 "concurrent processing threads. Will be selected ergonomically " \
iveresov@1546 136 "by default.") \
iveresov@1546 137 \
tonyp@1717 138 product(intx, G1ConcRefinementServiceIntervalMillis, 300, \
iveresov@1546 139 "The last concurrent refinement thread wakes up every " \
iveresov@1546 140 "specified number of milliseconds to do miscellaneous work.") \
iveresov@1546 141 \
tonyp@1717 142 product(intx, G1ConcRefinementThresholdStep, 0, \
iveresov@1546 143 "Each time the rset update queue increases by this amount " \
iveresov@1546 144 "activate the next refinement thread if available. " \
iveresov@1546 145 "Will be selected ergonomically by default.") \
iveresov@1546 146 \
tonyp@1717 147 product(intx, G1RSetUpdatingPauseTimePercent, 10, \
iveresov@1546 148 "A target percentage of time that is allowed to be spend on " \
iveresov@1546 149 "process RS update buffers during the collection pause.") \
iveresov@1546 150 \
tonyp@1717 151 product(bool, G1UseAdaptiveConcRefinement, true, \
iveresov@1546 152 "Select green, yellow and red zones adaptively to meet the " \
iveresov@1546 153 "the pause requirements.") \
ysr@777 154 \
johnc@5078 155 product(uintx, G1ConcRSLogCacheSize, 10, \
ysr@777 156 "Log base 2 of the length of conc RS hot-card cache.") \
ysr@777 157 \
johnc@5078 158 product(uintx, G1ConcRSHotCardLimit, 4, \
ysr@777 159 "The threshold that defines (>=) a hot card.") \
ysr@777 160 \
iveresov@1696 161 develop(intx, G1RSetRegionEntriesBase, 256, \
iveresov@1696 162 "Max number of regions in a fine-grain table per MB.") \
iveresov@1696 163 \
iveresov@1696 164 product(intx, G1RSetRegionEntries, 0, \
iveresov@1696 165 "Max number of regions for which we keep bitmaps." \
iveresov@1696 166 "Will be set ergonomically by default") \
iveresov@1696 167 \
iveresov@1696 168 develop(intx, G1RSetSparseRegionEntriesBase, 4, \
iveresov@1696 169 "Max number of entries per region in a sparse table " \
iveresov@1696 170 "per MB.") \
iveresov@1696 171 \
iveresov@1696 172 product(intx, G1RSetSparseRegionEntries, 0, \
iveresov@1696 173 "Max number of entries per region in a sparse table." \
iveresov@1696 174 "Will be set ergonomically by default.") \
ysr@777 175 \
ysr@777 176 develop(bool, G1RecordHRRSOops, false, \
ysr@777 177 "When true, record recent calls to rem set operations.") \
ysr@777 178 \
ysr@777 179 develop(bool, G1RecordHRRSEvents, false, \
ysr@777 180 "When true, record recent calls to rem set operations.") \
ysr@777 181 \
ysr@777 182 develop(intx, G1MaxVerifyFailures, -1, \
ysr@777 183 "The maximum number of verification failrues to print. " \
ysr@777 184 "-1 means print all.") \
ysr@777 185 \
ysr@777 186 develop(bool, G1ScrubRemSets, true, \
ysr@777 187 "When true, do RS scrubbing after cleanup.") \
ysr@777 188 \
ysr@777 189 develop(bool, G1RSScrubVerbose, false, \
ysr@777 190 "When true, do RS scrubbing with verbose output.") \
ysr@777 191 \
ysr@777 192 develop(bool, G1YoungSurvRateVerbose, false, \
ysr@777 193 "print out the survival rate of young regions according to age.") \
ysr@777 194 \
ysr@777 195 develop(intx, G1YoungSurvRateNumRegionsSummary, 0, \
ysr@777 196 "the number of regions for which we'll print a surv rate " \
ysr@777 197 "summary.") \
ysr@777 198 \
tonyp@3119 199 product(uintx, G1ReservePercent, 10, \
ysr@777 200 "It determines the minimum reserve we should have in the heap " \
ysr@777 201 "to minimize the probability of promotion failure.") \
ysr@777 202 \
tonyp@1717 203 diagnostic(bool, G1PrintHeapRegions, false, \
ysr@777 204 "If set G1 will print information on which regions are being " \
ysr@777 205 "allocated and which are reclaimed.") \
ysr@777 206 \
ysr@777 207 develop(bool, G1HRRSUseSparseTable, true, \
ysr@777 208 "When true, use sparse table to save space.") \
ysr@777 209 \
ysr@777 210 develop(bool, G1HRRSFlushLogBuffersOnVerify, false, \
ysr@777 211 "Forces flushing of log buffers before verification.") \
ysr@777 212 \
ysr@1522 213 develop(bool, G1FailOnFPError, false, \
ysr@1522 214 "When set, G1 will fail when it encounters an FP 'error', " \
ysr@1522 215 "so as to allow debugging") \
ysr@1522 216 \
tonyp@1377 217 product(uintx, G1HeapRegionSize, 0, \
tonyp@1377 218 "Size of the G1 regions.") \
tonyp@1377 219 \
tonyp@1717 220 product(uintx, G1ConcRefinementThreads, 0, \
iveresov@1229 221 "If non-0 is the number of parallel rem set update threads, " \
johnc@1325 222 "otherwise the value is determined ergonomically.") \
johnc@1325 223 \
apetrusenko@1375 224 develop(bool, G1VerifyCTCleanup, false, \
ysr@1629 225 "Verify card table cleanup.") \
ysr@1629 226 \
iveresov@1696 227 product(uintx, G1RSetScanBlockSize, 64, \
iveresov@1696 228 "Size of a work unit of cards claimed by a worker thread" \
iveresov@1696 229 "during RSet scanning.") \
iveresov@1696 230 \
tonyp@2472 231 develop(uintx, G1SecondaryFreeListAppendLength, 5, \
tonyp@2472 232 "The number of regions we will add to the secondary free list " \
tonyp@2472 233 "at every append operation") \
tonyp@2472 234 \
tonyp@2472 235 develop(bool, G1ConcRegionFreeingVerbose, false, \
tonyp@2472 236 "Enables verboseness during concurrent region freeing") \
tonyp@2472 237 \
tonyp@2472 238 develop(bool, G1StressConcRegionFreeing, false, \
tonyp@2472 239 "It stresses the concurrent region freeing operation") \
tonyp@2472 240 \
tonyp@2472 241 develop(uintx, G1StressConcRegionFreeingDelayMillis, 0, \
tonyp@2472 242 "Artificial delay during concurrent region freeing") \
tonyp@2472 243 \
tonyp@2817 244 develop(uintx, G1DummyRegionsPerGC, 0, \
tonyp@2817 245 "The number of dummy regions G1 will allocate at the end of " \
tonyp@2817 246 "each evacuation pause in order to artificially fill up the " \
tonyp@2817 247 "heap and stress the marking implementation.") \
tonyp@2817 248 \
johnc@2504 249 develop(bool, G1ExitOnExpansionFailure, false, \
johnc@2504 250 "Raise a fatal VM exit out of memory failure in the event " \
tonyp@2848 251 " that heap expansion fails due to running out of swap.") \
tonyp@2848 252 \
tonyp@2848 253 develop(uintx, G1ConcMarkForceOverflow, 0, \
tonyp@2848 254 "The number of times we'll force an overflow during " \
brutisso@3358 255 "concurrent marking") \
brutisso@3358 256 \
johnc@4455 257 experimental(uintx, G1NewSizePercent, 5, \
johnc@4385 258 "Percentage (0-100) of the heap size to use as default " \
johnc@4385 259 "minimum young gen size.") \
brutisso@3358 260 \
johnc@4455 261 experimental(uintx, G1MaxNewSizePercent, 60, \
johnc@4385 262 "Percentage (0-100) of the heap size to use as default " \
johnc@4385 263 " maximum young gen size.") \
tonyp@3539 264 \
brutisso@7258 265 experimental(uintx, G1MixedGCLiveThresholdPercent, 85, \
johnc@4385 266 "Threshold for regions to be considered for inclusion in the " \
johnc@4385 267 "collection set of mixed GCs. " \
johnc@4385 268 "Regions with live bytes exceeding this will not be collected.") \
tonyp@3539 269 \
brutisso@7258 270 product(uintx, G1HeapWastePercent, 5, \
tonyp@3667 271 "Amount of space, expressed as a percentage of the heap size, " \
tonyp@3667 272 "that G1 is willing not to collect to avoid expensive GCs.") \
tonyp@3539 273 \
johnc@4455 274 product(uintx, G1MixedGCCountTarget, 8, \
tonyp@3667 275 "The target number of mixed GCs after a marking cycle.") \
tonyp@3539 276 \
tschatzl@7828 277 experimental(bool, G1EagerReclaimHumongousObjects, true, \
tschatzl@7019 278 "Try to reclaim dead large objects at every young GC.") \
tschatzl@7019 279 \
tschatzl@7828 280 experimental(bool, G1EagerReclaimHumongousObjectsWithStaleRefs, true, \
tschatzl@7828 281 "Try to reclaim dead large objects that have a few stale " \
tschatzl@7828 282 "references at every young GC.") \
tschatzl@7828 283 \
tschatzl@7828 284 experimental(bool, G1TraceEagerReclaimHumongousObjects, false, \
tschatzl@7019 285 "Print some information about large object liveness " \
tschatzl@7019 286 "at every young GC.") \
tschatzl@7019 287 \
brutisso@3999 288 experimental(uintx, G1OldCSetRegionThresholdPercent, 10, \
tonyp@3539 289 "An upper bound for the number of old CSet regions expressed " \
brutisso@3710 290 "as a percentage of the heap size.") \
brutisso@3710 291 \
brutisso@3710 292 experimental(ccstr, G1LogLevel, NULL, \
johnc@4016 293 "Log level for G1 logging: fine, finer, finest") \
johnc@4016 294 \
johnc@4016 295 notproduct(bool, G1EvacuationFailureALot, false, \
johnc@4016 296 "Force use of evacuation failure handling during certain " \
johnc@4016 297 "evacuation pauses") \
johnc@4016 298 \
johnc@4016 299 develop(uintx, G1EvacuationFailureALotCount, 1000, \
johnc@4016 300 "Number of successful evacuations between evacuation failures " \
johnc@4016 301 "occurring at object copying") \
johnc@4016 302 \
johnc@4016 303 develop(uintx, G1EvacuationFailureALotInterval, 5, \
johnc@4016 304 "Total collections between forced triggering of evacuation " \
johnc@4016 305 "failures") \
johnc@4016 306 \
johnc@4016 307 develop(bool, G1EvacuationFailureALotDuringConcMark, true, \
johnc@4016 308 "Force use of evacuation failure handling during evacuation " \
johnc@4016 309 "pauses when marking is in progress") \
johnc@4016 310 \
johnc@4016 311 develop(bool, G1EvacuationFailureALotDuringInitialMark, true, \
johnc@4016 312 "Force use of evacuation failure handling during initial mark " \
johnc@4016 313 "evacuation pauses") \
johnc@4016 314 \
johnc@4016 315 develop(bool, G1EvacuationFailureALotDuringYoungGC, true, \
johnc@4016 316 "Force use of evacuation failure handling during young " \
johnc@4016 317 "evacuation pauses") \
johnc@4016 318 \
johnc@4016 319 develop(bool, G1EvacuationFailureALotDuringMixedGC, true, \
johnc@4016 320 "Force use of evacuation failure handling during mixed " \
johnc@5205 321 "evacuation pauses") \
johnc@5205 322 \
johnc@5205 323 diagnostic(bool, G1VerifyRSetsDuringFullGC, false, \
brutisso@7005 324 "If true, perform verification of each heap region's " \
brutisso@7005 325 "remembered set when verifying the heap during a full GC.") \
johnc@5548 326 \
johnc@5548 327 diagnostic(bool, G1VerifyHeapRegionCodeRoots, false, \
brutisso@7005 328 "Verify the code root lists attached to each heap region.") \
brutisso@7005 329 \
brutisso@7005 330 develop(bool, G1VerifyBitmaps, false, \
brutisso@7005 331 "Verifies the consistency of the marking bitmaps")
ysr@777 332
ysr@785 333 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 334
stefank@2314 335 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP

mercurial