JVM

Eine ausführliche Einführung in die GraalVM – Teil 2: Compiler und Co.

Ihr schreibt ein Programm, und euer Computer führt es aus. Aber habt ihr euch schon mal gefragt, wie das genau geht? Macht euch auf eine spannende Reise gefasst. Java führt euren Quelltext nicht einfach nur aus. Es beobachtet ihn die ganze Zeit, analysiert, optimiert, kompiliert, verwirft das Ergebnis, kompiliert noch mal – kurz, es schraubt während der ganzen Zeit an eurem Code. Was mit Eurem Quelltext passiert, wenn ihr gerade nicht hinschaut, ist diesmal Thema unserer Reihe.

In dubio pro Dukeo: JavaFX in einer neuen Ära mit GraalVM

Gluon veröffentlichte im September 2020 JavaFX 15 [1]. Die perfekte Gelegenheit, darüber zu sprechen, warum JavaFX [2] auf Desktop und Mobilgeräten so relevant ist. Nachfolgend wird das Cross-Kompilieren von Java-Anwendungen mit JavaFX für die Benutzeroberfläche, vom Backend bis zum Frontend, betrachtet. Oberstes Ziel jeder neuen Version von JavaFX ist es, die Abwärtskompatibilität sicherzustellen und mehr Software- und Hardwaretreiber zu unterstützen. Dabei steht Plattformstabilität und deren Kompatibilität für Entwickler und Unternehmen im Vordergrund, die in ihren geschäftskritischen Anwendungen auf Java und JavaFX angewiesen sind. Die GraalVM in Verbindung mit JavaFX ermöglicht neue Wege der Codekompilierung vom Backend bis zum Frontend.

Was geht, GraalVM? Eine ausführliche Einführung in die GraalVM – Teil 1

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.

Im Fokus: Projekt Valhalla

Projekt Valhalla [1] ist ein sehr umfangreiches Projekt, das Oracle bereits im Jahr 2014 gestartet hat. Aktuell gibt es bereits den zweiten Prototyp, am dritten wird gearbeitet. In diesem Artikel erläutern wir die Beweggründe hinter dem Projekt sowie Lösungsansätze und den aktuellen Stand.

Rekordverdächtig strukturiert: Ein Blick auf JEP 359: Java Records

Datenklassen, also Java-Klassen, deren einziger Zweck darin besteht, Daten zu halten und diese über Getter und Setter zugänglich zu machen, gehören in vielen Softwareprojekten zu den größten Sammelstellen von Boilerplate-Code. Für jede neue Klasse jeweils Konstruktoren, die Methoden equals, hashCode und toString und für jedes Feld noch einen Getter und einen Setter zu erstellen, ist für viele Entwickler eine verhasste Zeremonie geworden – sofern sie nicht direkt Bibliotheken wie Lombok einsetzen, um dieser zu entgehen. JEP 359 soll Abhilfe schaffen.

Das eierlegende Truffle-Schwein: Neue polyglotte Programmierung auf der JVM

Viele, die im Java-Umfeld unterwegs sind, werden von ihr gehört haben: der sagenumwobenen GraalVM. Diese „magische“ neue Virtual Machine für Java soll vor allem für blanke Performance sorgen, indem sie den Java-Bytecode in nativen Code kompiliert. Dadurch fällt insbesondere der Start-up-Overhead weg, da weite Teile der Initialisierung bereits vom Compiler erledigt werden. So oder so ähnlich ist es vielerorts zu lesen. Doch das ist bei weitem nicht das einzige Feature, das Oracle der GraalVM gegeben hat. Hinzu kommt, dass sie zu nichts weniger das Potenzial hat, als eine neue Ära der polyglotten Programmierung auf der JVM einzuläuten. Die Rede ist vom Truffle API, einem generischen Framework zur Implementierung von Interpretern.

Deep Learning: Training von TensorFlow-Modellen mit JVM-Sprachen

Zwar gibt es mit Frameworks wie DL4J mächtige und umfangreiche Machine-Learning-Lösungen für die JVM, dennoch kann es in der Praxis vorkommen, dass der Einsatz von TensorFlow notwendig wird. Das kann beispielsweise der Fall sein, wenn es einen bestimmten Algorithmus nur in einer TensorFlow-Implementierung gibt und der Portierungsaufwand in ein anderes Framework zu hoch ist. Zwar interagiert man mit TensorFlow über ein Python API, die zugrunde liegende Engine jedoch ist in C++ geschrieben. Mit Hilfe der TensorFlow-Java-Wrapper-Bibliothek kann man deshalb sowohl Training als auch Inferenz von TensorFlow-Modellen aus der JVM heraus betreiben, ohne auf Python angewiesen zu sein. So können bestehende Schnittstellen, Datenquellen und Infrastruktur mit TensorFlow integriert werden, ohne die JVM zu verlassen.

Java zu statisch? So wird Java dynamischer!

Obwohl Javas strenges Typsystem Entwicklern dabei hilft, Fehler beim Coden zu vermeiden, beschränkt es natürlich auf der anderen Seite deren Flexibilität, die die Nutzung von dynamischen so attraktiv macht. In seiner Session von der W-JAX 2018 gibt Rafael Winterhalter, Software Consultant bei Scienta, eine Einführung in die Codegenerierung zur Laufzeit und erklärt, wie man dies auf der Java-Plattform nutzen kann.

  • 1
  • 2