Die Java Core Days der JAX 2012

Die Revolution am Java-Kern – Java Core Days der JAX 2012

Hartmut Schlosser

„Mit dem JDK 7 hat die Java-Plattform nach Jahren des Stillstandes einen erheblichen Schritt nach vorne gemacht.“ Mit diesem Motto startete Moderatorin Angelika Langer in zwei JAX-Thementage, die sich ausschließlich dem „Java Core“ widmeten. Und in der Tat ist seit der Übernahme von Sun durch Oracle wieder Bewegung gekommen in den Kernbereich der Java-Plattform. Die Änderungen aus Java 7 bildeten deshalb einen wichtigen roten Faden durch das Programm der „Java Core“ Special Days, immer mit der praxisnahen Fragestellung, was diese Neuerungen am Sprachkern für die Java-Projekte der JAX-Besucher bedeuten.

Doch nicht nur die Aufarbeitung des Java-7-Release stand auf dem Programm. Mit „Lambdas, Lambdas, Lambdas“ bezeichnete Langer das zweite Leitthema der Tage, das den Blick nach vorne richtete hin zu Java 8: Die Teilnehmer erhielten Einblicke in aktuelle Entwicklungsstände der Java-8-Spezifikationen, erfuhren beispielsweise, wie in Java 8 die Herausforderungen durch die Multicore-Architekturen bewältigt werden sollen, welche Optimierungsmöglichkeiten der Java Virtual Machine die eigenen Java-Projekte weiterbringen können und wie die Plattformunterstützung für dynamische Sprachen erweitert werden soll (Stichwort: InvokeDynamic).

Das Line-Up der Java Core Days: Angelika Langer, Maurizio Cimadamore, Arno Haase, Klaus Kreft, Anton Arhipov, Charles Nutter, Fredrik Öhrström, Volker Simonis
Von Java-Kuriositäten, Fork/Join und Lambda-Ausdrücken

Amüsant ging es am Mittwochmorgen los, mit Arno Haases „Java-Kuriositätenkabinett“. Arno führte Skurrilitäten des Java-Code-Universums vor – etwa einen UnChecker für Exceptions -, in live programmierten Codeschnipseln, die überraschende Effekte zeitigten. Dennoch zielte die Session nicht nur auf die Unterhaltung der Zuhörer ab, die Erklärungen der Phänomene erlaubten tiefe Einblicke in die Interna von Java – und waren damit bestens geeignet für den sanften Einstieg in den Java Core.

Denn Klaus Kreft ging im Anschluss ans Eingemachte und stellte das seit Java 7 verfügbare Fork-Join-Framework vor. Es handelt sich dabei um einen Thread-Pool für die Parallelverarbeitung rekursiver Aufgaben. Dabei werden Tasks rekursiv in Subtasks aufgegliedert, diese Subtasks gestartet und aus den Teilergebnissen schließlich ein Gesamtergebnis produziert. Kreft erklärte den Unterschied zum bisherigen Thread Pool: Da solche Tasks voneinander abhängen – jeder Task wartet auf das Ergebnis seiner Subtasks – sei der herkömmliche, bereits seit Java 5 im JDK enthaltene Thread Pool ungeeignet. Die Klasse ThreadPoolExecutor ist nur für voneinander unabhängige Tasks gedacht. Die neue Klasse ForkJoinPool liefert in Java 7 nun eine Thread-Pool-Implementierung, die für das Abarbeiten rekursiver Aufgaben angelegt ist.

Von Java 7 nach Java 8. Diesen Weg legte Moderatorin Angelika Langer in ihrer Session „Lambdas in Java 8“ selbst zurück. In der ersten von drei Lambda-Sessions der Java Core Days ging es um die Vorstellung von SAM-(Single-Abstract-Method-)Typen, Lambda-Ausdrücken, Extension-Methoden, Method References und Local Variable Capture. Langer demonstrierte, dass es im Project Lambda für Java 8 um mehr geht, als nur um „Closures“. Insgesamt wird daran gearbeitet, Java für die Multicore-Programmierung fit zu machen.

Mit Charles Nutter konnte ein international renommierter Experte auf dem Gebiet der JVM für den Java Core Day gewonnen werden. Zum ersten Mal gab es in Java 7 bekanntlich neuen Bytecode, der vor allem die Implementierung alternativer JVM-Sprachen erleichtert. Charly Nutter als Hauptentwickler von JRuby bezeichnete dies als „Revolution“ für die JVM, und zeigte in seiner Session „JVM JIT for Dummies“, was mit dem Java-Code passiert, nachdem man diesen der JVM übergeben hat. Live wurde hinabgetaucht vom Bytecode bis in die Tiefen des Assembler-Codes – runter bis zum Prozessor-Kern also. Wer den Dingen auf den Grund gehen wollte, kam hier voll auf seine Kosten und konnte lernen, seinen Code so zu optimieren, dass er so schnell wie möglich abgearbeitet wird.

Lambda-Ausdrücke, Method References und Extension Methods präsentierte im Anschluss Maurizio Cimadamore, Oracles Tech-Lead für den Compiler Support der JDK 8 Features. Bekanntlich steht die endgültige Ausformung von Project Lambda noch an. Cimadamore konnte aber Einblicke in die aktuellen Diskussionen geben und die Gründe für so manche Entscheidung erläutern, die zum aktuellen Design-Entwurf geführt haben.

