1
0

Generational ZGC vs G1 on JDK 25: benchmarks, internals and captured results

Complete companion suite for the ankurm.com guide. Everything was compiled and
executed on java 25.0.3+9-LTS-195 (AMD Ryzen 5 5600U, Windows 11); every file
under results/ is unedited program output.

Code
  latency/    open-loop latency harness that measures from intended arrival, so
              coordinated omission is accounted for rather than hidden. Reports
              response time and service time side by side; the gap reached 2910x
              on G1.
  jmh/        four microbenchmarks isolating one mechanism each: TLAB allocation,
              the ZGC load barrier (with a primitive-load control), the write
              barrier (with null / old-to-old / primitive controls), and promotion
              pressure.
  tuning/     provokes ZGC allocation stalls and reads its own JFR recording back,
              grouped by page class. jdk.ZAllocationStall is enabled without a
              threshold, because the 10 ms default hides most stalls.
  internals/  ZGC page classes vs G1 humongous, read from the live VM via
              HotSpotDiagnosticMXBean and jdk.ZPageAllocation events.
  analysis/   unified GC log parser that keeps stop-the-world pauses and
              concurrent phases in separate buckets.
  env/        environment capture; proves generational mode from JMX bean names.

Docs
  Eight chapters covering the JEP 439/474/490 timeline, colored pointers and both
  barriers, allocation stalls, a full flag reference, logging and JFR, benchmark
  methodology, corner cases, and a decision procedure.

Headline result (60 s, 20k req/s, 2 GB heap, ~585 MB live)
  p50               ZGC 0.006 ms   G1 0.005 ms
  p99.9             ZGC 1.437 ms   G1 95.169 ms
  total STW time    ZGC 1.503 ms   G1 1,139.624 ms
This commit is contained in:
2026-07-31 08:47:16 +05:30
commit e189da79ba
45 changed files with 12572 additions and 0 deletions

34
results/01-env-g1.txt Normal file
View File

@@ -0,0 +1,34 @@
=== Runtime ===
java.version : 25.0.3
java.vm.name : Java HotSpot(TM) 64-Bit Server VM
java.vm.version : 25.0.3+9-LTS-195
java.vendor : Oracle Corporation
os.name / os.arch : Windows 11 / amd64
availableProcessors : 12
maxMemory (-Xmx) : 2,147,483,648 bytes (2048 MB)
totalMemory (now) : 2,147,483,648 bytes (2048 MB)
=== Collector in use ===
bean: G1 Young Generation count=0 timeMs=0
bean: G1 Concurrent GC count=0 timeMs=0
bean: G1 Old Generation count=0 timeMs=0
generational? : yes (separate young + old cycles reported)
=== Memory pools ===
CodeHeap 'non-nmethods' type=Non-heap memory max=5,832,704 bytes (6 MB)
Metaspace type=Non-heap memory max=unbounded
CodeHeap 'profiled nmethods' type=Non-heap memory max=122,880,000 bytes (117 MB)
Compressed Class Space type=Non-heap memory max=1,073,741,824 bytes (1024 MB)
G1 Eden Space type=Heap memory max=unbounded
G1 Old Gen type=Heap memory max=2,147,483,648 bytes (2048 MB)
G1 Survivor Space type=Heap memory max=unbounded
CodeHeap 'non-profiled nmethods' type=Non-heap memory max=122,945,536 bytes (117 MB)
=== JVM arguments actually in effect ===
-XX:+UseG1GC
-Xms2g
-Xmx2g
--add-modules=ALL-DEFAULT
Tip: dump every ergonomic value the JVM chose with
java -XX:+UseZGC -Xms2g -Xmx2g -XX:+PrintFlagsFinal -version

34
results/01-env-zgc.txt Normal file
View File

@@ -0,0 +1,34 @@
=== Runtime ===
java.version : 25.0.3
java.vm.name : Java HotSpot(TM) 64-Bit Server VM
java.vm.version : 25.0.3+9-LTS-195
java.vendor : Oracle Corporation
os.name / os.arch : Windows 11 / amd64
availableProcessors : 12
maxMemory (-Xmx) : 2,147,483,648 bytes (2048 MB)
totalMemory (now) : 2,147,483,648 bytes (2048 MB)
=== Collector in use ===
bean: ZGC Minor Cycles count=0 timeMs=0
bean: ZGC Minor Pauses count=0 timeMs=0
bean: ZGC Major Cycles count=0 timeMs=0
bean: ZGC Major Pauses count=0 timeMs=0
generational? : yes (separate young + old cycles reported)
=== Memory pools ===
CodeHeap 'non-nmethods' type=Non-heap memory max=5,832,704 bytes (6 MB)
Metaspace type=Non-heap memory max=unbounded
CodeHeap 'profiled nmethods' type=Non-heap memory max=122,880,000 bytes (117 MB)
Compressed Class Space type=Non-heap memory max=1,073,741,824 bytes (1024 MB)
ZGC Old Generation type=Heap memory max=2,147,483,648 bytes (2048 MB)
ZGC Young Generation type=Heap memory max=2,147,483,648 bytes (2048 MB)
CodeHeap 'non-profiled nmethods' type=Non-heap memory max=122,945,536 bytes (117 MB)
=== JVM arguments actually in effect ===
-XX:+UseZGC
-Xms2g
-Xmx2g
--add-modules=ALL-DEFAULT
Tip: dump every ergonomic value the JVM chose with
java -XX:+UseZGC -Xms2g -Xmx2g -XX:+PrintFlagsFinal -version

513
results/02-flags-g1.txt Normal file
View File

