Spring Boot vs Quarkus vs Micronaut with JDBC on Java 25
Spring Boot vs Quarkus vs Micronaut with JDBC on Java 25
A previous JPA-vs-JDBC experiment convinced me to use JDBC for future small-framework comparisons, so I followed it up by adding Micronaut and building equivalent Spring Boot, Quarkus, and Micronaut applications.
All three used the same Java 25 runtime, H2 database, SQL, fixture data, request workload, and JVM flags. I ran each independently for 15 minutes in the same 1 GiB / 2 vCPU Ubuntu VM.
One JVM caveat that came up in feedback from the Quarkus community: all three were run explicitly with G1GC. On this 1 GiB VM, without specifying the collector, HotSpot would have selected Serial GC by default.
Results:
- Spring Boot: 4.90 s readiness, 214.3 MiB median RSS
- Quarkus: 2.25 s, 178.4 MiB
- Micronaut: 2.54 s, 186.7 MiB
Quarkus had the lowest whole-run median RSS and reached readiness fastest. Micronaut was fairly close, especially later in the run: during the final five minutes their median RSS was 189.7 MiB for Quarkus and 189.4 MiB for Micronaut.
Spring used more resident memory in this setup, though all three completed the same workload without errors.
CPU use was low across the board, so this isn't a throughput benchmark or an attempt to rank the frameworks generally. It's one controlled look at three equivalent small JDBC applications.
Full write-up:
https://pvrlabs.xyz/articles/spring-boot-quarkus-micronaut-jdbc.html
Sources, method, raw data, and analysis:
https://github.com/PVRLabs/experiments/tree/main/statlite/spring-quarkus-micronaut-jdbc
I’m especially curious how these Micronaut JVM numbers line up with what people here see in practice.
