Virtuelle Maschine GraalVM 22.2 führt doppelte Schlankheitskur durch
Das modulare GraalVM-JDK verzichtet in der Basis auf separate Runtimes, und für den Build nativer Images benötigt die virtuelle Maschine weniger Speicher.
Oracle hat im turnusmäßigen Quartalsrhythmus GraalVM 22.2 veröffentlicht. Das aktuelle Release bringt eine modulare JDK-Distribution, die gut 40 Prozent schlanker als die vollständige Umgebung ist. Für native Images hat Oracle den Build-Prozess optimiert, der nun mit weniger Speicher auskommt. Außerdem existiert ein zentrales Repository mit Metadaten für native Images.
Ohne JavaScript und LLVM
Das GraalVM JDK ist im neuen Release modular aufgebaut und kommt in der Basisdistribution nur mit der JDK-Runtime daher. Die Laufzeitumgebungen für JavaScript und LLVM sind wie bisher bereits als Erweiterungen für Python oder Ruby separat verfügbar und lassen sich mit gu install js
beziehungsweise gu install llvm
nachinstallieren.
Auch das Tool zur Heap-Analyse VisualVM erfordert neuerdings eine separate Installation. Durch die Modularisierung ist das Basis-GraalJDK in Version 22.2 gut 40 Prozent kleiner als in GraalVM 22.1. Wer die virtuelle Maschine lediglich für Java-Anwendungen auf der JVM verwendet oder native Images nutzt, muss keine Anpassungen vornehmen.
Effizientere Builds
GraalVM bietet mit einem AOT-Compiler (Ahead-of Time) übersetzte native Images als Alternative zum Übersetzen von Bytecode zur Laufzeit über den JIT-Compiler (Just-in Time). Native Images sind eigenständig ausführbare Dateien, die neben den übersetzten Klassen der eigentlichen Anwendung die Klassen der Runtime Library und der Dependencies sowie nativen Code des JDK enthalten. Als Vorteil bringen sie bessere Startzeiten und einen geringeren Speicherbedarf mit.
Die Versionen 21.3 und 22.0 hatten Optimierungen für schlankere Images an Bord, und das 22.1-Release brachte einen Quick-Build-Modus mit, der das Erstellen von Images im Entwicklungsprozess beschleunigt hat. GraalVM 22.2 optimiert nun den Speicherbedarf während des Build-Prozesses. Die Anpassungen sind vor allem für Teams hilfreich, die ihre Anwendungen in Cloud-Diensten oder über GitHub-Actions erstellen. Selbst größere Executables sollen mit 2 GByte Speicher auskommen. Als Referenzanwendung führt Oracle die Spring-Beispielanwendung PetClinic auf, die schon für die Vorversion als Messlatte für den Quick-Build-Modus diente.
Zentrales Metadaten-Repository
Eine weitere Neuerung zielt ebenfalls auf native Images. Standardmäßig kompiliert GraalVM nur die Teile einer Anwendung, die vom zentralen Einstiegspunkt erreichbar sind. Das kann zu Problemen führen, wenn Elemente dadurch im Executable fehlen, aber für Reflexion oder Serialisierung benötigt werden. Um diese Elemente manuell einzuschließen, sind Metadaten mit Konfigurationsinformationen erforderlich. Dabei gilt es nicht nur die eigene Anwendung, sondern auch externe Libraries einzubeziehen.
Lesen Sie auch
Die GraalVM: Javas Sprung in die Gegenwart?
Das aktuelle Release führt ein zentrales GraalVM Reachibility Metadata Repository ein, das als separates Open-Source-Projekt auf GitHub verfügbar ist. In dem Repository können Entwicklerinnen und Entwickler von Libraries oder Frameworks die Metadaten für ihre nativen Images bereitstellen. Wer die externen Bibliotheken nutzt, kann die Informationen aus dem Repository nutzen. Für ein Gradle-Projekt aktivieren folgende Zeilen den Zugriff:
graalvmNative {
metadataRepository {
enabled = true
}
}
Heap Dumps und SOM für native Images
Die Open-Source-Variante GraalVM Community führt in Version 22.2 Heap-Dumps für native Executables ein, die sich mit Werkzeugen wie VisualVM analysieren lassen. Der neue Kommandozeilenparameter -XX:+DumpHeapAndExit
erstellt ein Abbild des anfänglichen Heap beim Start eines native Image durch.
Die Enterprise-Variante von GraalVM kann neuerdings Informationen zu der Software Bill of Materials (SBOM) in native Images einbinden. SBOMs listen alle Zutaten eines Softwareprojekts auf. Dazu gehören neben dem direkten Sourcecode interne und externe Dependencies. Derzeit kann GraalVM das CycloneDX-Format verarbeiten.
Weitere Neuerungen wie den geringeren Speicherbedarf des JIT-Compilers (Just in Time) lassen sich der offiziellen Ankündigung entnehmen. Die GraalVM ist sowohl als Enterprise-Variante als auch in einer Community Edition verfügbar. Der Sourcecode zu Letzterer findet sich im GitHub-Repository, und Binaries lassen sich von der GraalVM-Seite herunterladen.
(rme)