@@ -0,0 +1,513 @@
[Global flags]
ccstr AOTCache = {product} {default}
ccstr AOTCacheOutput = {product} {default}
bool AOTClassLinking = false {product} {default}
ccstr AOTConfiguration = {product} {default}
ccstr AOTMode = {product} {default}
int ActiveProcessorCount = -1 {product} {default}
uintx AdaptiveSizeDecrementScaleFactor = 4 {product} {default}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product} {default}
uintx AdaptiveSizePolicyInitializingSteps = 20 {product} {default}
uintx AdaptiveSizePolicyOutputInterval = 0 {product} {default}
uint AdaptiveSizePolicyWeight = 10 {product} {default}
uint AdaptiveSizeThroughPutPolicy = 0 {product} {default}
uint AdaptiveTimeWeight = 25 {product} {default}
bool AggressiveHeap = false {product} {default}
bool AlignVector = false {C2 product} {default}
ccstr AllocateHeapAt = {product} {default}
int AllocateInstancePrefetchLines = 1 {product} {default}
int AllocatePrefetchDistance = 256 {product} {default}
intx AllocatePrefetchInstr = 0 {product} {default}
int AllocatePrefetchLines = 3 {product} {default}
int AllocatePrefetchStepSize = 64 {product} {default}
int AllocatePrefetchStyle = 1 {product} {default}
bool AllowParallelDefineClass = false {product} {default}
bool AllowRedefinitionToAddDeleteMethods = false {product} {default}
bool AllowUserSignalHandlers = false {product} {default}
bool AllowVectorizeOnDemand = true {C2 product} {default}
bool AlwaysActAsServerClassMachine = false {product} {default}
bool AlwaysCompileLoopMethods = false {product} {default}
bool AlwaysPreTouch = false {product} {default}
bool AlwaysRestoreFPU = false {product} {default}
bool AlwaysTenure = false {product} {default}
ccstr ArchiveClassesAtExit = {product} {default}
intx ArrayCopyLoadStoreMaxElem = 8 {C2 product} {default}
size_t AsyncLogBufferSize = 2097152 {product} {default}
intx AutoBoxCacheMax = 128 {C2 product} {default}
bool AutoCreateSharedArchive = false {product} {default}
intx BCEATraceLevel = 0 {product} {default}
bool BackgroundCompilation = true {pd product} {default}
bool BlockLayoutByFrequency = true {C2 product} {default}
intx BlockLayoutMinDiamondPercentage = 20 {C2 product} {default}
bool BlockLayoutRotateLoops = true {C2 product} {default}
intx C1InlineStackLimit = 5 {C1 product} {default}
intx C1MaxInlineLevel = 9 {C1 product} {default}
intx C1MaxInlineSize = 35 {C1 product} {default}
intx C1MaxRecursiveInlineLevel = 1 {C1 product} {default}
intx C1MaxTrivialSize = 6 {C1 product} {default}
bool C1OptimizeVirtualCallProfiling = true {C1 product} {default}
bool C1ProfileBranches = true {C1 product} {default}
bool C1ProfileCalls = true {C1 product} {default}
bool C1ProfileCheckcasts = true {C1 product} {default}
bool C1ProfileInlinedCalls = true {C1 product} {default}
bool C1ProfileVirtualCalls = true {C1 product} {default}
bool C1UpdateMethodData = true {C1 product} {default}
intx CICompilerCount = 4 {product} {ergonomic}
bool CICompilerCountPerCPU = true {product} {default}
bool CITime = false {product} {default}
bool CheckJNICalls = false {product} {default}
bool ClassUnloading = true {product} {default}
bool ClassUnloadingWithConcurrentMark = true {product} {default}
bool ClipInlining = true {product} {default}
uintx CodeCacheExpansionSize = 65536 {pd product} {default}
bool CompactStrings = true {pd product} {default}
ccstr CompilationMode = default {product} {default}
ccstrlist CompileCommand = {product} {default}
ccstr CompileCommandFile = {product} {default}
ccstrlist CompileOnly = {product} {default}
intx CompileThreshold = 10000 {pd product} {default}
double CompileThresholdScaling = 1.000000 {product} {default}
int CompilerThreadPriority = -1 {product} {default}
intx CompilerThreadStackSize = 0 {pd product} {default}
size_t CompressedClassSpaceSize = 1073741824 {product} {default}
uint ConcGCThreads = 3 {product} {ergonomic}
intx ConditionalMoveLimit = 3 {C2 pd product} {default}
int ContendedPaddingWidth = 128 {product} {default}
bool CrashOnOutOfMemoryError = false {product} {default}
bool CreateCoredumpOnCrash = true {product} {default}
bool DTraceAllocProbes = false {product} {default}
bool DTraceMethodProbes = false {product} {default}
bool DTraceMonitorProbes = false {product} {default}
bool DisableAttachMechanism = false {product} {default}
bool DisableExplicitGC = false {product} {default}
bool DisplayVMOutputToStderr = false {product} {default}
bool DisplayVMOutputToStdout = false {product} {default}
bool DoEscapeAnalysis = true {C2 product} {default}
bool DontCompileHugeMethods = true {product} {default}
ccstr DumpLoadedClassList = {product} {default}
bool DumpReplayDataOnError = true {product} {default}
bool EagerXrunInit = false {product} {default}
intx EliminateAllocationArraySizeLimit = 64 {C2 product} {default}
bool EliminateAllocations = true {C2 product} {default}
bool EliminateAutoBox = true {C2 product} {default}
bool EliminateLocks = true {C2 product} {default}
bool EliminateNestedLocks = true {C2 product} {default}
bool EnableAllLargePageSizesForWindows = false {product} {default}
bool EnableContended = true {product} {default}
bool EnableDynamicAgentLoading = true {product} {default}
size_t ErgoHeapSizeLimit = 0 {product} {default}
ccstr ErrorFile = {product} {default}
bool ErrorFileToStderr = false {product} {default}
bool ErrorFileToStdout = false {product} {default}
uint64_t ErrorLogTimeout = 120 {product} {default}
double EscapeAnalysisTimeout = 20.000000 {C2 product} {default}
bool EstimateArgEscape = true {product} {default}
bool ExecutingUnitTests = false {product} {default}
bool ExitOnOutOfMemoryError = false {product} {default}
bool ExplicitGCInvokesConcurrent = false {product} {default}
bool ExtensiveErrorReports = false {product} {default}
ccstr ExtraSharedClassListFile = {product} {default}
bool FlightRecorder = false {product} {default}
ccstr FlightRecorderOptions = {product} {default}
bool ForceTimeHighResolution = false {product} {default}
intx FreqInlineSize = 325 {C2 pd product} {default}
uint FullGCHeapDumpLimit = 0 {manageable} {default}
double G1ConcMarkStepDurationMillis = 10.000000 {product} {default}
uint G1ConcRefinementThreads = 10 {product} {ergonomic}
uint G1ConfidencePercent = 50 {product} {default}
size_t G1HeapRegionSize = 1048576 {product} {ergonomic}
uint G1HeapWastePercent = 5 {product} {default}
uintx G1MixedGCCountTarget = 8 {product} {default}
uintx G1PeriodicGCInterval = 0 {manageable} {default}
bool G1PeriodicGCInvokesConcurrent = true {product} {default}
double G1PeriodicGCSystemLoadThreshold = 0.000000 {manageable} {default}
uint G1RSetUpdatingPauseTimePercent = 10 {product} {default}
uint G1RefProcDrainInterval = 1000 {product} {default}
uint G1ReservePercent = 10 {product} {default}
uint G1SATBBufferEnqueueingThresholdPercent = 60 {product} {default}
size_t G1SATBBufferSize = 1024 {product} {default}
size_t G1UpdateBufferSize = 256 {product} {default}
bool G1UseAdaptiveIHOP = true {product} {default}
uint GCCardSizeInBytes = 512 {product} {default}
uint GCDrainStackTargetSize = 64 {product} {default}
uint GCHeapFreeLimit = 2 {product} {default}
uintx GCPauseIntervalMillis = 201 {product} {default}
uint GCTimeLimit = 98 {product} {default}
uint GCTimeRatio = 12 {product} {default}
size_t HeapBaseMinAddress = 2147483648 {pd product} {default}
bool HeapDumpAfterFullGC = false {manageable} {default}
bool HeapDumpBeforeFullGC = false {manageable} {default}
int HeapDumpGzipLevel = 0 {manageable} {default}
bool HeapDumpOnOutOfMemoryError = false {manageable} {default}
ccstr HeapDumpPath = {manageable} {default}
uintx HeapMaximumCompactionInterval = 20 {product} {default}
uintx HeapSearchSteps = 3 {product} {default}
size_t HeapSizePerGCThread = 43620760 {product} {default}
bool IgnoreEmptyClassPaths = false {product} {default}
bool IgnoreUnrecognizedVMOptions = false {product} {default}
uintx IncreaseFirstTierCompileThresholdAt = 50 {product} {default}
bool IncrementalInline = true {C2 product} {default}
uintx InitialCodeCacheSize = 2555904 {pd product} {default}
size_t InitialHeapSize = 2147483648 {product} {command line}
double InitialRAMPercentage = 1.562500 {product} {default}
uintx InitialSurvivorRatio = 8 {product} {default}
uint InitialTenuringThreshold = 7 {product} {default}
uint InitiatingHeapOccupancyPercent = 45 {product} {default}
bool Inline = true {product} {default}
ccstr InlineDataFile = {product} {default}
intx InlineSmallCode = 2500 {C2 pd product} {default}
bool InlineSynchronizedMethods = true {C1 product} {default}
intx InteriorEntryAlignment = 16 {C2 pd product} {default}
intx InterpreterProfilePercentage = 33 {product} {default}
bool JavaMonitorsInStackTrace = true {product} {default}
int JavaPriority10_To_OSPriority = -1 {product} {default}
int JavaPriority1_To_OSPriority = -1 {product} {default}
int JavaPriority2_To_OSPriority = -1 {product} {default}
int JavaPriority3_To_OSPriority = -1 {product} {default}
int JavaPriority4_To_OSPriority = -1 {product} {default}
int JavaPriority5_To_OSPriority = -1 {product} {default}
int JavaPriority6_To_OSPriority = -1 {product} {default}
int JavaPriority7_To_OSPriority = -1 {product} {default}
int JavaPriority8_To_OSPriority = -1 {product} {default}
int JavaPriority9_To_OSPriority = -1 {product} {default}
size_t LargePageHeapSizeThreshold = 134217728 {product} {default}
size_t LargePageSizeInBytes = 0 {product} {default}
intx LiveNodeCountInliningCutoff = 40000 {C2 product} {default}
int LockingMode = 2 {product} {default}
ccstr LogClassLoadingCauseFor = {product} {default}
intx LoopMaxUnroll = 16 {C2 product} {default}
intx LoopOptsCount = 43 {C2 product} {default}
intx LoopPercentProfileLimit = 10 {C2 pd product} {default}
uintx LoopStripMiningIter = 1000 {C2 product} {default}
uintx LoopStripMiningIterShortLoop = 100 {C2 product} {default}
intx LoopUnrollLimit = 60 {C2 pd product} {default}
intx LoopUnrollMin = 4 {C2 product} {default}
bool LoopUnswitching = true {C2 product} {default}
bool ManagementServer = false {product} {default}
size_t MarkStackSize = 4194304 {product} {ergonomic}
size_t MarkStackSizeMax = 536870912 {product} {ergonomic}
uint MarkSweepAlwaysCompactCount = 4 {product} {default}
uint MarkSweepDeadRatio = 5 {product} {default}
intx MaxBCEAEstimateLevel = 5 {product} {default}
intx MaxBCEAEstimateSize = 150 {product} {default}
uint64_t MaxDirectMemorySize = 0 {product} {default}
bool MaxFDLimit = true {product} {default}
uintx MaxGCPauseMillis = 200 {product} {default}
uintx MaxHeapFreeRatio = 70 {manageable} {default}
size_t MaxHeapSize = 2147483648 {product} {command line}
intx MaxInlineLevel = 15 {C2 product} {default}
intx MaxInlineSize = 35 {C2 product} {default}
intx MaxJNILocalCapacity = 65536 {product} {default}
int MaxJavaStackTraceDepth = 1024 {product} {default}
intx MaxJumpTableSize = 65000 {C2 product} {default}
intx MaxJumpTableSparseness = 5 {C2 product} {default}
intx MaxLabelRootDepth = 1100 {C2 product} {default}
intx MaxLoopPad = 15 {C2 product} {default}
size_t MaxMetaspaceExpansion = 5439488 {product} {default}
uint MaxMetaspaceFreeRatio = 70 {product} {default}
size_t MaxMetaspaceSize = 18446744073709551615 {product} {default}
size_t MaxNewSize = 1287651328 {product} {ergonomic}
intx MaxNodeLimit = 80000 {C2 product} {default}
uint64_t MaxRAM = 137438953472 {pd product} {default}
double MaxRAMPercentage = 25.000000 {product} {default}
intx MaxRecursiveInlineLevel = 1 {C2 product} {default}
uint MaxTenuringThreshold = 15 {product} {default}
intx MaxTrivialSize = 6 {C2 product} {default}
intx MaxVectorSize = 32 {C2 product} {default}
size_t MetaspaceSize = 22020096 {product} {default}
bool MethodFlushing = true {product} {default}
size_t MinHeapDeltaBytes = 1048576 {product} {ergonomic}
uintx MinHeapFreeRatio = 40 {manageable} {default}
size_t MinHeapSize = 2147483648 {product} {command line}
intx MinJumpTableSize = 10 {C2 pd product} {default}
size_t MinMetaspaceExpansion = 327680 {product} {default}
uint MinMetaspaceFreeRatio = 40 {product} {default}
double MinRAMPercentage = 50.000000 {product} {default}
uintx MinSurvivorRatio = 3 {product} {default}
size_t MinTLABSize = 2048 {product} {default}
intx MultiArrayExpandLimit = 6 {C2 product} {default}
uintx NUMAChunkResizeWeight = 20 {product} {default}
size_t NUMAInterleaveGranularity = 2097152 {product} {default}
size_t NUMASpaceResizeRate = 1073741824 {product} {default}
bool NUMAStats = false {product} {default}
ccstr NativeMemoryTracking = off {product} {default}
bool NeverActAsServerClassMachine = false {pd product} {default}
bool NeverTenure = false {product} {default}
uintx NewRatio = 2 {product} {default}
size_t NewSize = 1363144 {product} {default}
size_t NewSizeThreadIncrease = 5320 {pd product} {default}
intx NmethodSweepActivity = 4 {product} {default}
intx NodeLimitFudgeFactor = 2000 {C2 product} {default}
uintx NonNMethodCodeHeapSize = 5832704 {pd product} {ergonomic}
uintx NonProfiledCodeHeapSize = 122945536 {pd product} {ergonomic}
intx NumberOfLoopInstrToAlign = 4 {C2 product} {default}
int ObjectAlignmentInBytes = 8 {product lp64_product} {default}
size_t OldPLABSize = 1024 {product} {default}
bool OmitStackTraceInFastThrow = true {product} {default}
ccstrlist OnError = {product} {default}
ccstrlist OnOutOfMemoryError = {product} {default}
intx OnStackReplacePercentage = 140 {pd product} {default}
bool OptimizeFill = false {C2 product} {default}
bool OptimizePtrCompare = true {C2 product} {default}
bool OptimizeStringConcat = true {C2 product} {default}
bool OptoBundling = false {C2 pd product} {default}
intx OptoLoopAlignment = 16 {pd product} {default}
bool OptoRegScheduling = true {C2 pd product} {default}
bool OptoScheduling = false {C2 pd product} {default}
uint PLABWeight = 75 {product} {default}
bool PSChunkLargeArrays = true {product} {default}
int ParGCArrayScanChunk = 50 {product} {default}
uint ParallelGCBufferWastePct = 10 {product} {default}
uint ParallelGCThreads = 10 {product} {default}
bool ParallelRefProcBalancingEnabled = true {product} {default}
bool ParallelRefProcEnabled = true {product} {default}
bool PartialPeelAtUnsignedTests = true {C2 product} {default}
bool PartialPeelLoop = true {C2 product} {default}
intx PartialPeelNewPhiDelta = 0 {C2 product} {default}
uint PausePadding = 1 {product} {default}
intx PerBytecodeRecompilationCutoff = 200 {product} {default}
intx PerBytecodeTrapLimit = 4 {product} {default}
intx PerMethodRecompilationCutoff = 400 {product} {default}
intx PerMethodTrapLimit = 100 {product} {default}
bool PerfAllowAtExitRegistration = false {product} {default}
bool PerfBypassFileSystemCheck = false {product} {default}
int PerfDataMemorySize = 32768 {product} {default}
ccstr PerfDataSaveFile = {product} {default}
bool PerfDataSaveToFile = false {product} {default}
bool PerfDisableSharedMem = false {product} {default}
int PerfMaxStringConstLength = 1024 {product} {default}
size_t PreTouchParallelChunkSize = 1073741824 {pd product} {default}
bool PreferInterpreterNativeStubs = false {pd product} {default}
intx PrefetchCopyIntervalInBytes = 576 {product} {default}
intx PrefetchScanIntervalInBytes = 576 {product} {default}
bool PreserveFramePointer = false {pd product} {default}
size_t PretenureSizeThreshold = 0 {product} {default}
bool PrintClassHistogram = false {manageable} {default}
bool PrintCodeCache = false {product} {default}
bool PrintCodeCacheOnCompilation = false {product} {default}
bool PrintCommandLineFlags = false {product} {default}
bool PrintCompilation = false {product} {default}
bool PrintConcurrentLocks = false {manageable} {default}
bool PrintExtendedThreadInfo = false {product} {default}
bool PrintFlagsFinal = true {product} {command line}
bool PrintFlagsInitial = false {product} {default}
bool PrintFlagsRanges = false {product} {default}
bool PrintGC = false {product} {default}
bool PrintGCDetails = false {product} {default}
bool PrintHeapAtSIGBREAK = true {product} {default}
bool PrintSharedArchiveAndExit = false {product} {default}
bool PrintStringTableStatistics = false {product} {default}
bool PrintTieredEvents = false {product} {default}
bool PrintVMOptions = false {product} {default}
bool PrintWarnings = true {product} {default}
bool ProfileExceptionHandlers = true {product} {default}
bool ProfileInterpreter = true {pd product} {default}
intx ProfileMaturityPercentage = 20 {product} {default}
uintx ProfiledCodeHeapSize = 122880000 {pd product} {ergonomic}
uint PromotedPadding = 3 {product} {default}
uintx QueuedAllocationWarningCount = 0 {product} {default}
bool RangeCheckElimination = true {product} {default}
bool ReassociateInvariants = true {C2 product} {default}
bool RecordDynamicDumpInfo = false {product} {default}
bool ReduceBulkZeroing = true {C2 product} {default}
bool ReduceFieldZeroing = true {C2 product} {default}
bool ReduceInitialCardMarks = true {C2 product} {default}
bool ReduceSignalUsage = false {product} {default}
bool RelaxAccessControlCheck = false {product} {default}
ccstr ReplayDataFile = {product} {default}
uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic}
bool ResizePLAB = true {product} {default}
bool ResizeTLAB = true {product} {default}
bool RestoreMXCSROnJNICalls = false {product} {default}
bool RestrictContended = true {product} {default}
bool RestrictReservedStack = true {product} {default}
bool RewriteBytecodes = true {pd product} {default}
bool RewriteFrequentPairs = true {pd product} {default}
bool SafepointTimeout = false {product} {default}
double SafepointTimeoutDelay = 10000.000000 {product} {default}
bool SegmentedCodeCache = true {product} {ergonomic}
double SelfDestructTimer = 0.000000 {product} {default}
ccstr SharedArchiveConfigFile = {product} {default}
ccstr SharedArchiveFile = {product} {default}
size_t SharedBaseAddress = 100663296 {product} {default}
ccstr SharedClassListFile = {product} {default}
uint SharedSymbolTableBucketSize = 4 {product} {default}
bool ShowCodeDetailsInExceptionMessages = true {manageable} {default}
bool ShowMessageBoxOnError = false {product} {default}
bool ShrinkHeapInSteps = true {product} {default}
size_t SoftMaxHeapSize = 2147483648 {manageable} {ergonomic}
intx SoftRefLRUPolicyMSPerMB = 1000 {product} {default}
bool SplitIfBlocks = true {C2 product} {default}
intx StackRedPages = 1 {pd product} {default}
intx StackReservedPages = 0 {pd product} {default}
intx StackShadowPages = 8 {pd product} {default}
bool StackTraceInThrowable = true {product} {default}
intx StackYellowPages = 3 {pd product} {default}
uintx StartAggressiveSweepingAt = 10 {product} {default}
bool StartAttachListener = false {product} {default}
ccstr StartFlightRecording = {product} {default}
uint StringDeduplicationAgeThreshold = 3 {product} {default}
uintx StringTableSize = 65536 {product} {default}
bool SuperWordLoopUnrollAnalysis = true {C2 pd product} {default}
bool SuperWordReductions = true {C2 product} {default}
bool SuppressFatalErrorMessage = false {product} {default}
uint SurvivorPadding = 3 {product} {default}
uintx SurvivorRatio = 8 {product} {default}
double SweeperThreshold = 15.000000 {product} {default}
uintx TLABAllocationWeight = 35 {product} {default}
uintx TLABRefillWasteFraction = 64 {product} {default}
size_t TLABSize = 0 {product} {default}
uintx TLABWasteIncrement = 4 {product} {default}
uintx TLABWasteTargetPercent = 1 {product} {default}
uint TargetPLABWastePct = 10 {product} {default}
uint TargetSurvivorRatio = 50 {product} {default}
uint TenuredGenerationSizeIncrement = 20 {product} {default}
uint TenuredGenerationSizeSupplement = 80 {product} {default}
uintx TenuredGenerationSizeSupplementDecay = 2 {product} {default}
int ThreadPriorityPolicy = 0 {product} {default}
bool ThreadPriorityVerbose = false {product} {default}
intx ThreadStackSize = 0 {pd product} {default}
uint ThresholdTolerance = 10 {product} {default}
intx Tier0BackedgeNotifyFreqLog = 10 {product} {default}
intx Tier0InvokeNotifyFreqLog = 7 {product} {default}
intx Tier0ProfilingStartPercentage = 200 {product} {default}
intx Tier23InlineeNotifyFreqLog = 20 {product} {default}
intx Tier2BackEdgeThreshold = 0 {product} {default}
intx Tier2BackedgeNotifyFreqLog = 14 {product} {default}
intx Tier2CompileThreshold = 0 {product} {default}
intx Tier2InvokeNotifyFreqLog = 11 {product} {default}
intx Tier3BackEdgeThreshold = 60000 {product} {default}
intx Tier3BackedgeNotifyFreqLog = 13 {product} {default}
intx Tier3CompileThreshold = 2000 {product} {default}
intx Tier3DelayOff = 2 {product} {default}
intx Tier3DelayOn = 5 {product} {default}
intx Tier3InvocationThreshold = 200 {product} {default}
intx Tier3InvokeNotifyFreqLog = 10 {product} {default}
intx Tier3LoadFeedback = 5 {product} {default}
intx Tier3MinInvocationThreshold = 100 {product} {default}
intx Tier4BackEdgeThreshold = 40000 {product} {default}
intx Tier4CompileThreshold = 15000 {product} {default}
intx Tier4InvocationThreshold = 5000 {product} {default}
intx Tier4LoadFeedback = 3 {product} {default}
intx Tier4MinInvocationThreshold = 600 {product} {default}
bool TieredCompilation = true {pd product} {default}
intx TieredCompileTaskTimeout = 50 {product} {default}
intx TieredRateUpdateMaxTime = 25 {product} {default}
intx TieredRateUpdateMinTime = 1 {product} {default}
intx TieredStopAtLevel = 4 {product} {default}
ccstr TraceJVMTI = {product} {default}
intx TrackedInitializationLimit = 50 {C2 product} {default}
bool TrapBasedNullChecks = false {pd product} {default}
bool TrapBasedRangeChecks = false {C2 pd product} {default}
uint TrimNativeHeapInterval = 0 {product} {default}
int TypeProfileArgsLimit = 2 {product} {default}
uint TypeProfileLevel = 111 {pd product} {default}
intx TypeProfileMajorReceiverPercent = 90 {C2 product} {default}
int TypeProfileParmsLimit = 2 {product} {default}
intx TypeProfileSubTypeCheckCommonThreshold = 50 {C2 product} {default}
intx TypeProfileWidth = 2 {product} {default}
int UnguardOnExecutionViolation = 0 {product} {default}
bool UseAES = true {product} {default}
int UseAVX = 2 {ARCH product} {default}
bool UseAdaptiveGenerationSizePolicyAtMajorCollection = true {product} {default}
bool UseAdaptiveGenerationSizePolicyAtMinorCollection = true {product} {default}
bool UseAdaptiveNUMAChunkSizing = true {product} {default}
bool UseAdaptiveSizeDecayMajorGCCost = true {product} {default}
bool UseAdaptiveSizePolicy = true {product} {default}
bool UseAdaptiveSizePolicyFootprintGoal = true {product} {default}
bool UseAdaptiveSizePolicyWithSystemGC = false {product} {default}
bool UseAddressNop = true {ARCH product} {default}
bool UseAllWindowsProcessorGroups = false {product} {default}
bool UseBASE64Intrinsics = true {product} {default}
bool UseBMI1Instructions = true {ARCH product} {default}
bool UseBMI2Instructions = true {ARCH product} {default}
bool UseBimorphicInlining = true {C2 product} {default}
bool UseCLMUL = true {ARCH product} {default}
bool UseCMoveUnconditionally = false {C2 product} {default}
bool UseCodeCacheFlushing = true {product} {default}
bool UseCompactObjectHeaders = false {product lp64_product} {default}
bool UseCompiler = true {product} {default}
bool UseCompressedClassPointers = true {product lp64_product} {default}
bool UseCompressedOops = true {product lp64_product} {ergonomic}
bool UseCondCardMark = false {product} {default}
bool UseCountLeadingZerosInstruction = true {ARCH product} {default}
bool UseCountTrailingZerosInstruction = true {ARCH product} {default}
bool UseCountedLoopSafepoints = true {C2 product} {default}
bool UseDivMod = true {C2 product} {default}
bool UseDynamicNumberOfCompilerThreads = true {product} {default}
bool UseDynamicNumberOfGCThreads = true {product} {default}
bool UseFMA = true {product} {default}
bool UseFPUForSpilling = true {C2 product} {default}
bool UseFastJNIAccessors = true {product} {default}
bool UseFastStosb = false {ARCH product} {default}
bool UseG1GC = true {product} {command line}
bool UseGCOverheadLimit = true {product} {default}
bool UseInlineCaches = true {product} {default}
bool UseInterpreter = true {product} {default}
bool UseJumpTables = true {C2 product} {default}
bool UseLargePages = false {pd product} {default}
bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic}
bool UseLoopCounter = true {product} {default}
bool UseLoopInvariantCodeMotion = true {C1 product} {default}
bool UseLoopPredicate = true {C2 product} {default}
bool UseMaximumCompactionOnSystemGC = true {product} {default}
bool UseNUMA = false {product} {default}
bool UseNUMAInterleaving = false {product} {default}
bool UseNewLongLShift = true {ARCH product} {default}
bool UseOSErrorReporting = false {product} {default}
bool UseOnStackReplacement = true {pd product} {default}
bool UseOnlyInlinedBimorphic = true {C2 product} {default}
bool UsePSAdaptiveSurvivorSizePolicy = true {product} {default}
bool UseParallelGC = false {product} {default}
bool UsePerfData = true {product} {default}
bool UsePopCountInstruction = true {product} {default}
bool UseProfiledLoopPredicate = true {C2 product} {default}
bool UseSHA = true {product} {default}
int UseSSE = 4 {ARCH product} {default}
bool UseSSE42Intrinsics = true {ARCH product} {default}
bool UseSerialGC = false {product} {default}
bool UseShenandoahGC = false {product} {default}
bool UseSignalChaining = true {product} {default}
bool UseStoreImmI16 = true {ARCH product} {default}
bool UseStringDeduplication = false {product} {default}
bool UseSubwordForMaxVector = true {C2 product} {default}
bool UseSuperWord = true {C2 product} {default}
bool UseSystemMemoryBarrier = false {product} {default}
bool UseTLAB = true {product} {default}
bool UseThreadPriorities = true {pd product} {default}
bool UseTypeProfile = true {product} {default}
bool UseTypeSpeculation = true {C2 product} {default}
bool UseUnalignedLoadStores = true {ARCH product} {default}
bool UseVectorCmov = false {C2 product} {default}
bool UseXMMForArrayCopy = true {product} {default}
bool UseXMMForObjInit = true {ARCH product} {default}
bool UseXmmI2D = true {ARCH product} {default}
bool UseXmmI2F = true {ARCH product} {default}
bool UseXmmLoadAndClearUpper = true {ARCH product} {default}
bool UseXmmRegToRegMoveAll = true {ARCH product} {default}
bool UseZGC = false {product} {default}
intx UserThreadWaitAttemptsAtExit = 30 {product} {default}
int VMThreadPriority = -1 {product} {default}
intx VMThreadStackSize = 0 {pd product} {default}
intx ValueMapInitialSize = 11 {C1 product} {default}
intx ValueMapMaxLoopSize = 8 {C1 product} {default}
intx ValueSearchLimit = 1000 {C2 product} {default}
bool VerifySharedSpaces = false {product} {default}
uint YoungGenerationSizeIncrement = 20 {product} {default}
uint YoungGenerationSizeSupplement = 80 {product} {default}
uintx YoungGenerationSizeSupplementDecay = 8 {product} {default}
size_t YoungPLABSize = 4096 {product} {default}
double ZAllocationSpikeTolerance = 2.000000 {product} {default}
double ZCollectionInterval = 0.000000 {product} {default}
double ZCollectionIntervalMajor = -1.000000 {product} {default}
double ZCollectionIntervalMinor = -1.000000 {product} {default}
bool ZCollectionIntervalOnly = false {product} {default}
double ZFragmentationLimit = 5.000000 {product} {default}
bool ZProactive = true {product} {default}
bool ZUncommit = true {product} {default}
uintx ZUncommitDelay = 300 {product} {default}
double ZYoungCompactionLimit = 25.000000 {product} {default}
bool ZeroTLAB = false {product} {default}
java version "25.0.3" 2026-04-21 LTS
Java(TM) SE Runtime Environment (build 25.0.3+9-LTS-195)
Java HotSpot(TM) 64-Bit Server VM (build 25.0.3+9-LTS-195, mixed mode, sharing)

