Vergleich GraalVM nativ vs. herkömmlich mit Quarkus auf MacOS

Heute mal ein Vergleich mit einem Beispiel-Quarkus-REST Service normal vs. nativ.

Um die Größe und die Buildzeit zu vergleichen. Hier das Ergebnis vorweg:

Also native gebaute Apps sind wesentlich länger zur Buildzeit dafür laufen sie aber auch wesentlich schneller und sind dann auch auf das jeweilige Betriebssystem beschränkt.


Um auf einen MacOs Quarkus auch nativ zu kompilieren muss die GraalVM und das Native-Image installiert sein.

Also installieren wir die GraalVM auf dem Mac mit Port:

wie auch hier beschrieben:

# Und den gu (GraalVM updater) installieren mit

Dann tragen wir noch die Java Version in der ~/.bash_profile ein, für das neue Java Home

# Noch die Bash neu starten und testen
java –version
#ok installiert
openjdk 11.0.14 2022-01-18
OpenJDK Runtime Environment GraalVM CE 22.0.0.2 (build 11.0.14+9-jvmci-22.0-b05)
OpenJDK 64-Bit Server VM GraalVM CE 22.0.0.2 (build 11.0.14+9-jvmci-22.0-b05, mixed mode, sharing)

# oder alle Versionen und Pfade anzeigen und testen
/usr/libexec/java_home -V

So, die Vorarbeiten sind nun getan. Dann mal ein Vergleich mit dem REST-Server der CO2-Ampel:

Erst mal das Beispiel-Quarkus-Projekt mit git clonen:

Dann das Native Package bauen:

mvn clean package -Pnative

# Das dauert:
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 50724ms
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 53.475 s

Hier mal ein ausführliches Log, über 1 Minute mit Details:

Das starten des nativ gebauten Programm:

./co2-ampel-beispiel-1.0-SNAPSHOT-runner

im Gegensatz zu dem Normalen:

mvn clean package

Total time: 4.006 s

Da ist das Jar im Target Verzeichnis
nur 4588 Byte groß (info-kleinhirn-1.0-SNAPSHOT.jar) das Native hingegen
39.126.296 MB (info-kleinhirn-1.0-SNAPSHOT-runner). Dafür startet er aber auch nativ in 18 ms:

./info-kleinhirn-1.0-SNAPSHOT-runner

Ein normaler Start:

java -jar quarkus-app/quarkus-run.jar

weitere Infos zum Tooling..