jvm
- Java 25 Changes Your Telemetry in Strings, Not Code
A 21 to 25 move compiles fine. Then ZGC series rename, pinning metrics go quiet, -javaagent sidelines the AOT cache, and going native on top drops GC metrics.
- A Broken AOT Cache Still Serves 200
By default the JVM logs one error and keeps running when its AOT cache is broken, so a Leyden tier without AOTMode=on can measure plain java -jar.
- Eighteen Requests for One Redirect
One 302 from a stub upstream, four HTTP client stacks, four bills: 18, 6, 3 and 1 requests. Two sensible defaults, multiplied.
- The Baseline Was the Bug
The JVM platform-thread baseline was measuring virtual threads, and native's famous 8x was dispatch plus double the heap. Matched, the gap is memory.
- Native Image Grew to 734 MB
Five things the benchmark taught me that the documentation didn't mention.
- Seven Fixes, Zero Errors
The fix for "JVM dies at 256 MB under load" was not a JVM flag. Part 4 ended with Serial GC — the only GC that fits in 256 MB — serving 4,550 requests before the OOM killer showed up. 81% error rate. Same flags, same container, same load profile. Seven code …
- Your JVM Reports 151 MB. Your Container Uses 248.
151 MB. That's what micrometer-prometheus reports for the JVM at 256 MB after serving 1.66 million requests. Heap 35 MB, metaspace 72 MB, compressed class space 13 MB, code cache 16 MB, direct buffers 0.75 MB. Add it up. 137 MB. Rounded generously: 151 MB with …
- 107 MB of Invisible JVM RAM
Prometheus says 137 MB. Docker says 244 MiB. /proc/PID/smaps is the only witness that doesn't lie. The Discrepancy#JVM at 256 MB, Serial GC, after serving 1.66 million requests. Measured at idle: Docker stats: 244.2 MiB / 256 MiB (95.38%) Prometheus reports: …
- Every GC Failed at 256 MB (Except the Boring One)
Update, 2026-10-25: An earlier version said Serial is the only garbage collector in GraalVM Community Edition native images. CE also ships Epsilon (--gc=epsilon), a no-op collector that never frees memory and is meant for short-lived programs. For a service, …
- Native Image vs JVM at 128 MB: The Benchmark Nobody Warned Me About
Update, 2026-10-25: An earlier version said Serial is the only garbage collector in GraalVM Community Edition native images. CE also ships Epsilon (--gc=epsilon), a no-op collector that never frees memory and is meant for short-lived programs. For a service, …