quarkus
- 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.
- No Manual Intervention Required
An LTS-to-LTS Quarkus bump, 3.33 to 3.40, changed no production Java and broke the tests twice: one class loaded twice, one database shared by six branches.
- Same Builder, Different Binary
One GraalVM builder image, one banner on every build log, 18 native binaries. Twelve came out PIE and six didn't, and nobody had touched a linker option.
- The Falsifier That Never Fired
Spring should wedge at 256MB like Micronaut, or the r2dbc-pool theory is wrong. Ten hours later Spring wedged harder. Quarkus never noticed.
- 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.
- Upgrade Errors That Named the Wrong Layer
Five Maven repos, three framework families, one JDK 25. Most errors pointed at a layer the fix didn't live in. The first failure printed nothing.
- 2492, 2495, 2508
Three frameworks, byte-identical DAOs, and the benchmark that collapsed to a rounding error.
- 16,700 Classes Before Your First Request
Quarkus JVM OOMs at 256 MB while Micronaut and Spring Boot fit. Not heap. Not a leak. It's 86 MB of metaspace that never shrinks.
- Four Bugs That Needed Real Postgres to Exist
A code review found zero bugs. The benchmark found four. Each one required concurrent load against real Postgres to exist.
- The numbers lied until we fixed the ports
Same reactive app on Micronaut, Spring Boot, and Quarkus. The numbers lied until we fixed the harness AND the ports.