framework-benchmarks — consolidated results
Sandbox: 2 vCPU / 7.8GiB RAM Linux container, GraalVM CE 25.4.4.1.1 (JDK 25.0.4.1.1)
Versions under test: Spring Boot 4.1.1, Quarkus 3.40.1 (LTS), Micronaut 5.2.2
All numbers are the average of 3 kept runs after discarding one cold-cache run (startup/memory),
or one 15-second run at concurrency 20 (throughput). Raw per-run JSON in 01-04 in this directory.

STARTUP TIME (seconds, cold process to first 200 response)
  framework       JVM       native     native is Nx faster
  spring-boot     6.318     0.132      47.9x
  quarkus         2.185     0.035      62.4x
  micronaut       2.507     0.041      61.1x

RESIDENT MEMORY (MB, RSS right after first successful request)
  framework       JVM       native     native is Nx smaller
  spring-boot     229.2     79.5       2.9x
  quarkus         171.6     33.6       5.1x
  micronaut       180.0     46.2       3.9x

THROUGHPUT (requests/sec, GET /widgets, 20 concurrent stdlib-http.client workers, 15s)
  framework       JVM req/s   native req/s
  spring-boot     2275.7      4795.1
  quarkus         3791.4      4243.8
  micronaut       4276.2      4961.2

DEPLOYMENT ARTIFACT SIZE (MB)
  framework       JVM (fat jar / fast-jar dir)   native executable
  spring-boot     23                             73
  quarkus         21                             44
  micronaut       14                             54

NATIVE BUILD TIME (wall clock, 2 vCPU, this sandbox — native-image is CPU-bound and
parallelizes with available cores, so a bigger CI runner will be meaningfully faster)
  quarkus:    6m22s  (succeeded on the first attempt)
  micronaut:  7m15s  (succeeded on the 4th attempt — 3 earlier attempts failed in
                      ~42-50s each over a Netty/logback static-initialization clash;
                      see docs/output/06-micronaut-native-build-failures.txt)
  spring-boot: 8m25s (succeeded on the first attempt, after routing around the
                      native-maven-plugin's execution binding — see repo README)

Cross-checks against the independent 2025-10 benchmark by gillius.org (different
hardware: Apple M2 Pro laptop vs this shared 2-vCPU container; different app: a
Postgres-backed CRUD app vs this repo's deliberately DB-free one; Spring Boot 3.5.6/
Quarkus 3.28.1/Micronaut 4.5.4 vs the current GA versions here) — see post for the full
comparison table. Qualitatively consistent: native beats JVM mode by roughly one to two
orders of magnitude on both startup and memory, in both benchmarks, on both machines.
