< 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

@@ -69,13 +69,10 @@
   experimental(uintx, ShenandoahTargetNumRegions, 2048,                     \
           "Target number of regions. We try to get around that many "       \
           "regions, based on ShenandoahMinRegionSize and "                  \
           "ShenandoahMaxRegionSizeSize. ")                                  \
                                                                             \
-  product(bool, UseShenandoahMatrix, false,                                 \
-          "Keep a connection matrix and use this to drive collection sets") \
-                                                                            \
   product(ccstr, ShenandoahGCHeuristics, "adaptive",                        \
           "The heuristics to use in Shenandoah GC. Possible values: "       \
           "adaptive (adapt to maintain the given amount of free memory), "  \
           "static (start concurrent GC when static free heap threshold "    \
           "and static allocation threshold are tripped), "                  \

@@ -86,10 +83,14 @@
                                                                             \
   experimental(ccstr, ShenandoahUpdateRefsEarly, "adaptive",                \
           "Run a separate concurrent reference updating phase after"        \
           "concurrent evacuation. Possible values: 'on', 'off', 'adaptive'")\
                                                                             \
+  experimental(uintx, ShenandoahEvacAssist, 10,                             \
+          "How many objects to evacuate on WB assist path. "                \
+          "Use zero to disable.")                                           \
+                                                                            \
   product(uintx, ShenandoahRefProcFrequency, 5,                             \
           "How often should (weak, soft, etc) references be processed. "    \
           "References get processed at every Nth GC cycle. "                \
           "Set to 0 to disable reference processing. "                      \
           "Defaults to process references every 5 cycles.")                 \

@@ -111,13 +112,12 @@
                                                                             \
   product(bool, ShenandoahLogWarning, false,                                \
           "Turns on logging in Shenandoah at warning level. ")              \
                                                                             \
   product_rw(uintx, ShenandoahFullGCThreshold, 3,                           \
-          "How many cycles in a row to do degenerated marking on "          \
-          "cancelled GC before triggering a full-gc"                        \
-          "Defaults to 3")                                                  \
+          "How many back-to-back Degenerated GCs to do before triggering "  \
+          "a Full GC. Defaults to 3.")                                      \
                                                                             \
   product_rw(uintx, ShenandoahGarbageThreshold, 60,                         \
           "Sets the percentage of garbage a region need to contain before " \
           "it can be marked for collection. Applies to "                    \
           "Shenandoah GC dynamic Heuristic mode only (ignored otherwise). " \

@@ -144,18 +144,44 @@
                "If GC is currently running in merged update-refs mode "     \
                "this numbers gives the threshold when to switch to "        \
                "separate update-refs mode. Number is percentage relative "  \
                "to duration(marking)+duration(update-refs).")               \
                                                                             \
-  experimental(uintx, ShenandoahInitFreeThreshold, 30,                      \
-               "Initial remaining free threshold for adaptive heuristics")  \
+  experimental(uintx, ShenandoahInitFreeThreshold, 70,                      \
+               "Initial remaining free threshold for learning steps in "    \
+               "heuristics. In percents of total heap size.")               \
                                                                             \
   experimental(uintx, ShenandoahMinFreeThreshold, 10,                       \
                "Minimum remaining free threshold for adaptive heuristics")  \
                                                                             \