513
results/02-flags-zgc.txt Normal file
View File

@@ -0,0 +1,513 @@
[Global flags]
ccstr AOTCache = {product} {default}
ccstr AOTCacheOutput = {product} {default}
bool AOTClassLinking = false {product} {default}
ccstr AOTConfiguration = {product} {default}
ccstr AOTMode = {product} {default}
int ActiveProcessorCount = -1 {product} {default}
uintx AdaptiveSizeDecrementScaleFactor = 4 {product} {default}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product} {default}
uintx AdaptiveSizePolicyInitializingSteps = 20 {product} {default}
uintx AdaptiveSizePolicyOutputInterval = 0 {product} {default}
uint AdaptiveSizePolicyWeight = 10 {product} {default}
uint AdaptiveSizeThroughPutPolicy = 0 {product} {default}
uint AdaptiveTimeWeight = 25 {product} {default}
bool AggressiveHeap = false {product} {default}
bool AlignVector = false {C2 product} {default}
ccstr AllocateHeapAt = {product} {default}
int AllocateInstancePrefetchLines = 1 {product} {default}
int AllocatePrefetchDistance = 256 {product} {default}
intx AllocatePrefetchInstr = 0 {product} {default}
int AllocatePrefetchLines = 3 {product} {default}
int AllocatePrefetchStepSize = 64 {product} {default}
int AllocatePrefetchStyle = 1 {product} {default}
bool AllowParallelDefineClass = false {product} {default}
bool AllowRedefinitionToAddDeleteMethods = false {product} {default}
bool AllowUserSignalHandlers = false {product} {default}
bool AllowVectorizeOnDemand = true {C2 product} {default}
bool AlwaysActAsServerClassMachine = false {product} {default}
bool AlwaysCompileLoopMethods = false {product} {default}
bool AlwaysPreTouch = false {product} {default}
bool AlwaysRestoreFPU = false {product} {default}
bool AlwaysTenure = false {product} {default}
ccstr ArchiveClassesAtExit = {product} {default}
intx ArrayCopyLoadStoreMaxElem = 8 {C2 product} {default}
size_t AsyncLogBufferSize = 2097152 {product} {default}
intx AutoBoxCacheMax = 128 {C2 product} {default}
bool AutoCreateSharedArchive = false {product} {default}
intx BCEATraceLevel = 0 {product} {default}
bool BackgroundCompilation = true {pd product} {default}
bool BlockLayoutByFrequency = true {C2 product} {default}
intx BlockLayoutMinDiamondPercentage = 20 {C2 product} {default}
bool BlockLayoutRotateLoops = true {C2 product} {default}
intx C1InlineStackLimit = 5 {C1 product} {default}
intx C1MaxInlineLevel = 9 {C1 product} {default}
intx C1MaxInlineSize = 35 {C1 product} {default}
intx C1MaxRecursiveInlineLevel = 1 {C1 product} {default}
intx C1MaxTrivialSize = 6 {C1 product} {default}
bool C1OptimizeVirtualCallProfiling = true {C1 product} {default}
bool C1ProfileBranches = true {C1 product} {default}
bool C1ProfileCalls = true {C1 product} {default}
bool C1ProfileCheckcasts = true {C1 product} {default}
bool C1ProfileInlinedCalls = true {C1 product} {default}
bool C1ProfileVirtualCalls = true {C1 product} {default}
bool C1UpdateMethodData = true {C1 product} {default}
intx CICompilerCount = 4 {product} {ergonomic}
bool CICompilerCountPerCPU = true {product} {default}
bool CITime = false {product} {default}
bool CheckJNICalls = false {product} {default}
bool ClassUnloading = true {product} {default}
bool ClassUnloadingWithConcurrentMark = true {product} {default}
bool ClipInlining = true {product} {default}
uintx CodeCacheExpansionSize = 65536 {pd product} {default}
bool CompactStrings = true {pd product} {default}
ccstr CompilationMode = default {product} {default}
ccstrlist CompileCommand = {product} {default}
ccstr CompileCommandFile = {product} {default}
ccstrlist CompileOnly = {product} {default}
intx CompileThreshold = 10000 {pd product} {default}
double CompileThresholdScaling = 1.000000 {product} {default}
int CompilerThreadPriority = -1 {product} {default}
intx CompilerThreadStackSize = 0 {pd product} {default}
size_t CompressedClassSpaceSize = 1073741824 {product} {default}
uint ConcGCThreads = 3 {product} {default}
intx ConditionalMoveLimit = 3 {C2 pd product} {default}
int ContendedPaddingWidth = 128 {product} {default}
bool CrashOnOutOfMemoryError = false {product} {default}
bool CreateCoredumpOnCrash = true {product} {default}
bool DTraceAllocProbes = false {product} {default}
bool DTraceMethodProbes = false {product} {default}
bool DTraceMonitorProbes = false {product} {default}
bool DisableAttachMechanism = false {product} {default}
bool DisableExplicitGC = false {product} {default}
bool DisplayVMOutputToStderr = false {product} {default}
bool DisplayVMOutputToStdout = false {product} {default}
bool DoEscapeAnalysis = true {C2 product} {default}
bool DontCompileHugeMethods = true {product} {default}
ccstr DumpLoadedClassList = {product} {default}
bool DumpReplayDataOnError = true {product} {default}
bool EagerXrunInit = false {product} {default}
intx EliminateAllocationArraySizeLimit = 64 {C2 product} {default}
bool EliminateAllocations = true {C2 product} {default}
bool EliminateAutoBox = true {C2 product} {default}
bool EliminateLocks = true {C2 product} {default}
bool EliminateNestedLocks = true {C2 product} {default}
bool EnableAllLargePageSizesForWindows = false {product} {default}
bool EnableContended = true {product} {default}
bool EnableDynamicAgentLoading = true {product} {default}
size_t ErgoHeapSizeLimit = 0 {product} {default}
ccstr ErrorFile = {product} {default}
bool ErrorFileToStderr = false {product} {default}
bool ErrorFileToStdout = false {product} {default}
uint64_t ErrorLogTimeout = 120 {product} {default}
double EscapeAnalysisTimeout = 20.000000 {C2 product} {default}
bool EstimateArgEscape = true {product} {default}
bool ExecutingUnitTests = false {product} {default}
bool ExitOnOutOfMemoryError = false {product} {default}
bool ExplicitGCInvokesConcurrent = false {product} {default}
bool ExtensiveErrorReports = false {product} {default}
ccstr ExtraSharedClassListFile = {product} {default}
bool FlightRecorder = false {product} {default}
ccstr FlightRecorderOptions = {product} {default}
bool ForceTimeHighResolution = false {product} {default}
intx FreqInlineSize = 325 {C2 pd product} {default}
uint FullGCHeapDumpLimit = 0 {manageable} {default}
double G1ConcMarkStepDurationMillis = 10.000000 {product} {default}
uint G1ConcRefinementThreads = 0 {product} {default}
uint G1ConfidencePercent = 50 {product} {default}
size_t G1HeapRegionSize = 0 {product} {default}
uint G1HeapWastePercent = 5 {product} {default}
uintx G1MixedGCCountTarget = 8 {product} {default}
uintx G1PeriodicGCInterval = 0 {manageable} {default}
bool G1PeriodicGCInvokesConcurrent = true {product} {default}
double G1PeriodicGCSystemLoadThreshold = 0.000000 {manageable} {default}
uint G1RSetUpdatingPauseTimePercent = 10 {product} {default}
uint G1RefProcDrainInterval = 1000 {product} {default}
uint G1ReservePercent = 10 {product} {default}
uint G1SATBBufferEnqueueingThresholdPercent = 60 {product} {default}
size_t G1SATBBufferSize = 1024 {product} {default}
size_t G1UpdateBufferSize = 256 {product} {default}
bool G1UseAdaptiveIHOP = true {product} {default}
uint GCCardSizeInBytes = 512 {product} {default}
uint GCDrainStackTargetSize = 64 {product} {default}
uint GCHeapFreeLimit = 2 {product} {default}
uintx GCPauseIntervalMillis = 0 {product} {default}
uint GCTimeLimit = 98 {product} {default}
uint GCTimeRatio = 99 {product} {default}
size_t HeapBaseMinAddress = 2147483648 {pd product} {default}
bool HeapDumpAfterFullGC = false {manageable} {default}
bool HeapDumpBeforeFullGC = false {manageable} {default}
int HeapDumpGzipLevel = 0 {manageable} {default}
bool HeapDumpOnOutOfMemoryError = false {manageable} {default}
ccstr HeapDumpPath = {manageable} {default}
uintx HeapMaximumCompactionInterval = 20 {product} {default}
uintx HeapSearchSteps = 3 {product} {default}
size_t HeapSizePerGCThread = 43620760 {product} {default}
bool IgnoreEmptyClassPaths = false {product} {default}
bool IgnoreUnrecognizedVMOptions = false {product} {default}
uintx IncreaseFirstTierCompileThresholdAt = 50 {product} {default}
bool IncrementalInline = true {C2 product} {default}
uintx InitialCodeCacheSize = 2555904 {pd product} {default}
size_t InitialHeapSize = 2147483648 {product} {command line}
double InitialRAMPercentage = 1.562500 {product} {default}
uintx InitialSurvivorRatio = 8 {product} {default}
uint InitialTenuringThreshold = 7 {product} {default}
uint InitiatingHeapOccupancyPercent = 45 {product} {default}
bool Inline = true {product} {default}
ccstr InlineDataFile = {product} {default}
intx InlineSmallCode = 2500 {C2 pd product} {default}
bool InlineSynchronizedMethods = true {C1 product} {default}
intx InteriorEntryAlignment = 16 {C2 pd product} {default}
intx InterpreterProfilePercentage = 33 {product} {default}
bool JavaMonitorsInStackTrace = true {product} {default}
int JavaPriority10_To_OSPriority = -1 {product} {default}
int JavaPriority1_To_OSPriority = -1 {product} {default}
int JavaPriority2_To_OSPriority = -1 {product} {default}
int JavaPriority3_To_OSPriority = -1 {product} {default}
int JavaPriority4_To_OSPriority = -1 {product} {default}
int JavaPriority5_To_OSPriority = -1 {product} {default}
int JavaPriority6_To_OSPriority = -1 {product} {default}
int JavaPriority7_To_OSPriority = -1 {product} {default}
int JavaPriority8_To_OSPriority = -1 {product} {default}
int JavaPriority9_To_OSPriority = -1 {product} {default}
size_t LargePageHeapSizeThreshold = 134217728 {product} {default}
size_t LargePageSizeInBytes = 0 {product} {default}
intx LiveNodeCountInliningCutoff = 40000 {C2 product} {default}
int LockingMode = 2 {product} {default}
ccstr LogClassLoadingCauseFor = {product} {default}
intx LoopMaxUnroll = 16 {C2 product} {default}
intx LoopOptsCount = 43 {C2 product} {default}
intx LoopPercentProfileLimit = 10 {C2 pd product} {default}
uintx LoopStripMiningIter = 1000 {C2 product} {default}
uintx LoopStripMiningIterShortLoop = 100 {C2 product} {default}
intx LoopUnrollLimit = 60 {C2 pd product} {default}
intx LoopUnrollMin = 4 {C2 product} {default}
bool LoopUnswitching = true {C2 product} {default}
bool ManagementServer = false {product} {default}
size_t MarkStackSize = 4194304 {product} {default}
size_t MarkStackSizeMax = 536870912 {product} {default}
uint MarkSweepAlwaysCompactCount = 4 {product} {default}
uint MarkSweepDeadRatio = 5 {product} {default}
intx MaxBCEAEstimateLevel = 5 {product} {default}
intx MaxBCEAEstimateSize = 150 {product} {default}
uint64_t MaxDirectMemorySize = 0 {product} {default}
bool MaxFDLimit = true {product} {default}
uintx MaxGCPauseMillis = 18446744073709551614 {product} {default}
uintx MaxHeapFreeRatio = 70 {manageable} {default}
size_t MaxHeapSize = 2147483648 {product} {command line}
intx MaxInlineLevel = 15 {C2 product} {default}
intx MaxInlineSize = 35 {C2 product} {default}
intx MaxJNILocalCapacity = 65536 {product} {default}
int MaxJavaStackTraceDepth = 1024 {product} {default}
intx MaxJumpTableSize = 65000 {C2 product} {default}
intx MaxJumpTableSparseness = 5 {C2 product} {default}
intx MaxLabelRootDepth = 1100 {C2 product} {default}
intx MaxLoopPad = 15 {C2 product} {default}
size_t MaxMetaspaceExpansion = 5439488 {product} {default}
uint MaxMetaspaceFreeRatio = 70 {product} {default}
size_t MaxMetaspaceSize = 18446744073709551615 {product} {default}
size_t MaxNewSize = 18446744073709551615 {product} {default}
intx MaxNodeLimit = 80000 {C2 product} {default}
uint64_t MaxRAM = 137438953472 {pd product} {default}
double MaxRAMPercentage = 25.000000 {product} {default}
intx MaxRecursiveInlineLevel = 1 {C2 product} {default}
uint MaxTenuringThreshold = 14 {product} {default}
intx MaxTrivialSize = 6 {C2 product} {default}
intx MaxVectorSize = 32 {C2 product} {default}
size_t MetaspaceSize = 22020096 {product} {default}
bool MethodFlushing = true {product} {default}
size_t MinHeapDeltaBytes = 2097152 {product} {ergonomic}
uintx MinHeapFreeRatio = 40 {manageable} {default}
size_t MinHeapSize = 2147483648 {product} {command line}
intx MinJumpTableSize = 10 {C2 pd product} {default}
size_t MinMetaspaceExpansion = 327680 {product} {default}
uint MinMetaspaceFreeRatio = 40 {product} {default}
double MinRAMPercentage = 50.000000 {product} {default}
uintx MinSurvivorRatio = 3 {product} {default}
size_t MinTLABSize = 2048 {product} {default}
intx MultiArrayExpandLimit = 6 {C2 product} {default}
uintx NUMAChunkResizeWeight = 20 {product} {default}
size_t NUMAInterleaveGranularity = 2097152 {product} {default}
size_t NUMASpaceResizeRate = 1073741824 {product} {default}
bool NUMAStats = false {product} {default}
ccstr NativeMemoryTracking = off {product} {default}
bool NeverActAsServerClassMachine = false {pd product} {default}
bool NeverTenure = false {product} {default}
uintx NewRatio = 2 {product} {default}
size_t NewSize = 1363144 {product} {default}
size_t NewSizeThreadIncrease = 5320 {pd product} {default}
intx NmethodSweepActivity = 4 {product} {default}
intx NodeLimitFudgeFactor = 2000 {C2 product} {default}
uintx NonNMethodCodeHeapSize = 5832704 {pd product} {ergonomic}
uintx NonProfiledCodeHeapSize = 122945536 {pd product} {ergonomic}
intx NumberOfLoopInstrToAlign = 4 {C2 product} {default}
int ObjectAlignmentInBytes = 8 {product lp64_product} {default}
size_t OldPLABSize = 1024 {product} {default}
bool OmitStackTraceInFastThrow = true {product} {default}
ccstrlist OnError = {product} {default}
ccstrlist OnOutOfMemoryError = {product} {default}
intx OnStackReplacePercentage = 140 {pd product} {default}
bool OptimizeFill = false {C2 product} {default}
bool OptimizePtrCompare = true {C2 product} {default}
bool OptimizeStringConcat = true {C2 product} {default}
bool OptoBundling = false {C2 pd product} {default}
intx OptoLoopAlignment = 16 {pd product} {default}
bool OptoRegScheduling = true {C2 pd product} {default}
bool OptoScheduling = false {C2 pd product} {default}
uint PLABWeight = 75 {product} {default}
bool PSChunkLargeArrays = true {product} {default}
int ParGCArrayScanChunk = 50 {product} {default}
uint ParallelGCBufferWastePct = 10 {product} {default}
uint ParallelGCThreads = 8 {product} {default}
bool ParallelRefProcBalancingEnabled = true {product} {default}
bool ParallelRefProcEnabled = false {product} {default}
bool PartialPeelAtUnsignedTests = true {C2 product} {default}
bool PartialPeelLoop = true {C2 product} {default}
intx PartialPeelNewPhiDelta = 0 {C2 product} {default}
uint PausePadding = 1 {product} {default}
intx PerBytecodeRecompilationCutoff = 200 {product} {default}
intx PerBytecodeTrapLimit = 4 {product} {default}
intx PerMethodRecompilationCutoff = 400 {product} {default}
intx PerMethodTrapLimit = 100 {product} {default}
bool PerfAllowAtExitRegistration = false {product} {default}
bool PerfBypassFileSystemCheck = false {product} {default}
int PerfDataMemorySize = 32768 {product} {default}
ccstr PerfDataSaveFile = {product} {default}
bool PerfDataSaveToFile = false {product} {default}
bool PerfDisableSharedMem = false {product} {default}
int PerfMaxStringConstLength = 1024 {product} {default}
size_t PreTouchParallelChunkSize = 1073741824 {pd product} {default}
bool PreferInterpreterNativeStubs = false {pd product} {default}
intx PrefetchCopyIntervalInBytes = 576 {product} {default}
intx PrefetchScanIntervalInBytes = 576 {product} {default}
bool PreserveFramePointer = false {pd product} {default}
size_t PretenureSizeThreshold = 0 {product} {default}
bool PrintClassHistogram = false {manageable} {default}
bool PrintCodeCache = false {product} {default}
bool PrintCodeCacheOnCompilation = false {product} {default}
bool PrintCommandLineFlags = false {product} {default}
bool PrintCompilation = false {product} {default}
bool PrintConcurrentLocks = false {manageable} {default}
bool PrintExtendedThreadInfo = false {product} {default}
bool PrintFlagsFinal = true {product} {command line}
bool PrintFlagsInitial = false {product} {default}
bool PrintFlagsRanges = false {product} {default}
bool PrintGC = false {product} {default}
bool PrintGCDetails = false {product} {default}
bool PrintHeapAtSIGBREAK = true {product} {default}
bool PrintSharedArchiveAndExit = false {product} {default}
bool PrintStringTableStatistics = false {product} {default}
bool PrintTieredEvents = false {product} {default}
bool PrintVMOptions = false {product} {default}
bool PrintWarnings = true {product} {default}
bool ProfileExceptionHandlers = true {product} {default}
bool ProfileInterpreter = true {pd product} {default}
intx ProfileMaturityPercentage = 20 {product} {default}
uintx ProfiledCodeHeapSize = 122880000 {pd product} {ergonomic}
uint PromotedPadding = 3 {product} {default}
uintx QueuedAllocationWarningCount = 0 {product} {default}
bool RangeCheckElimination = true {product} {default}
bool ReassociateInvariants = true {C2 product} {default}
bool RecordDynamicDumpInfo = false {product} {default}
bool ReduceBulkZeroing = true {C2 product} {default}
bool ReduceFieldZeroing = true {C2 product} {default}
bool ReduceInitialCardMarks = true {C2 product} {default}
bool ReduceSignalUsage = false {product} {default}
bool RelaxAccessControlCheck = false {product} {default}
ccstr ReplayDataFile = {product} {default}
uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic}
bool ResizePLAB = true {product} {default}
bool ResizeTLAB = true {product} {default}
bool RestoreMXCSROnJNICalls = false {product} {default}
bool RestrictContended = true {product} {default}
bool RestrictReservedStack = true {product} {default}
bool RewriteBytecodes = true {pd product} {default}
bool RewriteFrequentPairs = true {pd product} {default}
bool SafepointTimeout = false {product} {default}
double SafepointTimeoutDelay = 10000.000000 {product} {default}
bool SegmentedCodeCache = true {product} {ergonomic}
double SelfDestructTimer = 0.000000 {product} {default}
ccstr SharedArchiveConfigFile = {product} {default}
ccstr SharedArchiveFile = {product} {default}
size_t SharedBaseAddress = 2600468480 {product} {default}
ccstr SharedClassListFile = {product} {default}
uint SharedSymbolTableBucketSize = 4 {product} {default}
bool ShowCodeDetailsInExceptionMessages = true {manageable} {default}
bool ShowMessageBoxOnError = false {product} {default}
bool ShrinkHeapInSteps = true {product} {default}
size_t SoftMaxHeapSize = 2147483648 {manageable} {ergonomic}
intx SoftRefLRUPolicyMSPerMB = 1000 {product} {default}
bool SplitIfBlocks = true {C2 product} {default}
intx StackRedPages = 1 {pd product} {default}
intx StackReservedPages = 0 {pd product} {default}
intx StackShadowPages = 8 {pd product} {default}
bool StackTraceInThrowable = true {product} {default}
intx StackYellowPages = 3 {pd product} {default}
uintx StartAggressiveSweepingAt = 10 {product} {default}
bool StartAttachListener = false {product} {default}
ccstr StartFlightRecording = {product} {default}
uint StringDeduplicationAgeThreshold = 3 {product} {default}
uintx StringTableSize = 65536 {product} {default}
bool SuperWordLoopUnrollAnalysis = true {C2 pd product} {default}
bool SuperWordReductions = true {C2 product} {default}
bool SuppressFatalErrorMessage = false {product} {default}
uint SurvivorPadding = 3 {product} {default}
uintx SurvivorRatio = 8 {product} {default}
double SweeperThreshold = 15.000000 {product} {default}
uintx TLABAllocationWeight = 35 {product} {default}
uintx TLABRefillWasteFraction = 64 {product} {default}
size_t TLABSize = 262144 {product} {default}
uintx TLABWasteIncrement = 4 {product} {default}
uintx TLABWasteTargetPercent = 1 {product} {default}
uint TargetPLABWastePct = 10 {product} {default}
uint TargetSurvivorRatio = 50 {product} {default}
uint TenuredGenerationSizeIncrement = 20 {product} {default}
uint TenuredGenerationSizeSupplement = 80 {product} {default}
uintx TenuredGenerationSizeSupplementDecay = 2 {product} {default}
int ThreadPriorityPolicy = 0 {product} {default}
bool ThreadPriorityVerbose = false {product} {default}
intx ThreadStackSize = 0 {pd product} {default}
uint ThresholdTolerance = 10 {product} {default}
intx Tier0BackedgeNotifyFreqLog = 10 {product} {default}
intx Tier0InvokeNotifyFreqLog = 7 {product} {default}
intx Tier0ProfilingStartPercentage = 200 {product} {default}
intx Tier23InlineeNotifyFreqLog = 20 {product} {default}
intx Tier2BackEdgeThreshold = 0 {product} {default}
intx Tier2BackedgeNotifyFreqLog = 14 {product} {default}
intx Tier2CompileThreshold = 0 {product} {default}
intx Tier2InvokeNotifyFreqLog = 11 {product} {default}
intx Tier3BackEdgeThreshold = 60000 {product} {default}
intx Tier3BackedgeNotifyFreqLog = 13 {product} {default}
intx Tier3CompileThreshold = 2000 {product} {default}
intx Tier3DelayOff = 2 {product} {default}
intx Tier3DelayOn = 5 {product} {default}
intx Tier3InvocationThreshold = 200 {product} {default}
intx Tier3InvokeNotifyFreqLog = 10 {product} {default}
intx Tier3LoadFeedback = 5 {product} {default}
intx Tier3MinInvocationThreshold = 100 {product} {default}
intx Tier4BackEdgeThreshold = 40000 {product} {default}
intx Tier4CompileThreshold = 15000 {product} {default}
intx Tier4InvocationThreshold = 5000 {product} {default}
intx Tier4LoadFeedback = 3 {product} {default}
intx Tier4MinInvocationThreshold = 600 {product} {default}
bool TieredCompilation = true {pd product} {default}
intx TieredCompileTaskTimeout = 50 {product} {default}
intx TieredRateUpdateMaxTime = 25 {product} {default}
intx TieredRateUpdateMinTime = 1 {product} {default}
intx TieredStopAtLevel = 4 {product} {default}
ccstr TraceJVMTI = {product} {default}
intx TrackedInitializationLimit = 50 {C2 product} {default}
bool TrapBasedNullChecks = false {pd product} {default}
bool TrapBasedRangeChecks = false {C2 pd product} {default}
uint TrimNativeHeapInterval = 0 {product} {default}
int TypeProfileArgsLimit = 2 {product} {default}
uint TypeProfileLevel = 111 {pd product} {default}
intx TypeProfileMajorReceiverPercent = 90 {C2 product} {default}
int TypeProfileParmsLimit = 2 {product} {default}
intx TypeProfileSubTypeCheckCommonThreshold = 50 {C2 product} {default}
intx TypeProfileWidth = 2 {product} {default}
int UnguardOnExecutionViolation = 0 {product} {default}
bool UseAES = true {product} {default}
int UseAVX = 2 {ARCH product} {default}
bool UseAdaptiveGenerationSizePolicyAtMajorCollection = true {product} {default}
bool UseAdaptiveGenerationSizePolicyAtMinorCollection = true {product} {default}
bool UseAdaptiveNUMAChunkSizing = true {product} {default}
bool UseAdaptiveSizeDecayMajorGCCost = true {product} {default}
bool UseAdaptiveSizePolicy = true {product} {default}
bool UseAdaptiveSizePolicyFootprintGoal = true {product} {default}
bool UseAdaptiveSizePolicyWithSystemGC = false {product} {default}
bool UseAddressNop = true {ARCH product} {default}
bool UseAllWindowsProcessorGroups = false {product} {default}
bool UseBASE64Intrinsics = true {product} {default}
bool UseBMI1Instructions = true {ARCH product} {default}
bool UseBMI2Instructions = true {ARCH product} {default}
bool UseBimorphicInlining = true {C2 product} {default}
bool UseCLMUL = true {ARCH product} {default}
bool UseCMoveUnconditionally = false {C2 product} {default}
bool UseCodeCacheFlushing = true {product} {default}
bool UseCompactObjectHeaders = false {product lp64_product} {default}
bool UseCompiler = true {product} {default}
bool UseCompressedClassPointers = true {product lp64_product} {default}
bool UseCompressedOops = false {product lp64_product} {ergonomic}
bool UseCondCardMark = false {product} {default}
bool UseCountLeadingZerosInstruction = true {ARCH product} {default}
bool UseCountTrailingZerosInstruction = true {ARCH product} {default}
bool UseCountedLoopSafepoints = true {C2 product} {default}
bool UseDivMod = true {C2 product} {default}
bool UseDynamicNumberOfCompilerThreads = true {product} {default}
bool UseDynamicNumberOfGCThreads = true {product} {default}
bool UseFMA = true {product} {default}
bool UseFPUForSpilling = true {C2 product} {default}
bool UseFastJNIAccessors = true {product} {default}
bool UseFastStosb = false {ARCH product} {default}
bool UseG1GC = false {product} {default}
bool UseGCOverheadLimit = true {product} {default}
bool UseInlineCaches = true {product} {default}
bool UseInterpreter = true {product} {default}
bool UseJumpTables = true {C2 product} {default}
bool UseLargePages = false {pd product} {default}
bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic}
bool UseLoopCounter = true {product} {default}
bool UseLoopInvariantCodeMotion = true {C1 product} {default}
bool UseLoopPredicate = true {C2 product} {default}
bool UseMaximumCompactionOnSystemGC = true {product} {default}
bool UseNUMA = false {product} {default}
bool UseNUMAInterleaving = false {product} {default}
bool UseNewLongLShift = true {ARCH product} {default}
bool UseOSErrorReporting = false {product} {default}
bool UseOnStackReplacement = true {pd product} {default}
bool UseOnlyInlinedBimorphic = true {C2 product} {default}
bool UsePSAdaptiveSurvivorSizePolicy = true {product} {default}
bool UseParallelGC = false {product} {default}
bool UsePerfData = true {product} {default}
bool UsePopCountInstruction = true {product} {default}
bool UseProfiledLoopPredicate = true {C2 product} {default}
bool UseSHA = true {product} {default}
int UseSSE = 4 {ARCH product} {default}
bool UseSSE42Intrinsics = true {ARCH product} {default}
bool UseSerialGC = false {product} {default}
bool UseShenandoahGC = false {product} {default}
bool UseSignalChaining = true {product} {default}
bool UseStoreImmI16 = true {ARCH product} {default}
bool UseStringDeduplication = false {product} {default}
bool UseSubwordForMaxVector = true {C2 product} {default}
bool UseSuperWord = true {C2 product} {default}
bool UseSystemMemoryBarrier = false {product} {default}
bool UseTLAB = true {product} {default}
bool UseThreadPriorities = true {pd product} {default}
bool UseTypeProfile = true {product} {default}
bool UseTypeSpeculation = true {C2 product} {default}
bool UseUnalignedLoadStores = true {ARCH product} {default}
bool UseVectorCmov = false {C2 product} {default}
bool UseXMMForArrayCopy = true {product} {default}
bool UseXMMForObjInit = true {ARCH product} {default}
bool UseXmmI2D = true {ARCH product} {default}
bool UseXmmI2F = true {ARCH product} {default}
bool UseXmmLoadAndClearUpper = true {ARCH product} {default}
bool UseXmmRegToRegMoveAll = true {ARCH product} {default}
bool UseZGC = true {product} {command line}
intx UserThreadWaitAttemptsAtExit = 30 {product} {default}
int VMThreadPriority = -1 {product} {default}
intx VMThreadStackSize = 0 {pd product} {default}
intx ValueMapInitialSize = 11 {C1 product} {default}
intx ValueMapMaxLoopSize = 8 {C1 product} {default}
intx ValueSearchLimit = 1000 {C2 product} {default}
bool VerifySharedSpaces = false {product} {default}
uint YoungGenerationSizeIncrement = 20 {product} {default}
uint YoungGenerationSizeSupplement = 80 {product} {default}
uintx YoungGenerationSizeSupplementDecay = 8 {product} {default}
size_t YoungPLABSize = 4096 {product} {default}
double ZAllocationSpikeTolerance = 2.000000 {product} {default}
double ZCollectionInterval = 0.000000 {product} {default}
double ZCollectionIntervalMajor = -1.000000 {product} {default}
double ZCollectionIntervalMinor = -1.000000 {product} {default}
bool ZCollectionIntervalOnly = false {product} {default}
double ZFragmentationLimit = 5.000000 {product} {default}
bool ZProactive = true {product} {default}
bool ZUncommit = false {product} {ergonomic}
uintx ZUncommitDelay = 300 {product} {default}
double ZYoungCompactionLimit = 25.000000 {product} {default}
bool ZeroTLAB = false {product} {default}
java version "25.0.3" 2026-04-21 LTS
Java(TM) SE Runtime Environment (build 25.0.3+9-LTS-195)
Java HotSpot(TM) 64-Bit Server VM (build 25.0.3+9-LTS-195, mixed mode, sharing)

