Java 10: Experimenteller Graal JIT-Compiler (JEP 317) – Aktivierung & Hintergründe
JEP 317 – Experimental Java-Based JIT Compiler
Der klassische JIT-Compiler (C2) ist in C++ implementiert. Java 10 führt Graal ein: einen in Java geschriebenen, experimentellen JIT-Compiler, der über die JVM Compiler Interface (JVMCI) (eingeführt in Java 9) in die HotSpot VM eingebunden wird.
Aktivierung
java -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler MyApp
UnlockExperimentalVMOptionsschaltet experimentelle VM-Optionen frei.UseJVMCICompileraktiviert Graal als JIT-Compiler.
Eigenschaften von Graal
- In Java geschrieben: Einfacherer Compiler-Code, leichter erweiterbar, sicherer (Memory Safety).
- JVMCI-Plugin: Dynamisch ladbar, austauschbar zur Laufzeit.
- Polyglot: Unterstützt Interpretation anderer Sprachen (JavaScript, Python, Ruby, R, WASM) via Truffle Framework.
- Plattform: Initial für Linux/x64 getestet/zielgerichtet.
Risiken & Annahmen
- Experimentell: Nicht für Produktion empfohlen.
- Performance: Kann bei manchen Benchmarks hinter C2 zurückbleiben; Optimierungen laufen weiter.
- Stabilität: Kann VM-Crashes oder falsche Kompilierung verursachen (selten, aber möglich).
- Test-Matrix: Validierung gegen HotSpot-Test-Suite mit diversen Flag-Kombinationen läuft kontinuierlich.
Wann lohnt sich ein Test?
- Entwicklung von JVM-Sprachen / Truffle-Interpretern.
- Forschung zu JIT-Kompilation, Compiler-Optimierungen.
- Applikationen mit starker Polyglot-Nutzung (z. B. Node.js auf GraalVM).
Hinweis
Für produktive Workloads bleibt der Standard-C2-Compiler (oder GraalVM Enterprise mit Support) die empfohlene Wahl. Graal im OpenJDK 10 ist primär ein Technologie-Vorschau.
Java
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
- Java Strings meistern: Erstellung, Methoden und Best Practices
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
- Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
- Java Vector verstehen: Verwendung, Funktionen und Vergleich mit ArrayList