-  experimental(uintx, ShenandoahMaxFreeThreshold, 70,                       \
-               "Maximum remaining free threshold for adaptive heuristics")  \
+  experimental(uintx, ShenandoahLearningSteps, 5,                           \
+               "Number of GC cycles to run in order to learn application "  \
+               "and GC performance for adaptive heuristics.")               \
+                                                                            \
+  experimental(uintx, ShenandoahAllocSpikeFactor, 5,                        \
+               "The amount of heap space to reserve for absorbing the "     \
+               "allocation spikes. Larger value wastes more memory in "     \
+               "non-emergency cases, but provides more safety in emergency "\
+               "cases. In percents of total heap size.")                    \
+                                                                            \
+  experimental(uintx, ShenandoahEvacReserve, 5,                             \
+               "Maximum amount of free space to reserve for evacuation. "   \
+               "Larger values make GC more aggressive, while leaving less " \
+               "headroom for application to allocate in. "                  \
+               "In percents of free space available.")                      \
+                                                                            \
+  experimental(double, ShenandoahEvacWaste, 1.2,                            \
+               "How much waste evacuations produce within the reserved "    \
+               "space. Larger values make evacuations more resilient "      \
+               "against allocation failures, at expense of smaller csets "  \
+               "on each cycle.")                                            \
+                                                                            \
+  experimental(bool, ShenandoahEvacReserveOverflow, true,                   \
+               "Allow evacuations to overflow the reserved space. "         \
+               "Enabling it will make evacuations more resilient when "     \
+               "evacuation reserve/waste is incorrect, at the risk that "   \
+               "application allocations run out of memory too early.")      \
                                                                             \
   experimental(uintx, ShenandoahImmediateThreshold, 90,                     \
                "If mark identifies more than this much immediate garbage "  \
                "regions, it shall recycle them, and shall not continue the "\
                "rest of the GC cycle. The value is in percents of total "   \

@@ -176,19 +202,15 @@
           "How many items are processed during one marking step")           \
                                                                             \
   experimental(bool, ShenandoahConcurrentScanCodeRoots, true,               \
           "Scan code roots concurrently, instead of during a pause")        \
                                                                             \
-  experimental(bool, ShenandoahConcurrentEvacCodeRoots, false,              \
-          "Evacuate code roots concurrently, instead of during a pause. "   \
-          "This requires ShenandoahBarriersForConst to be enabled.")        \
-                                                                            \
-  experimental(uintx, ShenandoahCodeRootsStyle, 1,                          \
+  experimental(uintx, ShenandoahCodeRootsStyle, 2,                          \
           "Use this style to scan code cache:"                              \
           " 0 - sequential iterator;"                                       \
           " 1 - parallel iterator;"                                         \
-          " 2 - parallel iterator with filters;")                           \
+          " 2 - parallel iterator with cset filters;")                      \
                                                                             \
   experimental(bool, ShenandoahUncommit, true,                              \
           "Allow Shenandoah to uncommit unused memory.")                    \
                                                                             \
   experimental(uintx, ShenandoahUncommitDelay, 5*60*1000,                   \

@@ -197,26 +219,14 @@
            "incur allocation stalls. Actively used regions would never be " \
            "uncommitted, because they never decay. Time is in milliseconds."\
            "Setting this delay to 0 effectively makes Shenandoah to "       \
            "uncommit the regions almost immediately.")                      \
                                                                             \
-  experimental(bool, ShenandoahBarriersForConst, false,                     \
-          "Emit barriers for constant oops in generated code, improving "   \
-          "throughput. If no barriers are emitted, GC will need to "        \
-          "pre-evacuate code roots before returning from STW, adding to "   \
-          "pause time.")                                                    \
-                                                                            \
   experimental(bool, ShenandoahDontIncreaseWBFreq, true,                    \
           "Common 2 WriteBarriers or WriteBarrier and a ReadBarrier only "  \
           "if the resulting WriteBarrier isn't executed more frequently")   \
                                                                             \
-  experimental(bool, ShenandoahNoLivenessFullGC, true,                      \
-          "Skip liveness counting for mark during full GC.")                \
-                                                                            \
-  experimental(bool, ShenandoahWriteBarrierToIR, true,                      \
-          "Convert write barrier to IR instead of using assembly blob")     \
-                                                                            \
   experimental(bool, ShenandoahWriteBarrierCsetTestInIR, true,              \
           "Perform cset test in IR rather than in the stub")                \
                                                                             \
   experimental(bool, UseShenandoahOWST, true,                               \
           "Use Shenandoah work stealing termination protocol")              \