47
results/03-latency-g1.txt Normal file
View File

@@ -0,0 +1,47 @@
==============================================================================
ZGC / G1 open-loop latency harness
==============================================================================
collector : G1 Young Generation + G1 Concurrent GC + G1 Old Generation
java : 25.0.3+9-LTS-195
threads=4 rate=20,000/s warmup=20s measure=60s
liveSet=150,000 entries x 4,096 B (~585 MB live)
garbage=16,384 B/request reads=64/request mutationProbability=0.20
nominal allocation rate ~328 MB/s seed=20260730
------------------------------------------------------------------------------
building live set ... 150,000 entries, ~589 MB live, took 266 ms
warming up for 20 s at 20,000 req/s ...
measuring for 60 s at 20,000 req/s ...
------------------------------------------------------------------------------
achieved throughput : 19,976 req/s over 60.1 s
RESPONSE TIME (from intended arrival -- the honest number) (n=1,200,000)
mean 0.388 ms
p50 0.005 ms
p90 0.009 ms
p99 8.042 ms
p99.9 95.169 ms
p99.99 126.949 ms
max 133.018 ms
SERVICE TIME (from actual start -- hides queueing) (n=1,200,000)
mean 0.007 ms
p50 0.005 ms
p90 0.008 ms
p99 0.016 ms
p99.9 0.033 ms
p99.99 0.171 ms
max 113.864 ms
coordinated-omission gap at p99.9 : 95.169 ms response vs 0.033 ms service (2910.4x)
GC activity during the measured window
G1 Young Generation collections=36 time= 604 ms [stop-the-world]
G1 Concurrent GC collections=19 time= 15 ms [cycle (mostly concurrent)]
G1 Old Generation collections=2 time= 208 ms [stop-the-world]
CSV (response time)
collector,n,mean_ms,p50_ms,p90_ms,p99_ms,p999_ms,p9999_ms,max_ms
G1 Young Generation + G1 Concurrent GC + G1 Old Generation,1200000,0.388,0.005,0.009,8.042,95.169,126.949,133.018
liveSet checksum: 0

