© jamesjoong/Shutterstock.com, © S&S Media/Bianca Röder
Java Magazin
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.

Wolfgang Weigend


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.

Abb. 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 geschr...

Java Magazin
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.

Wolfgang Weigend


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.

Abb. 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 geschr...

Neugierig geworden?


    
Loading...

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