@@ -246,13 +256,10 @@
   experimental(uintx, ShenandoahControlIntervalAdjustPeriod, 1000,          \
               "The time period for one step in control loop interval "      \
               "adjustment. Lower values make adjustments faster, at the "   \
               "expense of higher perf overhead. Time is in milliseconds.")  \
                                                                             \
-  diagnostic(bool, ShenandoahAllocImplicitLive, true,                       \
-              "Treat (non-evac) allocations implicitely live")              \
-                                                                            \
   diagnostic(bool, ShenandoahSATBBarrier, true,                             \
           "Turn on/off SATB barriers in Shenandoah")                        \
                                                                             \
   diagnostic(bool, ShenandoahWriteBarrier, true,                            \
           "Turn on/off write barriers in Shenandoah")                       \

@@ -312,14 +319,10 @@
                                                                             \
   experimental(intx, ShenandoahMarkScanPrefetch, 32,                        \
           "How many objects to prefetch ahead when traversing mark bitmaps." \
           "Set to 0 to disable prefetching.")                               \
                                                                             \
-  experimental(intx, ShenandoahAllocGCTries, 5,                             \
-          "How many times to try to do GC on allocation failure."           \
-          "Set to 0 to never try, and fail instead.")                       \
-                                                                            \
   experimental(bool, ShenandoahFastSyncRoots, true,                         \
           "Enable fast synchronizer roots scanning")                        \
                                                                             \
   experimental(bool, ShenandoahPreclean, true,                              \
               "Do preclean phase before final mark")                        \

@@ -357,14 +360,40 @@
           "Percent of free space taken as non-taxable allocations during "  \
           "the GC cycle. Larger value makes the pacing milder at the "      \
           "beginning of the GC cycle. Lower value makes the pacing less "   \
           "uniform during the cycle.")                                      \
                                                                             \
+  experimental(double, ShenandoahPacingSurcharge, 1.1,                      \
+          "Additional pacing tax surcharge to help unclutter the heap. "    \
+          "Larger values makes the pacing more aggressive. Lower values "   \
+          "risk GC cycles finish with less memory than were available at "  \
+          "the beginning of it.")                                           \
+                                                                            \
+  experimental(uintx, ShenandoahCriticalFreeThreshold, 1,                   \
+          "Percent of heap that needs to be free after recovery cycles, "   \
+          "either Degenerated or Full GC. If this much space is not "       \
+          "available, next recovery step would triggered.")                 \
+                                                                            \
+  experimental(uintx, ShenandoahSATBBufferFlushInterval, 100,               \
+          "Forcefully flush non-empty SATB buffers at this interval. "      \
+          "Time is in milliseconds.")                                       \
+                                                                            \
   diagnostic(bool, ShenandoahAllowMixedAllocs, true,                        \
           "Allow mixing mutator and collector allocations in a single "     \
           "region")                                                         \
                                                                             \
+  diagnostic(bool, ShenandoahTerminationTrace, false,                       \
+          "Tracing task termination timings")                               \
+                                                                            \
+  diagnostic(bool, ShenandoahElasticTLAB, true,                             \
+          "Use Elastic TLABs with Shenandoah")                              \
+                                                                            \
+  diagnostic(bool, ShenandoahCompileCheck, false,                           \
+          "Assert that methods are successfully compilable")                \
+                                                                            \
+  experimental(bool, ShenandoahAlwaysClearSoftRefs, false,                  \
+          "Clear soft references unconditionally")                          \
 
 SHENANDOAH_FLAGS(DECLARE_DEVELOPER_FLAG, \
                  DECLARE_PD_DEVELOPER_FLAG,     \
                  DECLARE_PRODUCT_FLAG,          \
                  DECLARE_PD_PRODUCT_FLAG,       \
< prev index next >