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
20 lines
998 B
Plaintext
20 lines
998 B
Plaintext
==========================================================================
|
|
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
|