View File

@@ -0,0 +1,48 @@
==============================================================================
ZGC / G1 open-loop latency harness
==============================================================================
collector : ZGC Minor Cycles + ZGC Minor Pauses + ZGC Major Cycles + ZGC Major Pauses
java : 25.0.3+9-LTS-195
threads=4 rate=20,000/s warmup=20s measure=60s
liveSet=150,000 entries x 4,096 B (~585 MB live)
garbage=16,384 B/request reads=64/request mutationProbability=0.20
nominal allocation rate ~328 MB/s seed=20260730
------------------------------------------------------------------------------
building live set ... 150,000 entries, ~589 MB live, took 310 ms
warming up for 20 s at 20,000 req/s ...
measuring for 60 s at 20,000 req/s ...
------------------------------------------------------------------------------
achieved throughput : 19,973 req/s over 60.1 s
RESPONSE TIME (from intended arrival -- the honest number) (n=1,200,000)
mean 0.016 ms
p50 0.006 ms
p90 0.009 ms
p99 0.029 ms
p99.9 1.437 ms
p99.99 23.675 ms
max 32.178 ms
SERVICE TIME (from actual start -- hides queueing) (n=1,200,000)
mean 0.007 ms
p50 0.006 ms
p90 0.009 ms
p99 0.025 ms
p99.9 0.143 ms
p99.99 0.269 ms
max 8.353 ms
coordinated-omission gap at p99.9 : 1.437 ms response vs 0.143 ms service (10.0x)
GC activity during the measured window
ZGC Minor Cycles collections=18 time= 919 ms [cycle (mostly concurrent)]
ZGC Minor Pauses collections=54 time= 0 ms [stop-the-world]
ZGC Major Cycles collections=3 time= 667 ms [cycle (mostly concurrent)]
ZGC Major Pauses collections=15 time= 0 ms [stop-the-world]
CSV (response time)
collector,n,mean_ms,p50_ms,p90_ms,p99_ms,p999_ms,p9999_ms,max_ms
ZGC Minor Cycles + ZGC Minor Pauses + ZGC Major Cycles + ZGC Major Pauses,1200000,0.016,0.006,0.009,0.029,1.437,23.675,32.178
liveSet checksum: 1

