The Memory Benchmark Nobody Asked For

Native image, memory, and the benchmark nobody warned you about.

A Micronaut 5.0.0 Space Observatory app — 16 REST endpoints, reactive R2DBC, 7-table PostgreSQL schema. The challenge: run it in a 256 MB container with swap disabled. GraalVM native image, garbage collector shootouts, invisible JVM memory, AOT bugs, and reactive backpressure tuning.

  1. Micronaut 5 Native Image: 14 Entries vs 1,913
  2. Native Image vs JVM at 128 MB
  3. The Observability Tax
  4. Every GC Failed at 256 MB (Except the Boring One)
  5. 107 MB of Invisible JVM RAM
  6. Your JVM Reports 151 MB. Your Container Uses 248.
  7. Three Bugs in a Trenchcoat Pretending to Be One Hang
  8. The AOT Hang That Wasn't
  9. Seven Fixes, Zero Errors
  10. flatMap's Second Argument Saved 1.7 Million Requests
  11. Loom Carrier on a Reactive Stack: 78 MB for Free
  12. Reactor to Mutiny: the operator phrasebook
  13. Five Things Spring Boot 4.1 Doesn't Tell You Until It's Too Late
  14. We Removed Reactor. Nothing Got Slower.
  15. Error Is Not Exception: Micrometer's Silent CPU Metric on Native Image
  16. ExecutorType.VIRTUAL Doesn't Exist
  17. 265 req/s on All Three Runtimes (Until You Add a Memory Limit)
  18. Designed a Reactive Benchmark. Imperative Won.
  19. The Throughput Was Always 115
  20. 200 Virtual Users vs api.nasa.gov (DEMO_KEY)
  21. Four Bugs, Three Exit Codes From a Benchmark Orchestrator
  22. Quarkus 12,563 vs Spring 820 (Both Numbers Are Wrong)
  23. -Xmx Won't Save Your Native Image
  24. 1% CPU and 6-Second Latency
  25. Two ways to mistranslate a retry
  26. The numbers lied until we fixed the ports
  27. Six OOMs and a Connection Pool
  28. Four Bugs That Needed Real Postgres to Exist
  29. Every Route Registered. Every Request 404'd.
  30. 16,700 Classes Before Your First Request
  31. Eight Connections, Zero Available
  32. 2492, 2495, 2508
  33. Native Image Grew to 734 MB
  34. The Baseline Was the Bug
  35. Eighteen Requests for One Redirect
  36. The Falsifier That Never Fired
  37. Health 200, API 200, Prometheus 000
  38. The Flag Was Verified. The File Was Never Read.
  39. Same Builder, Different Binary
  40. No Manual Intervention Required
  41. A Broken AOT Cache Still Serves 200