< prev index next >

src/share/vm/gc_implementation/shenandoah/shenandoah_globals.hpp

Print this page
rev 10499 : [backport] Rework GC degradation on allocation failure
rev 10504 : [backport] Full GC always comes with liveness data
rev 10509 : [backport] Refactor and improve ShenandoahCodeRoots strategies
rev 10510 : [backport] Default to ShenandoahCodeRootsStyle = 2
rev 10535 : [backport] SATB buffer filtering/compaction hides unmarked objects until final-mark
rev 10548 : [backport] Forceful SATB buffer flushes should be time-periodic, not traffic-dependent
rev 10556 : [backport] Remove C2 write-barrier from .ad files
rev 10561 : [backport] Add task termination and enhanced task queue state tracking + weakrefs
rev 10565 : [backport] Elastic TLABs support for Shenandoah
rev 10571 : [backport] Complete liveness for recently allocated regions outside the allocation path
rev 10588 : [backport] Check and ensure that Shenandoah-enabled compilations succeed
* * *
[backport] Filter out not compilable methods to avoid false assertion
rev 10589 : [backport] Purge support for ShenandoahConcurrentEvacCodeRoots and ShenandoahBarriersForConst
rev 10596 : [backport] WB slowpath should assist with evacuation of adjacent objects
rev 10599 : [backport] Convert magic value to ShenandoahPacingSurcharge
rev 10603 : Disable evac assist by default until bugfixes arrive
rev 10606 : [backport] Adaptive/Traversal heuristics rewrite for allocation rate
rev 10610 : [backport] Evac assist should touch marked objects only
rev 10620 : [backport] Evac reserve: make sure GC has untouchable space to move the objects into
rev 10622 : [backport] Enable ShenandoahEvacReserveOverflow by default
rev 10625 : [backport] Soft refs should be purged reliably on allocation failure, or with compact heuristics
rev 10637 : [backport] Purge partial heuristics and connection matrix infrastructure


  54   product(uintx, ShenandoahHeapRegionSize, 0,                               \
  55           "Size of the Shenandoah regions. "                                \
  56           "Determined automatically by default.")                           \
  57                                                                             \
  58   experimental(uintx, ShenandoahMinRegionSize, 256 * K,                     \
  59           "Minimum heap region size. ")                                     \
  60                                                                             \
  61   experimental(uintx, ShenandoahMaxRegionSize, 32 * M,                      \
  62           "Maximum heap region size. ")                                     \
  63                                                                             \
  64   experimental(intx, ShenandoahHumongousThreshold, 100,                     \
  65           "How large should the object be to get allocated in humongous "   \
  66           "region, in percents of heap region size. This also caps the "    \
  67           "maximum TLAB size.")                                             \
  68                                                                             \
  69   experimental(uintx, ShenandoahTargetNumRegions, 2048,                     \
  70           "Target number of regions. We try to get around that many "       \
  71           "regions, based on ShenandoahMinRegionSize and "                  \
  72           "ShenandoahMaxRegionSizeSize. ")                                  \
  73                                                                             \
  74   product(bool, UseShenandoahMatrix, false,                                 \
  75           "Keep a connection matrix and use this to drive collection sets") \
  76                                                                             \
  77   product(ccstr, ShenandoahGCHeuristics, "adaptive",                        \
  78           "The heuristics to use in Shenandoah GC. Possible values: "       \
  79           "adaptive (adapt to maintain the given amount of free memory), "  \
  80           "static (start concurrent GC when static free heap threshold "    \
  81           "and static allocation threshold are tripped), "                  \
  82           "passive (do not start concurrent GC, wait for Full GC) "         \
  83           "aggressive (run concurrent GC continuously, evacuate everything), " \
  84           "compact (run GC with lower footprint target)."                    \
  85           "Defaults to adaptive")                                           \
  86                                                                             \
  87   experimental(ccstr, ShenandoahUpdateRefsEarly, "adaptive",                \
  88           "Run a separate concurrent reference updating phase after"        \
  89           "concurrent evacuation. Possible values: 'on', 'off', 'adaptive'")\
  90                                                                             \




  91   product(uintx, ShenandoahRefProcFrequency, 5,                             \
  92           "How often should (weak, soft, etc) references be processed. "    \
  93           "References get processed at every Nth GC cycle. "                \
  94           "Set to 0 to disable reference processing. "                      \
  95           "Defaults to process references every 5 cycles.")                 \
  96                                                                             \
  97   product(uintx, ShenandoahUnloadClassesFrequency, 5,                       \
  98           "How often should classes get unloaded. "                         \
  99           "Class unloading is performed at every Nth GC cycle. "            \
 100           "Set to 0 to disable concurrent class unloading. "                \
 101           "Defaults to unload classes every 5 cycles.")                     \
 102                                                                             \
 103   product(bool, ShenandoahLogTrace, false,                                  \
 104           "Turns on logging in Shenandoah at trace level. ")                \
 105                                                                             \
 106   product(bool, ShenandoahLogDebug, false,                                  \
 107           "Turns on logging in Shenandoah at debug level. ")                \
 108                                                                             \
 109   product(bool, ShenandoahLogInfo, false,                                   \
 110           "Turns on logging in Shenandoah at info level. ")                 \
 111                                                                             \
 112   product(bool, ShenandoahLogWarning, false,                                \
 113           "Turns on logging in Shenandoah at warning level. ")              \
 114                                                                             \
 115   product_rw(uintx, ShenandoahFullGCThreshold, 3,                           \
 116           "How many cycles in a row to do degenerated marking on "          \
 117           "cancelled GC before triggering a full-gc"                        \
 118           "Defaults to 3")                                                  \
 119                                                                             \
 120   product_rw(uintx, ShenandoahGarbageThreshold, 60,                         \
 121           "Sets the percentage of garbage a region need to contain before " \
 122           "it can be marked for collection. Applies to "                    \
 123           "Shenandoah GC dynamic Heuristic mode only (ignored otherwise). " \
 124           "Defaults to 60%.")                                               \
 125                                                                             \
 126   product_rw(uintx, ShenandoahFreeThreshold, 10,                            \
 127           "Set the percentage of free heap at which a GC cycle is started. " \
 128           "Applies to Shenandoah GC dynamic Heuristic mode only "           \
 129           "(ignored otherwise). Defaults to 10%.")                          \
 130                                                                             \
 131   product_rw(uintx, ShenandoahAllocationThreshold, 0,                       \
 132           "Set percentage of memory allocated since last GC cycle before "  \
 133           "a new GC cycle is started. "                                     \
 134           "Applies to Shenandoah GC dynamic Heuristic mode only "           \
 135           "(ignored otherwise). Defauls to 0%.")                            \
 136                                                                             \
 137   experimental(uintx, ShenandoahMergeUpdateRefsMinGap, 100,                 \
 138                "If GC is currently running in separate update-refs mode "   \
 139                "this numbers gives the threshold when to switch to "        \
 140                "merged update-refs mode. Number is percentage relative to"  \
 141                "duration(marking)+duration(update-refs).")                  \
 142                                                                             \
 143   experimental(uintx, ShenandoahMergeUpdateRefsMaxGap, 200,                 \
 144                "If GC is currently running in merged update-refs mode "     \
 145                "this numbers gives the threshold when to switch to "        \
 146                "separate update-refs mode. Number is percentage relative "  \
 147                "to duration(marking)+duration(update-refs).")               \
 148                                                                             \
 149   experimental(uintx, ShenandoahInitFreeThreshold, 30,                      \
 150                "Initial remaining free threshold for adaptive heuristics")  \

 151                                                                             \
 152   experimental(uintx, ShenandoahMinFreeThreshold, 10,                       \
 153                "Minimum remaining free threshold for adaptive heuristics")  \
 154                                                                             \
 155   experimental(uintx, ShenandoahMaxFreeThreshold, 70,                       \
 156                "Maximum remaining free threshold for adaptive heuristics")  \

























 157                                                                             \
 158   experimental(uintx, ShenandoahImmediateThreshold, 90,                     \
 159                "If mark identifies more than this much immediate garbage "  \
 160                "regions, it shall recycle them, and shall not continue the "\
 161                "rest of the GC cycle. The value is in percents of total "   \
 162                "number of candidates for collection set. Setting this "     \
 163                "threshold to 100% effectively disables this shortcut.")     \
 164                                                                             \
 165   experimental(uintx, ShenandoahGuaranteedGCInterval, 5*60*1000,            \
 166                "Adaptive and dynamic heuristics would guarantee a GC cycle "\
 167                "at least with this interval. This is useful when large idle"\
 168                " intervals are present, where GC can run without stealing " \
 169                "time from active application. Time is in milliseconds.")    \
 170                                                                             \
 171   experimental(uintx, ShenandoahHappyCyclesThreshold, 3,                    \
 172           "How many successful marking cycles before improving free "       \
 173                "threshold for adaptive heuristics")                         \
 174                                                                             \
 175   experimental(uintx, ShenandoahMarkLoopStride, 1000,                       \
 176           "How many items are processed during one marking step")           \
 177                                                                             \
 178   experimental(bool, ShenandoahConcurrentScanCodeRoots, true,               \
 179           "Scan code roots concurrently, instead of during a pause")        \
 180                                                                             \
 181   experimental(bool, ShenandoahConcurrentEvacCodeRoots, false,              \
 182           "Evacuate code roots concurrently, instead of during a pause. "   \
 183           "This requires ShenandoahBarriersForConst to be enabled.")        \
 184                                                                             \
 185   experimental(uintx, ShenandoahCodeRootsStyle, 1,                          \
 186           "Use this style to scan code cache:"                              \
 187           " 0 - sequential iterator;"                                       \
 188           " 1 - parallel iterator;"                                         \
 189           " 2 - parallel iterator with filters;")                           \
 190                                                                             \
 191   experimental(bool, ShenandoahUncommit, true,                              \
 192           "Allow Shenandoah to uncommit unused memory.")                    \
 193                                                                             \
 194   experimental(uintx, ShenandoahUncommitDelay, 5*60*1000,                   \
 195            "Shenandoah would start to uncommit memory for regions that were"\
 196            " not used for more than this time. First use after that would " \
 197            "incur allocation stalls. Actively used regions would never be " \
 198            "uncommitted, because they never decay. Time is in milliseconds."\
 199            "Setting this delay to 0 effectively makes Shenandoah to "       \
 200            "uncommit the regions almost immediately.")                      \
 201                                                                             \
 202   experimental(bool, ShenandoahBarriersForConst, false,                     \
 203           "Emit barriers for constant oops in generated code, improving "   \
 204           "throughput. If no barriers are emitted, GC will need to "        \
 205           "pre-evacuate code roots before returning from STW, adding to "   \
 206           "pause time.")                                                    \
 207                                                                             \
 208   experimental(bool, ShenandoahDontIncreaseWBFreq, true,                    \
 209           "Common 2 WriteBarriers or WriteBarrier and a ReadBarrier only "  \
 210           "if the resulting WriteBarrier isn't executed more frequently")   \
 211                                                                             \
 212   experimental(bool, ShenandoahNoLivenessFullGC, true,                      \
 213           "Skip liveness counting for mark during full GC.")                \
 214                                                                             \
 215   experimental(bool, ShenandoahWriteBarrierToIR, true,                      \
 216           "Convert write barrier to IR instead of using assembly blob")     \
 217                                                                             \
 218   experimental(bool, ShenandoahWriteBarrierCsetTestInIR, true,              \
 219           "Perform cset test in IR rather than in the stub")                \
 220                                                                             \
 221   experimental(bool, UseShenandoahOWST, true,                               \
 222           "Use Shenandoah work stealing termination protocol")              \
 223                                                                             \
 224   experimental(size_t, ShenandoahSATBBufferSize, 1 * K,                     \
 225           "Number of entries in an SATB log buffer.")                       \
 226                                                                             \
 227   product_rw(int, ShenandoahRegionSamplingRate, 40,                         \
 228           "Sampling rate for heap region sampling. "                        \
 229           "Number of milliseconds between samples")                         \
 230                                                                             \
 231   product_rw(bool, ShenandoahRegionSampling, false,                         \
 232           "Turns on heap region sampling via JVMStat")                      \
 233                                                                             \
 234   experimental(uintx, ShenandoahControlIntervalMin, 1,                      \
 235               "The minumum sleep interval for control loop that drives "    \
 236               "the cycles. Lower values would increase GC responsiveness "  \
 237               "to changing heap conditions, at the expense of higher perf " \
 238               "overhead. Time is in milliseconds.")                         \
 239                                                                             \
 240   experimental(uintx, ShenandoahControlIntervalMax, 10,                     \
 241               "The maximum sleep interval for control loop that drives "    \
 242               "the cycles. Lower values would increase GC responsiveness "  \
 243               "to changing heap conditions, at the expense of higher perf " \
 244               "overhead. Time is in milliseconds.")                         \
 245                                                                             \
 246   experimental(uintx, ShenandoahControlIntervalAdjustPeriod, 1000,          \
 247               "The time period for one step in control loop interval "      \
 248               "adjustment. Lower values make adjustments faster, at the "   \
 249               "expense of higher perf overhead. Time is in milliseconds.")  \
 250                                                                             \
 251   diagnostic(bool, ShenandoahAllocImplicitLive, true,                       \
 252               "Treat (non-evac) allocations implicitely live")              \
 253                                                                             \
 254   diagnostic(bool, ShenandoahSATBBarrier, true,                             \
 255           "Turn on/off SATB barriers in Shenandoah")                        \
 256                                                                             \
 257   diagnostic(bool, ShenandoahWriteBarrier, true,                            \
 258           "Turn on/off write barriers in Shenandoah")                       \
 259                                                                             \
 260   diagnostic(bool, ShenandoahWriteBarrierRB, true,                          \
 261           "Turn on/off RB on WB fastpath in Shenandoah.")                   \
 262                                                                             \
 263   diagnostic(bool, ShenandoahReadBarrier, true,                             \
 264           "Turn on/off read barriers in Shenandoah")                        \
 265                                                                             \
 266   diagnostic(bool, ShenandoahCASBarrier, true,                              \
 267           "Turn on/off CAS barriers in Shenandoah")                         \
 268                                                                             \
 269   diagnostic(bool, ShenandoahAcmpBarrier, true,                             \
 270           "Turn on/off acmp barriers in Shenandoah")                        \
 271                                                                             \
 272   diagnostic(bool, ShenandoahCloneBarrier, true,                            \
 273           "Turn on/off clone barriers in Shenandoah")                       \


 297           "larger than this threshold would be reported as warnings. "      \
 298           "Time is in microseconds.")                                       \
 299                                                                             \
 300   develop(bool, VerifyStrictOopOperations, false,                           \
 301           "Verify that == and != are not used on oops. Only in fastdebug")  \
 302                                                                             \
 303   develop(bool, ShenandoahVerifyOptoBarriers, false,                        \
 304           "Verify no missing barriers in c2")                               \
 305                                                                             \
 306   develop(intx, ShenandoahFailHeapExpansionAfter, -1,                       \
 307           "Artificially fails heap expansion after specified times."        \
 308           "Used to verify allocation handling. Default -1 to disable it.")  \
 309                                                                             \
 310   product(bool, ShenandoahAlwaysPreTouch, false,                            \
 311           "Pre-touch heap memory, overrides global AlwaysPreTouch")         \
 312                                                                             \
 313   experimental(intx, ShenandoahMarkScanPrefetch, 32,                        \
 314           "How many objects to prefetch ahead when traversing mark bitmaps." \
 315           "Set to 0 to disable prefetching.")                               \
 316                                                                             \
 317   experimental(intx, ShenandoahAllocGCTries, 5,                             \
 318           "How many times to try to do GC on allocation failure."           \
 319           "Set to 0 to never try, and fail instead.")                       \
 320                                                                             \
 321   experimental(bool, ShenandoahFastSyncRoots, true,                         \
 322           "Enable fast synchronizer roots scanning")                        \
 323                                                                             \
 324   experimental(bool, ShenandoahPreclean, true,                              \
 325               "Do preclean phase before final mark")                        \
 326                                                                             \
 327   experimental(bool, ShenandoahHumongousMoves, true,                        \
 328           "Allow moving humongous regions. This makes GC more resistant "   \
 329           "to external fragmentation that may otherwise fail other "        \
 330           "humongous allocations, at the expense of higher GC copying "     \
 331           "costs.")                                                         \
 332                                                                             \
 333   diagnostic(bool, ShenandoahOOMDuringEvacALot, false,                      \
 334           "Simulate OOM during evacuation frequently.")                     \
 335                                                                             \
 336   diagnostic(bool, ShenandoahAllocFailureALot, false,                       \
 337           "Make lots of artificial allocation failures.")                   \
 338                                                                             \
 339   diagnostic(bool, ShenandoahDegeneratedGC, true,                           \
 340           "Use Degenerated GC.")                                            \


 342   experimental(bool, ShenandoahPacing, true,                                \
 343           "Pace application allocations to give GC chance to start "        \
 344           "and complete.")                                                  \
 345                                                                             \
 346   experimental(uintx, ShenandoahPacingMaxDelay, 10,                         \
 347           "Max delay for pacing application allocations. "                  \
 348           "Time is in milliseconds.")                                       \
 349                                                                             \
 350   experimental(uintx, ShenandoahPacingIdleSlack, 2,                         \
 351           "Percent of heap counted as non-taxable allocations during idle. "\
 352           "Larger value makes the pacing milder during idle phases, "       \
 353           "requiring less rendezvous with control thread. Lower value "     \
 354           "makes the pacing control less responsive to out-of-cycle allocs.")\
 355                                                                             \
 356   experimental(uintx, ShenandoahPacingCycleSlack, 10,                       \
 357           "Percent of free space taken as non-taxable allocations during "  \
 358           "the GC cycle. Larger value makes the pacing milder at the "      \
 359           "beginning of the GC cycle. Lower value makes the pacing less "   \
 360           "uniform during the cycle.")                                      \
 361                                                                             \















 362   diagnostic(bool, ShenandoahAllowMixedAllocs, true,                        \
 363           "Allow mixing mutator and collector allocations in a single "     \
 364           "region")                                                         \
 365                                                                             \











 366 
 367 SHENANDOAH_FLAGS(DECLARE_DEVELOPER_FLAG, \
 368                  DECLARE_PD_DEVELOPER_FLAG,     \
 369                  DECLARE_PRODUCT_FLAG,          \
 370                  DECLARE_PD_PRODUCT_FLAG,       \
 371                  DECLARE_DIAGNOSTIC_FLAG,       \
 372                  DECLARE_EXPERIMENTAL_FLAG,     \
 373                  DECLARE_NOTPRODUCT_FLAG,       \
 374                  DECLARE_MANAGEABLE_FLAG,       \
 375                  DECLARE_PRODUCT_RW_FLAG)
 376 
 377 #endif // SHARE_VM_GC_SHENANDOAH_SHENANDOAH_GLOBALS_HPP


  54   product(uintx, ShenandoahHeapRegionSize, 0,                               \
  55           "Size of the Shenandoah regions. "                                \
  56           "Determined automatically by default.")                           \
  57                                                                             \
  58   experimental(uintx, ShenandoahMinRegionSize, 256 * K,                     \
  59           "Minimum heap region size. ")                                     \
  60                                                                             \
  61   experimental(uintx, ShenandoahMaxRegionSize, 32 * M,                      \
  62           "Maximum heap region size. ")                                     \
  63                                                                             \
  64   experimental(intx, ShenandoahHumongousThreshold, 100,                     \
  65           "How large should the object be to get allocated in humongous "   \
  66           "region, in percents of heap region size. This also caps the "    \
  67           "maximum TLAB size.")                                             \
  68                                                                             \
  69   experimental(uintx, ShenandoahTargetNumRegions, 2048,                     \
  70           "Target number of regions. We try to get around that many "       \
  71           "regions, based on ShenandoahMinRegionSize and "                  \
  72           "ShenandoahMaxRegionSizeSize. ")                                  \
  73                                                                             \



  74   product(ccstr, ShenandoahGCHeuristics, "adaptive",                        \
  75           "The heuristics to use in Shenandoah GC. Possible values: "       \
  76           "adaptive (adapt to maintain the given amount of free memory), "  \
  77           "static (start concurrent GC when static free heap threshold "    \
  78           "and static allocation threshold are tripped), "                  \
  79           "passive (do not start concurrent GC, wait for Full GC) "         \
  80           "aggressive (run concurrent GC continuously, evacuate everything), " \
  81           "compact (run GC with lower footprint target)."                    \
  82           "Defaults to adaptive")                                           \
  83                                                                             \
  84   experimental(ccstr, ShenandoahUpdateRefsEarly, "adaptive",                \
  85           "Run a separate concurrent reference updating phase after"        \
  86           "concurrent evacuation. Possible values: 'on', 'off', 'adaptive'")\
  87                                                                             \
  88   experimental(uintx, ShenandoahEvacAssist, 10,                             \
  89           "How many objects to evacuate on WB assist path. "                \
  90           "Use zero to disable.")                                           \
  91                                                                             \
  92   product(uintx, ShenandoahRefProcFrequency, 5,                             \
  93           "How often should (weak, soft, etc) references be processed. "    \
  94           "References get processed at every Nth GC cycle. "                \
  95           "Set to 0 to disable reference processing. "                      \
  96           "Defaults to process references every 5 cycles.")                 \
  97                                                                             \
  98   product(uintx, ShenandoahUnloadClassesFrequency, 5,                       \
  99           "How often should classes get unloaded. "                         \
 100           "Class unloading is performed at every Nth GC cycle. "            \
 101           "Set to 0 to disable concurrent class unloading. "                \
 102           "Defaults to unload classes every 5 cycles.")                     \
 103                                                                             \
 104   product(bool, ShenandoahLogTrace, false,                                  \
 105           "Turns on logging in Shenandoah at trace level. ")                \
 106                                                                             \
 107   product(bool, ShenandoahLogDebug, false,                                  \
 108           "Turns on logging in Shenandoah at debug level. ")                \
 109                                                                             \
 110   product(bool, ShenandoahLogInfo, false,                                   \
 111           "Turns on logging in Shenandoah at info level. ")                 \
 112                                                                             \
 113   product(bool, ShenandoahLogWarning, false,                                \
 114           "Turns on logging in Shenandoah at warning level. ")              \
 115                                                                             \
 116   product_rw(uintx, ShenandoahFullGCThreshold, 3,                           \
 117           "How many back-to-back Degenerated GCs to do before triggering "  \
 118           "a Full GC. Defaults to 3.")                                      \

 119                                                                             \
 120   product_rw(uintx, ShenandoahGarbageThreshold, 60,                         \
 121           "Sets the percentage of garbage a region need to contain before " \
 122           "it can be marked for collection. Applies to "                    \
 123           "Shenandoah GC dynamic Heuristic mode only (ignored otherwise). " \
 124           "Defaults to 60%.")                                               \
 125                                                                             \
 126   product_rw(uintx, ShenandoahFreeThreshold, 10,                            \
 127           "Set the percentage of free heap at which a GC cycle is started. " \
 128           "Applies to Shenandoah GC dynamic Heuristic mode only "           \
 129           "(ignored otherwise). Defaults to 10%.")                          \
 130                                                                             \
 131   product_rw(uintx, ShenandoahAllocationThreshold, 0,                       \
 132           "Set percentage of memory allocated since last GC cycle before "  \
 133           "a new GC cycle is started. "                                     \
 134           "Applies to Shenandoah GC dynamic Heuristic mode only "           \
 135           "(ignored otherwise). Defauls to 0%.")                            \
 136                                                                             \
 137   experimental(uintx, ShenandoahMergeUpdateRefsMinGap, 100,                 \
 138                "If GC is currently running in separate update-refs mode "   \
 139                "this numbers gives the threshold when to switch to "        \
 140                "merged update-refs mode. Number is percentage relative to"  \
 141                "duration(marking)+duration(update-refs).")                  \
 142                                                                             \
 143   experimental(uintx, ShenandoahMergeUpdateRefsMaxGap, 200,                 \
 144                "If GC is currently running in merged update-refs mode "     \
 145                "this numbers gives the threshold when to switch to "        \
 146                "separate update-refs mode. Number is percentage relative "  \
 147                "to duration(marking)+duration(update-refs).")               \
 148                                                                             \
 149   experimental(uintx, ShenandoahInitFreeThreshold, 70,                      \
 150                "Initial remaining free threshold for learning steps in "    \
 151                "heuristics. In percents of total heap size.")               \
 152                                                                             \
 153   experimental(uintx, ShenandoahMinFreeThreshold, 10,                       \
 154                "Minimum remaining free threshold for adaptive heuristics")  \
 155                                                                             \
 156   experimental(uintx, ShenandoahLearningSteps, 5,                           \
 157                "Number of GC cycles to run in order to learn application "  \
 158                "and GC performance for adaptive heuristics.")               \
 159                                                                             \
 160   experimental(uintx, ShenandoahAllocSpikeFactor, 5,                        \
 161                "The amount of heap space to reserve for absorbing the "     \
 162                "allocation spikes. Larger value wastes more memory in "     \
 163                "non-emergency cases, but provides more safety in emergency "\
 164                "cases. In percents of total heap size.")                    \
 165                                                                             \
 166   experimental(uintx, ShenandoahEvacReserve, 5,                             \
 167                "Maximum amount of free space to reserve for evacuation. "   \
 168                "Larger values make GC more aggressive, while leaving less " \
 169                "headroom for application to allocate in. "                  \
 170                "In percents of free space available.")                      \
 171                                                                             \
 172   experimental(double, ShenandoahEvacWaste, 1.2,                            \
 173                "How much waste evacuations produce within the reserved "    \
 174                "space. Larger values make evacuations more resilient "      \
 175                "against allocation failures, at expense of smaller csets "  \
 176                "on each cycle.")                                            \
 177                                                                             \
 178   experimental(bool, ShenandoahEvacReserveOverflow, true,                   \
 179                "Allow evacuations to overflow the reserved space. "         \
 180                "Enabling it will make evacuations more resilient when "     \
 181                "evacuation reserve/waste is incorrect, at the risk that "   \
 182                "application allocations run out of memory too early.")      \
 183                                                                             \
 184   experimental(uintx, ShenandoahImmediateThreshold, 90,                     \
 185                "If mark identifies more than this much immediate garbage "  \
 186                "regions, it shall recycle them, and shall not continue the "\
 187                "rest of the GC cycle. The value is in percents of total "   \
 188                "number of candidates for collection set. Setting this "     \
 189                "threshold to 100% effectively disables this shortcut.")     \
 190                                                                             \
 191   experimental(uintx, ShenandoahGuaranteedGCInterval, 5*60*1000,            \
 192                "Adaptive and dynamic heuristics would guarantee a GC cycle "\
 193                "at least with this interval. This is useful when large idle"\
 194                " intervals are present, where GC can run without stealing " \
 195                "time from active application. Time is in milliseconds.")    \
 196                                                                             \
 197   experimental(uintx, ShenandoahHappyCyclesThreshold, 3,                    \
 198           "How many successful marking cycles before improving free "       \
 199                "threshold for adaptive heuristics")                         \
 200                                                                             \
 201   experimental(uintx, ShenandoahMarkLoopStride, 1000,                       \
 202           "How many items are processed during one marking step")           \
 203                                                                             \
 204   experimental(bool, ShenandoahConcurrentScanCodeRoots, true,               \
 205           "Scan code roots concurrently, instead of during a pause")        \
 206                                                                             \
 207   experimental(uintx, ShenandoahCodeRootsStyle, 2,                          \




 208           "Use this style to scan code cache:"                              \
 209           " 0 - sequential iterator;"                                       \
 210           " 1 - parallel iterator;"                                         \
 211           " 2 - parallel iterator with cset filters;")                      \
 212                                                                             \
 213   experimental(bool, ShenandoahUncommit, true,                              \
 214           "Allow Shenandoah to uncommit unused memory.")                    \
 215                                                                             \
 216   experimental(uintx, ShenandoahUncommitDelay, 5*60*1000,                   \
 217            "Shenandoah would start to uncommit memory for regions that were"\
 218            " not used for more than this time. First use after that would " \
 219            "incur allocation stalls. Actively used regions would never be " \
 220            "uncommitted, because they never decay. Time is in milliseconds."\
 221            "Setting this delay to 0 effectively makes Shenandoah to "       \
 222            "uncommit the regions almost immediately.")                      \
 223                                                                             \






 224   experimental(bool, ShenandoahDontIncreaseWBFreq, true,                    \
 225           "Common 2 WriteBarriers or WriteBarrier and a ReadBarrier only "  \
 226           "if the resulting WriteBarrier isn't executed more frequently")   \
 227                                                                             \






 228   experimental(bool, ShenandoahWriteBarrierCsetTestInIR, true,              \
 229           "Perform cset test in IR rather than in the stub")                \
 230                                                                             \
 231   experimental(bool, UseShenandoahOWST, true,                               \
 232           "Use Shenandoah work stealing termination protocol")              \
 233                                                                             \
 234   experimental(size_t, ShenandoahSATBBufferSize, 1 * K,                     \
 235           "Number of entries in an SATB log buffer.")                       \
 236                                                                             \
 237   product_rw(int, ShenandoahRegionSamplingRate, 40,                         \
 238           "Sampling rate for heap region sampling. "                        \
 239           "Number of milliseconds between samples")                         \
 240                                                                             \
 241   product_rw(bool, ShenandoahRegionSampling, false,                         \
 242           "Turns on heap region sampling via JVMStat")                      \
 243                                                                             \
 244   experimental(uintx, ShenandoahControlIntervalMin, 1,                      \
 245               "The minumum sleep interval for control loop that drives "    \
 246               "the cycles. Lower values would increase GC responsiveness "  \
 247               "to changing heap conditions, at the expense of higher perf " \
 248               "overhead. Time is in milliseconds.")                         \
 249                                                                             \
 250   experimental(uintx, ShenandoahControlIntervalMax, 10,                     \
 251               "The maximum sleep interval for control loop that drives "    \
 252               "the cycles. Lower values would increase GC responsiveness "  \
 253               "to changing heap conditions, at the expense of higher perf " \
 254               "overhead. Time is in milliseconds.")                         \
 255                                                                             \
 256   experimental(uintx, ShenandoahControlIntervalAdjustPeriod, 1000,          \
 257               "The time period for one step in control loop interval "      \
 258               "adjustment. Lower values make adjustments faster, at the "   \
 259               "expense of higher perf overhead. Time is in milliseconds.")  \
 260                                                                             \



 261   diagnostic(bool, ShenandoahSATBBarrier, true,                             \
 262           "Turn on/off SATB barriers in Shenandoah")                        \
 263                                                                             \
 264   diagnostic(bool, ShenandoahWriteBarrier, true,                            \
 265           "Turn on/off write barriers in Shenandoah")                       \
 266                                                                             \
 267   diagnostic(bool, ShenandoahWriteBarrierRB, true,                          \
 268           "Turn on/off RB on WB fastpath in Shenandoah.")                   \
 269                                                                             \
 270   diagnostic(bool, ShenandoahReadBarrier, true,                             \
 271           "Turn on/off read barriers in Shenandoah")                        \
 272                                                                             \
 273   diagnostic(bool, ShenandoahCASBarrier, true,                              \
 274           "Turn on/off CAS barriers in Shenandoah")                         \
 275                                                                             \
 276   diagnostic(bool, ShenandoahAcmpBarrier, true,                             \
 277           "Turn on/off acmp barriers in Shenandoah")                        \
 278                                                                             \
 279   diagnostic(bool, ShenandoahCloneBarrier, true,                            \
 280           "Turn on/off clone barriers in Shenandoah")                       \


 304           "larger than this threshold would be reported as warnings. "      \
 305           "Time is in microseconds.")                                       \
 306                                                                             \
 307   develop(bool, VerifyStrictOopOperations, false,                           \
 308           "Verify that == and != are not used on oops. Only in fastdebug")  \
 309                                                                             \
 310   develop(bool, ShenandoahVerifyOptoBarriers, false,                        \
 311           "Verify no missing barriers in c2")                               \
 312                                                                             \
 313   develop(intx, ShenandoahFailHeapExpansionAfter, -1,                       \
 314           "Artificially fails heap expansion after specified times."        \
 315           "Used to verify allocation handling. Default -1 to disable it.")  \
 316                                                                             \
 317   product(bool, ShenandoahAlwaysPreTouch, false,                            \
 318           "Pre-touch heap memory, overrides global AlwaysPreTouch")         \
 319                                                                             \
 320   experimental(intx, ShenandoahMarkScanPrefetch, 32,                        \
 321           "How many objects to prefetch ahead when traversing mark bitmaps." \
 322           "Set to 0 to disable prefetching.")                               \
 323                                                                             \




 324   experimental(bool, ShenandoahFastSyncRoots, true,                         \
 325           "Enable fast synchronizer roots scanning")                        \
 326                                                                             \
 327   experimental(bool, ShenandoahPreclean, true,                              \
 328               "Do preclean phase before final mark")                        \
 329                                                                             \
 330   experimental(bool, ShenandoahHumongousMoves, true,                        \
 331           "Allow moving humongous regions. This makes GC more resistant "   \
 332           "to external fragmentation that may otherwise fail other "        \
 333           "humongous allocations, at the expense of higher GC copying "     \
 334           "costs.")                                                         \
 335                                                                             \
 336   diagnostic(bool, ShenandoahOOMDuringEvacALot, false,                      \
 337           "Simulate OOM during evacuation frequently.")                     \
 338                                                                             \
 339   diagnostic(bool, ShenandoahAllocFailureALot, false,                       \
 340           "Make lots of artificial allocation failures.")                   \
 341                                                                             \
 342   diagnostic(bool, ShenandoahDegeneratedGC, true,                           \
 343           "Use Degenerated GC.")                                            \


 345   experimental(bool, ShenandoahPacing, true,                                \
 346           "Pace application allocations to give GC chance to start "        \
 347           "and complete.")                                                  \
 348                                                                             \
 349   experimental(uintx, ShenandoahPacingMaxDelay, 10,                         \
 350           "Max delay for pacing application allocations. "                  \
 351           "Time is in milliseconds.")                                       \
 352                                                                             \
 353   experimental(uintx, ShenandoahPacingIdleSlack, 2,                         \
 354           "Percent of heap counted as non-taxable allocations during idle. "\
 355           "Larger value makes the pacing milder during idle phases, "       \
 356           "requiring less rendezvous with control thread. Lower value "     \
 357           "makes the pacing control less responsive to out-of-cycle allocs.")\
 358                                                                             \
 359   experimental(uintx, ShenandoahPacingCycleSlack, 10,                       \
 360           "Percent of free space taken as non-taxable allocations during "  \
 361           "the GC cycle. Larger value makes the pacing milder at the "      \
 362           "beginning of the GC cycle. Lower value makes the pacing less "   \
 363           "uniform during the cycle.")                                      \
 364                                                                             \
 365   experimental(double, ShenandoahPacingSurcharge, 1.1,                      \
 366           "Additional pacing tax surcharge to help unclutter the heap. "    \
 367           "Larger values makes the pacing more aggressive. Lower values "   \
 368           "risk GC cycles finish with less memory than were available at "  \
 369           "the beginning of it.")                                           \
 370                                                                             \
 371   experimental(uintx, ShenandoahCriticalFreeThreshold, 1,                   \
 372           "Percent of heap that needs to be free after recovery cycles, "   \
 373           "either Degenerated or Full GC. If this much space is not "       \
 374           "available, next recovery step would triggered.")                 \
 375                                                                             \
 376   experimental(uintx, ShenandoahSATBBufferFlushInterval, 100,               \
 377           "Forcefully flush non-empty SATB buffers at this interval. "      \
 378           "Time is in milliseconds.")                                       \
 379                                                                             \
 380   diagnostic(bool, ShenandoahAllowMixedAllocs, true,                        \
 381           "Allow mixing mutator and collector allocations in a single "     \
 382           "region")                                                         \
 383                                                                             \
 384   diagnostic(bool, ShenandoahTerminationTrace, false,                       \
 385           "Tracing task termination timings")                               \
 386                                                                             \
 387   diagnostic(bool, ShenandoahElasticTLAB, true,                             \
 388           "Use Elastic TLABs with Shenandoah")                              \
 389                                                                             \
 390   diagnostic(bool, ShenandoahCompileCheck, false,                           \
 391           "Assert that methods are successfully compilable")                \
 392                                                                             \
 393   experimental(bool, ShenandoahAlwaysClearSoftRefs, false,                  \
 394           "Clear soft references unconditionally")                          \
 395 
 396 SHENANDOAH_FLAGS(DECLARE_DEVELOPER_FLAG, \
 397                  DECLARE_PD_DEVELOPER_FLAG,     \
 398                  DECLARE_PRODUCT_FLAG,          \
 399                  DECLARE_PD_PRODUCT_FLAG,       \
 400                  DECLARE_DIAGNOSTIC_FLAG,       \
 401                  DECLARE_EXPERIMENTAL_FLAG,     \
 402                  DECLARE_NOTPRODUCT_FLAG,       \
 403                  DECLARE_MANAGEABLE_FLAG,       \
 404                  DECLARE_PRODUCT_RW_FLAG)
 405 
 406 #endif // SHARE_VM_GC_SHENANDOAH_SHENANDOAH_GLOBALS_HPP
< prev index next >