20
results/04-stalls-g1.txt Normal file
View File

@@ -0,0 +1,20 @@
max heap : 512 MB
target live set : 281 MB (55% of heap)
threads : 12, duration: 20 s
filling live set ...
live set filled: 4,505 chunks x 64 KB
now allocating hard for 20 s -- expect stalls
allocation phase done
========================================================================
JFR summary (C:\Users\Ankur\allocation-stalls.jfr)
========================================================================
young collections : 0
old collections : 0
page allocations : 0
ALLOCATION STALLS : 0
No stalls recorded. Either the heap was big enough, or you are not
running ZGC. Shrink -Xmx or raise -Dseconds and try again.

View File

@@ -0,0 +1,41 @@
max heap : 512 MB
target live set : 281 MB (55% of heap)
threads : 12, duration: 20 s
filling live set ...
live set filled: 4,505 chunks x 64 KB
now allocating hard for 20 s -- expect stalls
allocation phase done
========================================================================
JFR summary (C:\Users\Ankur\allocation-stalls.jfr)
========================================================================
young collections : 1,771
old collections : 217
page allocations : 39,796
ALLOCATION STALLS : 32,200
total time threads spent stalled : 139,439 ms
mean stall : 4.33 ms
longest stall : 48.32 ms
stalls by ZGC page type
Small count=32,200 total=139,439 ms mean=4.33 ms
ten longest stalls
duration page size thread
48.32 ms Small 2097152 allocator-3
47.99 ms Small 2097152 allocator-10
46.39 ms Small 2097152 allocator-1
46.23 ms Small 2097152 allocator-0
46.19 ms Small 2097152 allocator-7
46.18 ms Small 2097152 allocator-5
45.11 ms Small 2097152 allocator-6
44.85 ms Small 2097152 allocator-7
44.68 ms Small 2097152 allocator-10
44.49 ms Small 2097152 allocator-0
Compare against your pause-time chart: none of the above is a pause.
Inspect the raw events, including the stack that was stalled, with:
jfr print --events ZAllocationStall allocation-stalls.jfr

