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

Mon, 02 Aug 2010 12:51:43 -0700

author
johnc
date
Mon, 02 Aug 2010 12:51:43 -0700
changeset 2060
2d160770d2e5
parent 1949
b9bc732be7c0
child 2216
c32059ef4dc0
permissions
-rw-r--r--

6814437: G1: remove the _new_refs array
Summary: The per-worker _new_refs array is used to hold references that point into the collection set. It is populated during RSet updating and subsequently processed. In the event of an evacuation failure it processed again to recreate the RSets of regions in the collection set. Remove the per-worker _new_refs array by processing the references directly. Use a DirtyCardQueue to hold the cards containing the references so that the RSets of regions in the collection set can be recreated when handling an evacuation failure.
Reviewed-by: iveresov, jmasa, tonyp

ysr@777 1 /*
trims@1907 2 * Copyright (c) 2001, 2010, 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
ysr@777 25 //
ysr@777 26 // Defines all globals flags used by the garbage-first compiler.
ysr@777 27 //
ysr@777 28
ysr@785 29 #define G1_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw) \
ysr@777 30 \
johnc@1186 31 product(intx, G1ConfidencePercent, 50, \
ysr@777 32 "Confidence level for MMU/pause predictions") \
ysr@777 33 \
tonyp@1319 34 develop(intx, G1MarkingOverheadPercent, 0, \
ysr@777 35 "Overhead of concurrent marking") \
ysr@777 36 \
johnc@1186 37 develop(bool, G1Gen, true, \
ysr@777 38 "If true, it will enable the generational G1") \
ysr@777 39 \
johnc@1186 40 develop(intx, G1PolicyVerbose, 0, \
ysr@777 41 "The verbosity level on G1 policy decisions") \
ysr@777 42 \
ysr@777 43 develop(bool, G1UseHRIntoRS, true, \
ysr@777 44 "Determines whether the 'advanced' HR Into rem set is used.") \
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 \
johnc@1186 76 diagnostic(bool, G1SummarizeZFStats, false, \
ysr@777 77 "Summarize zero-filling info") \
ysr@777 78 \
tonyp@1717 79 diagnostic(bool, G1TraceConcRefinement, false, \
ysr@777 80 "Trace G1 concurrent refinement") \
ysr@777 81 \
johnc@1186 82 product(intx, G1MarkRegionStackSize, 1024 * 1024, \
ysr@777 83 "Size of the region stack for concurrent marking.") \
ysr@777 84 \
ysr@777 85 develop(bool, G1ConcZeroFill, true, \
ysr@777 86 "If true, run concurrent zero-filling thread") \
ysr@777 87 \
ysr@777 88 develop(intx, G1ConcZFMaxRegions, 1, \
ysr@777 89 "Stop zero-filling when # of zf'd regions reaches") \
ysr@777 90 \
ysr@777 91 develop(bool, G1SATBBarrierPrintNullPreVals, false, \
ysr@777 92 "If true, count frac of ptr writes with null pre-vals.") \
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 \
ysr@777 100 develop(intx, G1ExtraRegionSurvRate, 33, \
ysr@777 101 "If the young survival rate is S, and there's room left in " \
ysr@777 102 "to-space, we will allow regions whose survival rate is up to " \
ysr@777 103 "S + (1 - S)*X, where X is this parameter (as a fraction.)") \
ysr@777 104 \
ysr@777 105 develop(intx, G1InitYoungSurvRatio, 50, \
ysr@777 106 "Expected Survival Rate for newly allocated bytes") \
ysr@777 107 \
ysr@777 108 develop(bool, G1SATBPrintStubs, false, \
ysr@777 109 "If true, print generated stubs for the SATB barrier") \
ysr@777 110 \
tonyp@1717 111 experimental(intx, G1ExpandByPercentOfAvailable, 20, \
ysr@777 112 "When expanding, % of uncommitted space to claim.") \
ysr@777 113 \
ysr@777 114 develop(bool, G1RSBarrierRegionFilter, true, \
ysr@777 115 "If true, generate region filtering code in RS barrier") \
ysr@777 116 \
ysr@777 117 develop(bool, G1RSBarrierNullFilter, true, \
ysr@777 118 "If true, generate null-pointer filtering code in RS barrier") \
ysr@777 119 \
ysr@777 120 develop(bool, G1PrintCTFilterStats, false, \
ysr@777 121 "If true, print stats on RS filtering effectiveness") \
ysr@777 122 \
iveresov@1051 123 develop(bool, G1DeferredRSUpdate, true, \
iveresov@1051 124 "If true, use deferred RS updates") \
iveresov@1051 125 \
ysr@777 126 develop(bool, G1RSLogCheckCardTable, false, \
ysr@777 127 "If true, verify that no dirty cards remain after RS log " \
ysr@777 128 "processing.") \
ysr@777 129 \
ysr@777 130 develop(bool, G1RSCountHisto, false, \
ysr@777 131 "If true, print a histogram of RS occupancies after each pause") \
ysr@777 132 \
ysr@777 133 develop(intx, G1PrintRegionLivenessInfo, 0, \
ysr@777 134 "When > 0, print the occupancies of the <n> best and worst" \
ysr@777 135 "regions.") \
ysr@777 136 \
ysr@777 137 develop(bool, G1PrintParCleanupStats, false, \
ysr@777 138 "When true, print extra stats about parallel cleanup.") \
ysr@777 139 \
ysr@777 140 develop(bool, G1DisablePreBarrier, false, \
ysr@777 141 "Disable generation of pre-barrier (i.e., marking barrier) ") \
ysr@777 142 \
ysr@777 143 develop(bool, G1DisablePostBarrier, false, \
ysr@777 144 "Disable generation of post-barrier (i.e., RS barrier) ") \
ysr@777 145 \
tonyp@1318 146 product(intx, G1UpdateBufferSize, 256, \
tonyp@1318 147 "Size of an update buffer") \
tonyp@1318 148 \
tonyp@1717 149 product(intx, G1ConcRefinementYellowZone, 0, \
tonyp@1318 150 "Number of enqueued update buffers that will " \
iveresov@1546 151 "trigger concurrent processing. Will be selected ergonomically " \
iveresov@1546 152 "by default.") \
tonyp@1318 153 \
tonyp@1717 154 product(intx, G1ConcRefinementRedZone, 0, \
tonyp@1318 155 "Maximum number of enqueued update buffers before mutator " \
iveresov@1546 156 "threads start processing new ones instead of enqueueing them. " \
iveresov@1546 157 "Will be selected ergonomically by default. Zero will disable " \
iveresov@1546 158 "concurrent processing.") \
iveresov@1546 159 \
tonyp@1717 160 product(intx, G1ConcRefinementGreenZone, 0, \
iveresov@1546 161 "The number of update buffers that are left in the queue by the " \
iveresov@1546 162 "concurrent processing threads. Will be selected ergonomically " \
iveresov@1546 163 "by default.") \
iveresov@1546 164 \
tonyp@1717 165 product(intx, G1ConcRefinementServiceIntervalMillis, 300, \
iveresov@1546 166 "The last concurrent refinement thread wakes up every " \
iveresov@1546 167 "specified number of milliseconds to do miscellaneous work.") \
iveresov@1546 168 \
tonyp@1717 169 product(intx, G1ConcRefinementThresholdStep, 0, \
iveresov@1546 170 "Each time the rset update queue increases by this amount " \
iveresov@1546 171 "activate the next refinement thread if available. " \
iveresov@1546 172 "Will be selected ergonomically by default.") \
iveresov@1546 173 \
tonyp@1717 174 product(intx, G1RSetUpdatingPauseTimePercent, 10, \
iveresov@1546 175 "A target percentage of time that is allowed to be spend on " \
iveresov@1546 176 "process RS update buffers during the collection pause.") \
iveresov@1546 177 \
tonyp@1717 178 product(bool, G1UseAdaptiveConcRefinement, true, \
iveresov@1546 179 "Select green, yellow and red zones adaptively to meet the " \
iveresov@1546 180 "the pause requirements.") \
ysr@777 181 \
ysr@777 182 develop(intx, G1ConcRSLogCacheSize, 10, \
ysr@777 183 "Log base 2 of the length of conc RS hot-card cache.") \
ysr@777 184 \
johnc@1186 185 develop(intx, G1ConcRSHotCardLimit, 4, \
ysr@777 186 "The threshold that defines (>=) a hot card.") \
ysr@777 187 \
ysr@777 188 develop(bool, G1PrintOopAppls, false, \
ysr@777 189 "When true, print applications of closures to external locs.") \
ysr@777 190 \
iveresov@1696 191 develop(intx, G1RSetRegionEntriesBase, 256, \
iveresov@1696 192 "Max number of regions in a fine-grain table per MB.") \
iveresov@1696 193 \
iveresov@1696 194 product(intx, G1RSetRegionEntries, 0, \
iveresov@1696 195 "Max number of regions for which we keep bitmaps." \
iveresov@1696 196 "Will be set ergonomically by default") \
iveresov@1696 197 \
iveresov@1696 198 develop(intx, G1RSetSparseRegionEntriesBase, 4, \
iveresov@1696 199 "Max number of entries per region in a sparse table " \
iveresov@1696 200 "per MB.") \
iveresov@1696 201 \
iveresov@1696 202 product(intx, G1RSetSparseRegionEntries, 0, \
iveresov@1696 203 "Max number of entries per region in a sparse table." \
iveresov@1696 204 "Will be set ergonomically by default.") \
ysr@777 205 \
ysr@777 206 develop(bool, G1RecordHRRSOops, false, \
ysr@777 207 "When true, record recent calls to rem set operations.") \
ysr@777 208 \
ysr@777 209 develop(bool, G1RecordHRRSEvents, false, \
ysr@777 210 "When true, record recent calls to rem set operations.") \
ysr@777 211 \
ysr@777 212 develop(intx, G1MaxVerifyFailures, -1, \
ysr@777 213 "The maximum number of verification failrues to print. " \
ysr@777 214 "-1 means print all.") \
ysr@777 215 \
ysr@777 216 develop(bool, G1ScrubRemSets, true, \
ysr@777 217 "When true, do RS scrubbing after cleanup.") \
ysr@777 218 \
ysr@777 219 develop(bool, G1RSScrubVerbose, false, \
ysr@777 220 "When true, do RS scrubbing with verbose output.") \
ysr@777 221 \
ysr@777 222 develop(bool, G1YoungSurvRateVerbose, false, \
ysr@777 223 "print out the survival rate of young regions according to age.") \
ysr@777 224 \
ysr@777 225 develop(intx, G1YoungSurvRateNumRegionsSummary, 0, \
ysr@777 226 "the number of regions for which we'll print a surv rate " \
ysr@777 227 "summary.") \
ysr@777 228 \
tonyp@1717 229 product(intx, G1ReservePercent, 10, \
ysr@777 230 "It determines the minimum reserve we should have in the heap " \
ysr@777 231 "to minimize the probability of promotion failure.") \
ysr@777 232 \
tonyp@1717 233 diagnostic(bool, G1PrintHeapRegions, false, \
ysr@777 234 "If set G1 will print information on which regions are being " \
ysr@777 235 "allocated and which are reclaimed.") \
ysr@777 236 \
ysr@777 237 develop(bool, G1HRRSUseSparseTable, true, \
ysr@777 238 "When true, use sparse table to save space.") \
ysr@777 239 \
ysr@777 240 develop(bool, G1HRRSFlushLogBuffersOnVerify, false, \
ysr@777 241 "Forces flushing of log buffers before verification.") \
ysr@777 242 \
ysr@1522 243 develop(bool, G1FailOnFPError, false, \
ysr@1522 244 "When set, G1 will fail when it encounters an FP 'error', " \
ysr@1522 245 "so as to allow debugging") \
ysr@1522 246 \
johnc@1186 247 develop(bool, G1FixedTenuringThreshold, false, \
apetrusenko@980 248 "When set, G1 will not adjust the tenuring threshold") \
apetrusenko@980 249 \
johnc@1186 250 develop(bool, G1FixedEdenSize, false, \
apetrusenko@980 251 "When set, G1 will not allocate unused survivor space regions") \
apetrusenko@980 252 \
johnc@1186 253 develop(uintx, G1FixedSurvivorSpaceSize, 0, \
apetrusenko@980 254 "If non-0 is the size of the G1 survivor space, " \
tonyp@1073 255 "otherwise SurvivorRatio is used to determine the size") \
tonyp@1073 256 \
tonyp@1377 257 product(uintx, G1HeapRegionSize, 0, \
tonyp@1377 258 "Size of the G1 regions.") \
tonyp@1377 259 \
tonyp@1792 260 experimental(bool, G1UseParallelRSetUpdating, true, \
tonyp@1073 261 "Enables the parallelization of remembered set updating " \
tonyp@1073 262 "during evacuation pauses") \
tonyp@1073 263 \
tonyp@1792 264 experimental(bool, G1UseParallelRSetScanning, true, \
tonyp@1073 265 "Enables the parallelization of remembered set scanning " \
iveresov@1229 266 "during evacuation pauses") \
iveresov@1229 267 \
tonyp@1717 268 product(uintx, G1ConcRefinementThreads, 0, \
iveresov@1229 269 "If non-0 is the number of parallel rem set update threads, " \
johnc@1325 270 "otherwise the value is determined ergonomically.") \
johnc@1325 271 \
johnc@1325 272 develop(intx, G1CardCountCacheExpandThreshold, 16, \
johnc@1325 273 "Expand the card count cache if the number of collisions for " \
apetrusenko@1375 274 "a particular entry exceeds this value.") \
apetrusenko@1375 275 \
apetrusenko@1375 276 develop(bool, G1VerifyCTCleanup, false, \
ysr@1629 277 "Verify card table cleanup.") \
ysr@1629 278 \
iveresov@1696 279 product(uintx, G1RSetScanBlockSize, 64, \
iveresov@1696 280 "Size of a work unit of cards claimed by a worker thread" \
iveresov@1696 281 "during RSet scanning.") \
iveresov@1696 282 \
ysr@1629 283 develop(bool, ReduceInitialCardMarksForG1, false, \
ysr@1629 284 "When ReduceInitialCardMarks is true, this flag setting " \
ysr@1629 285 " controls whether G1 allows the RICM optimization")
ysr@777 286
ysr@785 287 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)

mercurial