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

Tue, 30 Sep 2014 09:44:36 +0200

author
tschatzl
date
Tue, 30 Sep 2014 09:44:36 +0200
changeset 7218
6948da6d7c13
parent 7208
7baf47cb97cb
child 7258
fa14838b03c4
permissions
-rw-r--r--

8052172: Evacuation failure handling in G1 does not evacuate all objects if -XX:-G1DeferredRSUpdate is set
Summary: Remove -XX:-G1DeferredRSUpdate functionality as it is racy. During evacuation failure handling, threads where evacuation failure handling occurred may try to add remembered sets to regions which remembered sets are currently being scanned. The iterator to handle the remembered set scan does not support addition of entries during scan and so may skip valid references.
Reviewed-by: iveresov, brutisso, mgerdin

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@1792 220 experimental(bool, G1UseParallelRSetUpdating, true, \
tonyp@1073 221 "Enables the parallelization of remembered set updating " \
tonyp@1073 222 "during evacuation pauses") \
tonyp@1073 223 \
tonyp@1792 224 experimental(bool, G1UseParallelRSetScanning, true, \
tonyp@1073 225 "Enables the parallelization of remembered set scanning " \
iveresov@1229 226 "during evacuation pauses") \
iveresov@1229 227 \
tonyp@1717 228 product(uintx, G1ConcRefinementThreads, 0, \
iveresov@1229 229 "If non-0 is the number of parallel rem set update threads, " \
johnc@1325 230 "otherwise the value is determined ergonomically.") \
johnc@1325 231 \
apetrusenko@1375 232 develop(bool, G1VerifyCTCleanup, false, \
ysr@1629 233 "Verify card table cleanup.") \
ysr@1629 234 \
iveresov@1696 235 product(uintx, G1RSetScanBlockSize, 64, \
iveresov@1696 236 "Size of a work unit of cards claimed by a worker thread" \
iveresov@1696 237 "during RSet scanning.") \
iveresov@1696 238 \
tonyp@2472 239 develop(uintx, G1SecondaryFreeListAppendLength, 5, \
tonyp@2472 240 "The number of regions we will add to the secondary free list " \
tonyp@2472 241 "at every append operation") \
tonyp@2472 242 \
tonyp@2472 243 develop(bool, G1ConcRegionFreeingVerbose, false, \
tonyp@2472 244 "Enables verboseness during concurrent region freeing") \
tonyp@2472 245 \
tonyp@2472 246 develop(bool, G1StressConcRegionFreeing, false, \
tonyp@2472 247 "It stresses the concurrent region freeing operation") \
tonyp@2472 248 \
tonyp@2472 249 develop(uintx, G1StressConcRegionFreeingDelayMillis, 0, \
tonyp@2472 250 "Artificial delay during concurrent region freeing") \
tonyp@2472 251 \
tonyp@2817 252 develop(uintx, G1DummyRegionsPerGC, 0, \
tonyp@2817 253 "The number of dummy regions G1 will allocate at the end of " \
tonyp@2817 254 "each evacuation pause in order to artificially fill up the " \
tonyp@2817 255 "heap and stress the marking implementation.") \
tonyp@2817 256 \
johnc@2504 257 develop(bool, G1ExitOnExpansionFailure, false, \
johnc@2504 258 "Raise a fatal VM exit out of memory failure in the event " \
tonyp@2848 259 " that heap expansion fails due to running out of swap.") \
tonyp@2848 260 \
tonyp@2848 261 develop(uintx, G1ConcMarkForceOverflow, 0, \
tonyp@2848 262 "The number of times we'll force an overflow during " \
brutisso@3358 263 "concurrent marking") \
brutisso@3358 264 \
johnc@4455 265 experimental(uintx, G1NewSizePercent, 5, \
johnc@4385 266 "Percentage (0-100) of the heap size to use as default " \
johnc@4385 267 "minimum young gen size.") \
brutisso@3358 268 \
johnc@4455 269 experimental(uintx, G1MaxNewSizePercent, 60, \
johnc@4385 270 "Percentage (0-100) of the heap size to use as default " \
johnc@4385 271 " maximum young gen size.") \
tonyp@3539 272 \
johnc@4455 273 experimental(uintx, G1MixedGCLiveThresholdPercent, 65, \
johnc@4385 274 "Threshold for regions to be considered for inclusion in the " \
johnc@4385 275 "collection set of mixed GCs. " \
johnc@4385 276 "Regions with live bytes exceeding this will not be collected.") \
tonyp@3539 277 \
johnc@4455 278 product(uintx, G1HeapWastePercent, 10, \
tonyp@3667 279 "Amount of space, expressed as a percentage of the heap size, " \
tonyp@3667 280 "that G1 is willing not to collect to avoid expensive GCs.") \
tonyp@3539 281 \
johnc@4455 282 product(uintx, G1MixedGCCountTarget, 8, \
tonyp@3667 283 "The target number of mixed GCs after a marking cycle.") \
tonyp@3539 284 \
tschatzl@7019 285 experimental(bool, G1ReclaimDeadHumongousObjectsAtYoungGC, true, \
tschatzl@7019 286 "Try to reclaim dead large objects at every young GC.") \
tschatzl@7019 287 \
tschatzl@7019 288 experimental(bool, G1TraceReclaimDeadHumongousObjectsAtYoungGC, false, \
tschatzl@7019 289 "Print some information about large object liveness " \
tschatzl@7019 290 "at every young GC.") \
tschatzl@7019 291 \
brutisso@3999 292 experimental(uintx, G1OldCSetRegionThresholdPercent, 10, \
tonyp@3539 293 "An upper bound for the number of old CSet regions expressed " \
brutisso@3710 294 "as a percentage of the heap size.") \
brutisso@3710 295 \
brutisso@3710 296 experimental(ccstr, G1LogLevel, NULL, \
johnc@4016 297 "Log level for G1 logging: fine, finer, finest") \
johnc@4016 298 \
johnc@4016 299 notproduct(bool, G1EvacuationFailureALot, false, \
johnc@4016 300 "Force use of evacuation failure handling during certain " \
johnc@4016 301 "evacuation pauses") \
johnc@4016 302 \
johnc@4016 303 develop(uintx, G1EvacuationFailureALotCount, 1000, \
johnc@4016 304 "Number of successful evacuations between evacuation failures " \
johnc@4016 305 "occurring at object copying") \
johnc@4016 306 \
johnc@4016 307 develop(uintx, G1EvacuationFailureALotInterval, 5, \
johnc@4016 308 "Total collections between forced triggering of evacuation " \
johnc@4016 309 "failures") \
johnc@4016 310 \
johnc@4016 311 develop(bool, G1EvacuationFailureALotDuringConcMark, true, \
johnc@4016 312 "Force use of evacuation failure handling during evacuation " \
johnc@4016 313 "pauses when marking is in progress") \
johnc@4016 314 \
johnc@4016 315 develop(bool, G1EvacuationFailureALotDuringInitialMark, true, \
johnc@4016 316 "Force use of evacuation failure handling during initial mark " \
johnc@4016 317 "evacuation pauses") \
johnc@4016 318 \
johnc@4016 319 develop(bool, G1EvacuationFailureALotDuringYoungGC, true, \
johnc@4016 320 "Force use of evacuation failure handling during young " \
johnc@4016 321 "evacuation pauses") \
johnc@4016 322 \
johnc@4016 323 develop(bool, G1EvacuationFailureALotDuringMixedGC, true, \
johnc@4016 324 "Force use of evacuation failure handling during mixed " \
johnc@5205 325 "evacuation pauses") \
johnc@5205 326 \
johnc@5205 327 diagnostic(bool, G1VerifyRSetsDuringFullGC, false, \
brutisso@7005 328 "If true, perform verification of each heap region's " \
brutisso@7005 329 "remembered set when verifying the heap during a full GC.") \
johnc@5548 330 \
johnc@5548 331 diagnostic(bool, G1VerifyHeapRegionCodeRoots, false, \
brutisso@7005 332 "Verify the code root lists attached to each heap region.") \
brutisso@7005 333 \
brutisso@7005 334 develop(bool, G1VerifyBitmaps, false, \
brutisso@7005 335 "Verifies the consistency of the marking bitmaps")
ysr@777 336
ysr@785 337 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 338
stefank@2314 339 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP

mercurial