-
Notifications
You must be signed in to change notification settings - Fork 3
Description
Quarkus Reactive takes 7x longer to start: 353ms vs 49.4.
Helidon SE takes 5x longer: 303.6ms vs 59.4.
Startup time
Imperative
M: (36 + 48 + 36 + 47 + 42) / 5 = 41.8
Q: (55 + 46 + 44 + 54 + 48) / 5 = 49.4
S: (67 + 70 + 65 + 66 + 54) / 5 = 64.4
H: (64 + 55 + 61 + 58 + 59) / 5 = 59.4
Reactive
M: (52 + 45 + 47 + 46 + 47) / 5 = 47.4
Q: (359 + 291 + 276 + 534 + 305) / 5 = 353
S: (55 + 72 + 62 + 52 + 52) / 5 = 58.6
H: (239 + 239 + 509 + 263 + 268) / 5 = 303.6
Imperative with Virtual Threads
Q: (44 + 38 + 46 + 43 + 45) / 5 = 43.2
S: (71 + 64 + 68 + 71 + 66) / 5 = 68
Steps to reproduce
Install GraalVM 21:
sdk install java 21.0.2-graalce
For imperative:
git clone https://github.com/oktadev/auth0-java-rest-api-examples
cd auth0-java-rest-api-examples
./build.sh
./start.sh
The last script takes an argument of micronaut, quarkus, spring-boot, or helidon.
For reactive:
git clone https://github.com/oktadev/auth0-java-reactive-examples
cd auth0-java-reactive-examples
./build.sh
./start.sh
For virtual threads:
cd auth0-java-rest-api-examples
git checkout virtual-threads
./build.sh
./start.sh
I only calculated the startup times for Quarkus and Spring Boot because they're the only apps modified in the virtual-threads branch.
Memory usage (in MB):
Imperative
| Framework | 0 requests | 1 request | 10K requests |
|---|---|---|---|
| Micronaut | 53 | 63 | 102 |
| Quarkus | 37 | 47 | 51 |
| Spring Boot | 76 | 86 | 105 |
| Helidon | 82 | 92 | 69 |
Imperative with Virtual Threads
| Framework | 0 requests | 1 request | 10K requests |
|---|---|---|---|
| Quarkus | 37 | 48 | 51 |
| Spring Boot | 76 | 87 | 102 |
Reactive
| Framework | 0 requests | 1 request | 10K requests |
|---|---|---|---|
| Micronaut | 53 | 62 | 102 |
| Quarkus | 49 | 50 | 53 |
| Spring Boot | 75 | 107 | 174 |
| Helidon | 44 | 45 | 68 |