View File

@@ -0,0 +1,41 @@
max heap : 512 MB
target live set : 281 MB (55% of heap)
threads : 12, duration: 20 s
filling live set ...
live set filled: 4,505 chunks x 64 KB
now allocating hard for 20 s -- expect stalls
allocation phase done
========================================================================
JFR summary (C:\Users\Ankur\allocation-stalls.jfr)
========================================================================
young collections : 1,778
old collections : 217
page allocations : 39,685
ALLOCATION STALLS : 31,967
total time threads spent stalled : 138,521 ms
mean stall : 4.33 ms
longest stall : 51.41 ms
stalls by ZGC page type
Small count=31,967 total=138,521 ms mean=4.33 ms
ten longest stalls
duration page size thread
51.41 ms Small 2097152 allocator-10
50.18 ms Small 2097152 allocator-0
48.12 ms Small 2097152 allocator-5
47.93 ms Small 2097152 allocator-1
46.90 ms Small 2097152 allocator-1
46.14 ms Small 2097152 allocator-11
46.14 ms Small 2097152 allocator-11
46.08 ms Small 2097152 allocator-6
46.02 ms Small 2097152 allocator-4
45.68 ms Small 2097152 allocator-9
Compare against your pause-time chart: none of the above is a pause.
Inspect the raw events, including the stack that was stalled, with:
jfr print --events ZAllocationStall allocation-stalls.jfr