JAX-Besucher sind in der Regel technikbegeisterte Menschen mit einem hohen Stehvermögen – und so ließen sich etliche Hardcore-Entwickler die Night School von Fredrik Öhrström, JRockit und Hotspot JVM-Entwickler aus Oracles Java-Sprachentwicklungsteam, nicht entgehen. Um 20:45 Uhr warf er nochmals die Maschinen an und baute live mit dem Publikum das OpenJDK zusammen.

Von Bytecode, InvokeDynamic und JVM Internals

Um 8:30 Uhr standen am Donnerstag dann schon wieder gut 80 Java-Core-Interessierte auf der Matte, im prall gefüllten Dijon-Saal, und ließen sich von ZeroTurnarounds Anton Arhipov in die Geheimnisse des Bytecodes einführen. Die Einstiegshürde des Tags II war wieder niedrig gewählt, und so wurden auch Neueinsteiger sanft auf Java-Core-Themen eingestimmt.

Für alle, die am Vortag noch nicht genug von Lambdas hatten, zeigte Fredrik Öhrström in „The Future of Java on Multi-Core, Lambdas, Spliterators and Methods“ die Feinheiten. Öhrström führte am Beispiel des JIT-Compilers von JRockIt vor, dass mittels InvokeDynamic die für Java 8 geplanten Lambda-Ausdrücke erst richtig effizient implementiert werden können. Dabei machte Öhrström klar, dass Lambdas allein für eine Verbesserung der Multicore-Programmierung noch nicht ausreichen. Auch Veränderungen im JDK und an der JVM seien vonnöten, wolle man das Beste aus seinen Kernen herausholen.

Volker Simonis, Mitglied der SAP JVM & JIT Compiler Technology Group, tauchte dann in seiner Session „OpenJDK JVM Internals“
in die OpenJDK JVM ab und baute eine Debug-Version der OpenJDK HotSpot VM zusammen. So wurde sichtbar, welcher Bytecode die VM gerade ausführt und welcher Assember Code vom JIT Compiler generiert wird – beispielsweise um zu überprüfen, ob die eigene als „Optimierung“ gedachte Code-Veränderung wirklich wie erwartet optimiert.

Hatte Charly Nutter am Donnerstag bereits seinen Aufrtitt auf der Keynotebühne („Invokedynamic: You ain’t seen nothing yet“), konnte er sein Lieblingsthema „InvokeDynamic“ in seiner Abschlusssession „Invokedynamic Deep Dive“ so richtig ausleben. Seine Aussage:

Invokedynamic is the most important change to the JVM ever.

Doch worum geht es dabei eigentlich?

Mit der neuen Anweisung invokedynamic lassen sich in Java 7 Methoden aufrufen, ohne vorher zu prüfen, zu welcher Klasse die Methode gehört, von welchem Typ ihr Rückgabewert ist oder welche Methodenparameter sie verwendet. Interessant ist dieses Feature nicht für eine statische Sprache wie Java, bei der der Typ jedes Objekts sowie die gesamte Signatur einer Methode zur Übersetzungszeit feststehen. Dementsprechend kommt inkovedynamic im Java-Compiler nicht zum Einsatz. Methoden dynamischer Sprachen hingegen verfügen zur Übersetzungszeit über keine festgelegte Signatur, was ihre Implementierung für die Java Virtual Machine bisher erschwerte.

Charles Nutter führt die Möglichkeiten von InvokeDynamic vor

Charly führte die Vorteile von invokedynamic live vor, indem er eine einfache dynamische Sprache implementierte. Das Publikum versuchte zu folgen, was den meisten wohl gerade so gelang. Nur für Jenkins-Chefentwickler Kohsuke Kawaguchi, der im Publikum saß, war Charlys Beispiel nicht anspruchsvoll genug. Auf seinen Wunsch hin wurden spontan einige weitere dynamische Features eingebaut, die dann aber aufgrund der Kürze der Zeit nicht zu Ende geführt werden konnten. Dennoch: ein Schlagabtausch auf hohem Niveau zwischen zwei der hellsten Köpfe der Java-Szene, wie man ihm selten beiwohnen kann – eben hier, auf dem Java Core Day der JAX 2012.

Der Java Core ist wieder spannend geworden

Das Interesse, den Sachen auf den Grund zu gehen, die Lust, unter die Motorhaube der JVM zu blicken oder das Bedürfnis, die neuesten Entwicklungen der Java-Plattform hautnah mitzuverfolgen – Beweggründe gab es sicherlich viele für einen Besuch der Java Core Days. Fest steht, dass das tiefe Eintauchen in den Kern der Java-Plattform es ermöglicht, das Optimale aus seinem Projekt herauszuholen. Und so fanden die zehn Sessions der Java Core Days auch in ausnahmslos prall gefüllten Sälen statt. Der Java Core ist wieder spannend geworden – und gehört damit auch als fester Bestandteil in den Kern der JAX.

Geschrieben von
Hartmut Schlosser
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.