© F. J. CARNEROS/Shutterstock.com
Eine ausführliche Einführung in die GraalVM

Was geht, GraalVM?


Nun ist sie also draußen, die neue Java Virtual Machine (JVM) mit dem Namen GraalVM, über die einer von uns (Stephan) schon im vergangenen Frühjahr gebloggt hat [1]. Seit damals hat sich viel getan, die GraalVM hat die Java-Landschaft deutlich verändert. Twitter verwendet sie schon seit Jahren für seine Scala Microservices [2]. Die GraalVM beginnt jetzt auch in der etwas konservativeren Businesswelt Fuß zu fassen, insbesondere im Bereich der Cloud-nativen Anwendungen. Grund genug also, sich die GraalVM noch einmal genau und ausführlich anzusehen und die Frage zu beantworten, ob es sich lohnt, die gute alte JVM durch etwas Neues zu ersetzen.

Starten wir zunächst einmal mit der Definition, was die GraalVM eigentlich ist. Karine hat es vor einiger Zeit so auf den Punkt gebracht: „Die GraalVM ist eine universelle virtuelle Maschine für das Betreiben von Anwendungen, die in Sprachen wie JavaScript, Python, Ruby und R geschrieben sind. Zudem unterstützt sie Sprachen wie C und C++. Überdies kann sie sämtliche Sprachen ausführen, die einen LLVM Compiler haben, dazu gehört sogar FORTRAN. Und natürlich kommt sie wunderbar mit dem gesamten Java-Universum klar, inklusive Scala, Kotlin und (Überraschung!) Java selbst. Das Versprechen der GraalVM ist die absolute Interoperabilität zwischen unterschiedlichsten Programmiersprachen. Vielleicht werden wir also bald polyglotte Anwendungen sehen, die sich eine gemeinsame Instanz einer virtuellen Maschine teilen. Doch die GraalVM kann noch mehr: Sie lässt sich im ‚eingebetteten Modus‘ nutzen, etwa in Verbindung mit der Oracle Database und MySQL.“

Wow, das ist schon ein gewaltiger Brocken. Die GraalVM verspricht eine Menge zu bieten. Wir werden sie uns gemeinsam Stück für Stück ansehen – das wird ein Weilchen dauern. Hier beleuchten wir kurz, worum es bei GraalVM eigentlich geht.

Was ist GraalVM?

GraalVM ist ursprünglich ein Forschungsprojekt der Oracle Labs. Seit 2012 hat das Entwicklungsteam Dutzende wissenschaftlicher Abhandlungen über die GraalVM verfasst. Die erste und einfachste Antwort auf die Frage ist also: GraalVM ist ein bemerkenswert lang andauerndes Forschungsprojekt. Und ein erfolgreiches noch dazu. Das Ergebnis der Forschungen ist ein kommerzielles Produkt mit einem Open-Source-Ableger.

Vieles dabei dreht sich um Futamura-Projektionen [3], mit deren Hilfe Truffle implementiert wurde. Truffle ist der polyglotte Teil der GraalVM, also die Welt von JavaScript, Ruby, R und allen LLVM-Sprachen [4]. Vereinfacht ausgedrückt ist LLVM eine virtuelle Maschine für Sprachen wie C/C++, FORTRAN und viele andere. Der LLVM Compiler konvertiert C-Code in LLVM-Bitcode, der ohne Probleme auf der GraalVM läuft (Abb. 1).

rauh_graalvm_1.tif_fmt1.jpgAbb. 1: Eine Übersicht der GraalVM

Mit anderen Worten: Hätten wir den Quellcode von DOOM, könnten wir das Spiel auf der Java VM spielen. Schade, dass es aus Copyrightgründen so schwer ist, an den Code heranzukommen. Es wäre jedenfalls ein faszinierendes Projekt. Vielleicht habt ihr ja auch Daniel Kurkas legendäre JavaScript-Präsentationen gesehen, die seinerzeit einen JavaScript-Port von DOOM zeigten [5]. Damals nutzte sein Team Emscripten, um den C-Code in JavaScript zu übersetzen. Wir fänden es spannend, das mit der GraalVM noch einmal durchzuführen, damit man die beiden Ansätze miteinander vergleichen kann. Unsere Vermutung: mit GraalVM und LLVM ist die Portierung leichter als mit Emscripten.

Habt ihr bemerkt, dass unsere Liste der von Truffle unterstützten Sprachen eine gar nicht auflistet, nämlich Java? Das ist kein Versehen. Truffle ist in Java geschrieben, es war aber nie dazu gedacht, Java auszuführen. Das ist unpraktisch, weil es bedeutet, dass Truffle keinen Java-Code aufrufen kann. Java ist in der polyglotten Welt von Truffle ein Außenseiter.

Das könnte sich ändern. Es gibt ein aufregendes Projekt im GraalVM-Universum, das sich damit beschäftigt: Espresso. Wir sind uns allerdings nicht sicher, ob es noch aktiv vorangetrieben wird. Die Blogosphäre ist auffällig still, was Espresso betrifft. Die Idee dahinter ist, Java zu einem First-Class-Citizen im Truffle-Universum zu machen. Espresso ist das Versprechen einer wirklich polyglotten Entwicklerwelt. Das Projekt macht es möglich, Java aus JavaScript, Ruby, R und all den anderen Sprachen aufrufen zu können, die von Truffle unterstützt werden.

GraalVM als Plug-in-Ersatz für die JVM

Es gibt noch einen zweiten Teil des GraalVM-Projekts, der aktuell deutlich mehr Beachtung findet. Das Herzstück der GraalVM ist ein neuer C2-Compiler. Einfacher ausgedrückt: GraalVM implementiert einen Teil der virtuellen Maschine von Java neu.

Seit 2019 ist die GraalVM auf Linux bereits „production ready“. Seit Version 20.1.0 wird auch Windows vollständig unterstützt. Um es vorwegzunehmen: Eure Java-Anwendung läuft auf der GraalVM. Alles andere würde uns sehr überraschen. Spannender ist die Frage, ob sie besser läuft als auf der traditionellen JVM.

Das Hauptargument für die GraalVM ist das Versprechen besserer Performance. Die Implementierung von Ruby auf der GraalVM soll bis zu 30-mal schneller laufen als die ursprüngliche Implementierung, sofern man einigen Videos auf YouTube glauben kann [6], [7]. Die Präsentationen sind überzeugend, doch haben wir schon oft die Erfahrung gemacht, dass die Praxis der Anwendungsentwicklung anders aussieht. Wir haben daher verschiedene Szenarien mit JavaScript, Ruby und Java getestet.

Ruby hat sich dabei tatsächlich als angenehme Überraschung herausgestellt. Die GraalVM führt den künstlichen Ruby Benchmark rund 30 Prozent schneller aus als Ruby 2.7.0 selbst. Natürlich gibt es zwei weitere Ruby-Implementierungen, die wir bislang nicht getestet haben – wir sind keine Ruby-Experten. Dennoch sind 30 Prozent mehr Performance ein vielversprechender Start. Außerdem glauben wir fest daran, dass es noch Spielraum nach oben gibt.

Aus Sicht von Java-Entwicklern ist der Boden der Tatsachen näher. Grundsätzlich kann man sagen, dass die GraalVM in etwa gleich schnell wie Oracles HotSpot Compiler ist. Das ist nicht schlecht – aus technologischer Sicht sogar äußerst beeindruckend – lockt im Businessu...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang