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.

In Pocket speichern vorlesen Druckansicht 46 Kommentare lesen

(Bild: Shutterstock)

Lesezeit: 4 Min.
Inhaltsverzeichnis

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.

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.

Die Tabelle zeigt den Größenunterschied der Basis-JDK-Distribution in GraalVM 22.2 gegenüber der vollständigen Distribution mit JavaScript, LLVM und VisualVM in Version 22.1.

(Bild: Oracle)

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.

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.

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
  }
}

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.

Der Heap Dump der nativen Executables lässt sich mit ViausVM analysieren.

(Bild: Oracle)

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)