View File

@@ -0,0 +1,41 @@
max heap : 512 MB
target live set : 281 MB (55% of heap)
threads : 12, duration: 20 s
filling live set ...
live set filled: 4,505 chunks x 64 KB
now allocating hard for 20 s -- expect stalls
allocation phase done
========================================================================
JFR summary (C:\Users\Ankur\allocation-stalls.jfr)
========================================================================
young collections : 1,722
old collections : 219
page allocations : 39,803
ALLOCATION STALLS : 32,442
total time threads spent stalled : 140,558 ms
mean stall : 4.33 ms
longest stall : 50.33 ms
stalls by ZGC page type
Small count=32,442 total=140,558 ms mean=4.33 ms
ten longest stalls
duration page size thread
50.33 ms Small 2097152 allocator-10
48.98 ms Small 2097152 allocator-5
48.96 ms Small 2097152 allocator-6
48.84 ms Small 2097152 allocator-7
48.79 ms Small 2097152 allocator-1
47.89 ms Small 2097152 allocator-0
47.33 ms Small 2097152 allocator-10
47.12 ms Small 2097152 allocator-3
46.96 ms Small 2097152 allocator-5
46.71 ms Small 2097152 allocator-1
Compare against your pause-time chart: none of the above is a pause.
Inspect the raw events, including the stack that was stalled, with:
jfr print --events ZAllocationStall allocation-stalls.jfr

19
results/05-pages-g1.txt Normal file
View File

@@ -0,0 +1,19 @@
==========================================================================
Page / region geometry as reported by THIS JVM
==========================================================================
max heap : 2,048 MB
UseG1GC / UseZGC : true / false
G1HeapRegionSize : 1,048,576 bytes (1 MB)
=> G1 humongous threshold: objects larger than 524,288 bytes (512 KB) go straight to old gen
No jdk.ZPageAllocation events (expected under G1).
Objects allocated in this run
65,536 bytes (64 KB) ordinary G1 allocation in an eden region
262,144 bytes (256 KB) ordinary G1 allocation in an eden region
524,288 bytes (512 KB) ordinary G1 allocation in an eden region
2,097,152 bytes (2 MB) HUMONGOUS on G1 -- allocated directly in old gen, spans whole regions
4,194,304 bytes (4 MB) HUMONGOUS on G1 -- allocated directly in old gen, spans whole regions
16,777,216 bytes (16 MB) HUMONGOUS on G1 -- allocated directly in old gen, spans whole regions
checksum: 6

33
results/05-pages-zgc.txt Normal file
View File

@@ -0,0 +1,33 @@
==========================================================================
Page / region geometry as reported by THIS JVM
==========================================================================
max heap : 2,048 MB
UseG1GC / UseZGC : false / true
G1HeapRegionSize : 0 (ergonomic / not applicable)
=> ZGC small pages are 2 MB; objects up to 1/8 of a page (256 KB) use them.
Larger objects use a medium page, and anything bigger gets a Large page
of its own -- which ZGC frees rather than relocates.
ZGC internals flags visible in this JVM
ZFragmentationLimit = 5.0
ZCollectionIntervalMinor = -1.0
ZCollectionIntervalMajor = -1.0
ZAllocationSpikeTolerance = 2.0
ZUncommit = false
ZUncommitDelay = 300
SoftMaxHeapSize = 2,147,483,648 bytes (2048 MB)
ZGC pages actually allocated while creating the objects above
page type count total bytes
Large 2 25,165,824
Medium 1 33,554,432
Objects allocated in this run
65,536 bytes (64 KB) expect ZGC Small page (2 MB, shared with other objects)
262,144 bytes (256 KB) expect ZGC Medium page (shared; size is a range in JDK 25)
524,288 bytes (512 KB) expect ZGC Medium page (shared; size is a range in JDK 25)
2,097,152 bytes (2 MB) expect ZGC Medium page (shared; size is a range in JDK 25)
4,194,304 bytes (4 MB) expect ZGC Large page -- one page for this object, freed not relocated
16,777,216 bytes (16 MB) expect ZGC Large page -- one page for this object, freed not relocated
checksum: 6

40
results/06-gclog-g1.txt Normal file
View File

@@ -0,0 +1,40 @@
==============================================================================
GC log analysis: g1-latency.log
==============================================================================
lines parsed : 1,257
young / minor cycles : 94
old / major cycles : 0
ZGC allocation stalls : 0
G1 evacuation failures : 16
full GCs : 4
STOP-THE-WORLD PAUSES (this is application freeze time)
count : 68
total : 1,139.624 ms
mean : 16.759 ms
p50 : 12.857 ms
p99 : 104.449 ms
max : 104.449 ms
by phase
Pause Young (Normal) n=17 total= 403.699 ms max=103.308 ms
Pause Young (Concurrent Start) n=11 total= 153.384 ms max= 20.587 ms
Pause Remark n=10 total= 13.736 ms max= 1.745 ms
Pause Cleanup n=9 total= 2.472 ms max= 0.438 ms
Pause Young (Prepare Mixed) n=8 total= 110.491 ms max= 24.639 ms
Pause Young (Mixed) n=11 total= 247.284 ms max= 30.879 ms
Pause Full n=2 total= 208.558 ms max=104.449 ms
CONCURRENT PHASES (application keeps running -- NOT freeze time)
Concurrent Scan Root Regions n=11 total= 12.317 ms max= 1.867 ms
Concurrent Mark From Roots n=11 total= 191.931 ms max=102.516 ms
Concurrent Preclean n=10 total= 0.265 ms max= 0.050 ms
Concurrent Mark n=10 total= 106.217 ms max= 14.524 ms
Concurrent Rebuild Remembered Sets and Scrub Regions n=10 total= 146.586 ms max=113.784 ms
Concurrent Clear Claimed Marks n=9 total= 0.227 ms max= 0.039 ms
Concurrent Cleanup for Next Mark n=9 total= 31.227 ms max= 4.862 ms
Concurrent Mark Cycle n=11 total= 406.062 ms max=125.183 ms
Adding the block above to the pause block would be a category error:
concurrent time overlaps application execution by design.

36
results/06-gclog-zgc.txt Normal file
View File

@@ -0,0 +1,36 @@
==============================================================================
GC log analysis: zgc-latency.log
==============================================================================
lines parsed : 2,247
young / minor cycles : 45
old / major cycles : 17
ZGC allocation stalls : 40
G1 evacuation failures : 0
full GCs : 0
STOP-THE-WORLD PAUSES (this is application freeze time)
count : 106
total : 1.503 ms
mean : 0.014 ms
p50 : 0.014 ms
p99 : 0.044 ms
max : 0.054 ms
by phase
Pause Mark Start (Major) n=8 total= 0.139 ms max= 0.021 ms
Pause Mark End n=38 total= 0.683 ms max= 0.044 ms
Pause Relocate Start n=38 total= 0.330 ms max= 0.021 ms
Pause Mark Start n=22 total= 0.351 ms max= 0.054 ms
CONCURRENT PHASES (application keeps running -- NOT freeze time)
Concurrent Mark n=38 total= 894.499 ms max= 78.403 ms
Concurrent Mark Free n=38 total= 0.097 ms max= 0.033 ms
Concurrent Reset Relocation Set n=38 total= 4.331 ms max= 0.934 ms
Concurrent Select Relocation Set n=38 total= 48.991 ms max= 5.372 ms
Concurrent Relocate n=38 total=1092.392 ms max=151.380 ms
Concurrent Process Non n=8 total= 5.635 ms max= 0.984 ms
Concurrent Remap Roots n=8 total= 10.919 ms max= 2.207 ms
Adding the block above to the pause block would be a category error:
concurrent time overlaps application execution by design.

2659
results/07-jmh-g1.json Normal file

File diff suppressed because it is too large Load Diff

1295
results/07-jmh-g1.txt Normal file

File diff suppressed because it is too large Load Diff

2659
results/07-jmh-zgc.json Normal file

File diff suppressed because it is too large Load Diff

1295
results/07-jmh-zgc.txt Normal file

File diff suppressed because it is too large Load Diff