© jamesjoong/Shutterstock.com, © S&S Media/Bianca Röder
Oracles vielsprachige Virtual Machine im Java-Ökosystem

GraalVM startet durch


Die GraalVM ist eine universelle Virtuelle Maschine (VM) für Anwendungen, die in den JVM-basierten Programmiersprachen Java, Scala und Kotlin, den dynamischen Sprachen JavaScript, R, Ruby und Python und den LLVM-basierten Sprachen C/C++ geschrieben wurden [1]. Im Oktober 2019 wurde die auf dem JDK-8-Update 231 basierende GraalVM 19.2.1 veröffentlicht, die Performanceverbesserungen und polyglotte Unterstützung für verschiedene Programmiersprachen bietet. Sie ermöglicht die Sprachinteroperabilität in einer gemeinsamen Laufzeitumgebung und kann eigenständig oder im Kontext von OpenJDK, Node.js sowie der Oracle-Datenbank betrieben werden. Die GraalVM kann wahlweise als Open Source Community Edition (CE) oder als Enterprise Edition (EE) mit OTN-Lizenz verwendet werden.

Die ursprüngliche Entwicklung der GraalVM entstand vor mehreren Jahren in den Oracle Labs und führte zur ersten serienreifen Version GraalVM 19.0 im Mai 2019. Sie fügt sich nahtlos in das Java-Ökosystem ein und bietet mit ihrer Vielsprachigkeit [2] eine Heimat für Programmiersprachen, die mit einem Bytecodecompiler ausgestattet sind. Die GraalVM verwendet das JDK 8 und kann mit dem JDK 11, OpenJDK 11 und höheren Versionen auf Command-Line-Ebene experimentell aktiviert werden:

java -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler –jar my_file.jar 

JDK mit JVM

Innerhalb des Java Development Kit (JDK) sind die Entwicklungswerkzeuge und der Java-Compiler javac angesiedelt. Die Ausführung von Java-Programmen übernimmt das Java Runtime Environment (JRE), entweder als eigenständige Ablaufumgebung oder als Bestandteil des JDK, inklusive der Java HotSpot Virtual Machine (JVM), wie in Abbildung 1 dargestellt. Der Class Loader lädt die erzeugten Java-Klassendateien, der Java-Bytecode wird verifiziert und im ersten Schritt ohne Optimierung vom Interpreter ausgeführt. Die Optimierung von Methoden übernimmt der JIT-Compiler, der anhand von Profiling gesammelten Ausführungsinformationen entscheidet, wie eine Methodenoptimierung durchgeführt werden kann, bevor der Maschinencode erzeugt wird. Die HotSpot VM beheimatet zwei JIT-Compiler, den C1-Client-Compiler zur Minimierung der Start-up-Zeit und den C2-Server-Compiler, mit dem Fokus auf Durchsatzsteigerung und für dauerhafte Performanceverbesserungen. Der C2-Compiler soll den ausgeführten Code intensiv analysieren und die dabei erkannten Optimierungen besser in Maschinencode umsetzen können.

weigend_graal_1.tif_fmt1.jpgAbb. 1: Java Runtime mit JVM

JIT-Compiler mit Tiered Compilation und Graal-Compiler

Beim C1-Client-Compiler kann die Tiered Compilation, durch java –client -XX:+TieredCompilation aktiviert werden, aber der C2-Server-Compiler läuft ohne Tiered Compilation. Die Tiered-Compilation-Ausführungslevel sind wie folgt definiert:

Level 0: interpretierter Code, Level 1: einfacher C1-kompilierter Code ohne Profiling, Level 2: eingeschränkter C1-kompilierter Code mit geringem Profiling, Level 3: vollständiger C1-kompilierter Code mit komplettem Profiling und Level 4: C2-kompilierter Code, der die Profile-Daten der vorherigen Schritte benutzt. Das Java Virtual Machine Compiler Interface (JVMCI) [3] ermöglicht den Austausch vom bisherigen C2-Compiler, der in C++ implementiert wurde (Abb. 2), durch den vollständig in Java geschriebenen Graal-Compiler (Abb. 3). Mit der neuen Just-in-time-Compilertechnologie werden Java-Programme schneller ausgeführt und der optimierte JIT-Compiler übernimmt die Umwandlung vom Java-Bytecode zum Maschinencode. Vorteilhaft ist dabei, dass die Speicherallokierung direkt auf dem Java Heap erfolgt und dass der Bootstrap-Mechanismus begünstigt wird, da der optimierte Graal-Compiler als Bestandteil der JVM in einer Sprache geschrieben ist, die auch die JVM ausführt.

weigend_graal_2.tif_fmt1.jpgAbb. 2: HotSpot VM implementiert mit C++
weigend_graal_3.tif_fmt1.jpgAbb. 3: GraalVM mit Graal-Compiler in Java

Polyglotte GraalVM

Neben den JVM-basierten Sprachen können auch andere Sprachen, die mit dem GraalVM Language Implementation Fra...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang