Java Virtual Machine: GraalVM 21 startet die Trüffelsuche für Java

Neben einer Anbindung von Java an das Truffle-Framework bringt die JVM-Implementierung erweiterte Funktionen für native Images.

In Pocket speichern vorlesen Druckansicht 16 Kommentare lesen
Lesezeit: 4 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Oracle hat Version 21.0 von GraallVM veröffentlicht. Das Release der virtuellen Maschine bringt vor allem Neuigkeiten für native Images und das Truffle Language Implementation Framework mit. Für Letzteres existiert nun eine experimentelle Implementierung für Java, und die nativen Images lassen sich neuerdings serialisieren.

Die GraalVM setzt auf Hotspot auf und hat zusätzliche Werkzeuge zur Optimierung der Performance an Bord, darunter neben einem JIT-Compiler (Just-in time) einen Ahead-of-time-Compiler, der im Vorfeld Java-Sourcecode in nativen Maschinencode übersetzt. GraalVM bietet zudem von Haus aus Anbindung an Sprachen, die nicht auf die JVM (Java Virtual Machine) ausgelegt sind, wie Python, Ruby oder R.

Das Truffle Language Implementation Framework ist eine Library zum Anbinden beliebiger Sprachen an die GraalVM. Truffle enthält den GraalVM-Compiler und Umsetzungen einiger Programmiersprachen. Mit Version 21 existiert nun eine experimentelle Implementierung von Java auf Truffle, die sowohl für Java SE 8 als auch für Java SE 11 ausgelegt ist.

Java on Truffle bietet eine minimierte Java VM, die alle Core-Komponenten enthält und die APIs der Java Runtime Environment Library libjvm so mitbringt. Die Implementierung erfolgt analog zu der GraalVM-Umsetzung von JavaScript, Ruby, Python und R. Sie ermöglicht unter anderem das Ausführen von Java-Bytecode in einem anderen Kontext als dem der eigentlichen Java VM. Auf die Weise lässt sich beispielsweise eine Java-8-Anwendung in eine Java-11-Applikation einbinden. Auch eine Art Sandboxing ist möglich, um eine unbekannte Anwendung isoliert von der eigentlichen zu starten.

GraalVM bietet native Images als Alternative zur Ausführung von Bytecode in der klassischen JVM: Ein AOT-Compiler erstellt eigenständig ausführbare Dateien, die neben den übersetzen Klassen der eigentlichen Anwendung die Klassen der Runtime Library und der Dependencies sowie aus dem JDK statisch verlinkten Code enthalten.

Das aktuelle GraalVM-Release ermöglicht Serialisierung für native Images, wozu es beim Bau dafür sorgt, dass die Klassenkonstruktoren im nativen Image landen. Entwicklerinnen und Entwickler müssen die zu serialisierenden Klassen in einer separaten Konfigurationsdatei whitelisten. Beim Bau der Native Images lässt sich der Tracing Agent von GraalVM als Unterstützung nutzen.

Letzter bringt im aktuellen Release weitere Funktionen mit und verarbeitet nun Instanzen von Class.getClasses und Class.getDeclaredClasses. Außerdem lassen sich in native Images neuerdings das AWT (Abstract Window Toolkit) und Swing zum Erstellen von UIs unter Linux verwenden.

Bei den anderen Programmiersprachen ist unter anderem das jarray-Modul für Python zu nennen, das eine Kompatibilität mit Jython, einer Java-Implementierung von Python, gewährleisten soll. Außerdem erweitert GraalVM 21 die Unterstützung für die im Bereich Data Science und Machine Learning genutzte Python-Bibliothek Pandas und bindet neu die Visualisierungsbibliothek Matplotlib an.

Für JavaScript bringt das Release Ergänzungen des geplanten ECMAScript-2021-Sprachstandards zu GraalVM darunter Promise.any und Logical Assignment Operators mit. Außerdem stellt nun Node.js Version 12.20.1 die Grundlage für die JavaScript-Verarbeitung dar.

Weitere Neuerungen lassen sich den Release Notes entnehmen. Die GraalVM 21.0 ist sowohl in einer Community Edition als auch in einer Enterprise-Variante verfügbar. Erstere baut für Java auf OpenJDK 1.8.0_282 beziehungsweise 11.0.10, und Letztere setzt auf das Oracle JDK 1.8.0_281 sowie das Oracle JDK 11.0.10 auf.

(rme)