Spring Boot vs Quarkus at 1 GiB with swap disabled
A short follow-up to the 768 MiB Spring Boot vs Quarkus experiment.
Question
What changes when the same constrained-JVM experiment gets approximately 1 GiB of RAM and no swap?
Setup
I stopped the existing VM, changed its configured memory to 1 GiB, started it again, and disabled swap with sudo swapoff -a. The guest reported 955 MiB of RAM and Swap: 0B.
Spring Boot 4.1.1 and Quarkus 3.39.4 used Eclipse Temurin 25.0.4.1+1, the same JVM flags including -Xmx80m, separate file-backed H2 databases, the same deterministic fixture, and the same startup order. The paired workload sent ten requests to each application, followed by a ten-minute observation with the same checkpoints.
Results
| Checkpoint | Spring RSS | Quarkus RSS | Spring swap | Quarkus swap |
|---|---|---|---|---|
| Ready, pre-request | 233.1 MiB | 169.6 MiB | 0.0 MiB | 0.0 MiB |
| After one request | 234.8 MiB | 170.5 MiB | 0.0 MiB | 0.0 MiB |
| Post-workload | 235.4 MiB | 171.9 MiB | 0.0 MiB | 0.0 MiB |
| Intermediate | 239.7 MiB | 178.4 MiB | 0.0 MiB | 0.0 MiB |
| Midpoint, 5 minutes | 240.0 MiB | 179.6 MiB | 0.0 MiB | 0.0 MiB |
| After 10 minutes | 240.4 MiB | 181.2 MiB | 0.0 MiB | 0.0 MiB |
Both applications recorded zero process swap with swap disabled. At ten minutes, Spring RSS was 240.4 MiB and Quarkus RSS was 181.2 MiB.
Comparison with 768 MiB
At the final checkpoint in the 768 MiB run, Spring was 202.3 MiB RSS with 34.3 MiB of process swap, while Quarkus was 175.7 MiB RSS with no process swap. The 1 GiB run showed higher RSS for both applications, especially Spring late in the observation, but that is an observed difference under different memory pressure—not a standalone efficiency ranking.
Final heap snapshots were also contextual: Spring was 13.0 MiB at 768 MiB versus 6.2 MiB at 1 GiB, while Quarkus was 8.3 MiB versus 6.9 MiB. Normal garbage collection changes these values between captures.
What this suggests
The extra memory removed the swap behavior from this short run. Spring still had the higher resident footprint at every checkpoint, while Quarkus remained lower. Both applications completed ten HTTP 200 requests, had zero restarts, and StatLite continued polling all three targets successfully.
This remains a result for these applications, flags, workload, and observation window—not a universal framework conclusion.
Evidence
The curated 1 GiB follow-up record contains the checkpoint data, workload, polling summary, and direct comparison with the 768 MiB run. Monitoring was provided by StatLite.