Mehr als nur verbesserte Performance

Brian Goetz veröffentlicht Mission Statement für „Project Valhalla“

Dominik Mohilo

© Shutterstock.com / Hank Shiffman

Bereits zwei Jahre ist es her, seitdem Project Valhalla angekündigt wurde. Unter diesem Decknamen finden die Arbeiten an einigen neuen, teils revolutionären Features für Java statt. Die finalisierte Fassung soll in einer zukünftigen Java-Version fest in die Programmiersprache eingebaut werden. Nun hat Projektleiter Brian Goetz ein Mission Statement veröffentlicht, das anzeigt, was wir erwarten dürfen.

Java galt lange Zeit als eine eher gemächlich performante Programmiersprache. Dank etlicher Optimierungen der JVM hat sich dies grundlegend geändert. So ist Java heute etwa genauso schnell wie C# und nicht bedeutend langsamer als C oder C++. Im Vergleich mit Ruby, PHP oder Python hat Java mittlerweile deutlich die Nase vorne. Dennoch könnte die Performance noch ein wenig besser sein.

Viele vermuteten denn auch, dass die verbesserte Performance das Hauptziel von „Valhalla“ sein würde, dem neuen OpenJDK-Projekt, das 2014 von Brian Goetz vorgestellt wurde. In seinem aktuellen Mission Statement, in dem die Ziele von Valhalla transparent werden, räumt Goetz nun mit dieser These auf. Es gehe, so der leitende Oracle-Entwickler, zwar auch um die Performanz von Java, doch man würde oft vergessen, was noch wichtig sei: Sicherheit, Abstraktion, Datenkapselung, Ausdrucksstärke, Wartbarkeit und die Weiterentwicklung kompatibler Bibliotheken.

Lesen Sie auch: JavaOne 2016 Highlights: “Wenn man sich Java 9 ansieht, kommt richtig Appetit auf”

Drei Ziele

Goetz formuliert in seinem Artikel drei klare Ziele für Valhalla: Das erste ist es, das Memory Layout der Java Virtual Machine (JVM) an die Anforderungen moderner Hardware anzupassen. Zum zweiten geht es darum, die Erweiterung der Generics um eine Abstraktion sämtlicher Typen (inklusive primitiver Typen, Werttypen und voids) zu erlauben. Drittes Ziel sei es schließlich, existierende Bibliotheken – allen voran die des JDKs – fit für diese neuen Features zu machen.

Um das erste Ziel zu erreichen, bringt Project Valhalla sogenannte Value Types ins Spiel. Diese Aggregate funktionieren wie traditionelle Java-Klassen und besitzen keine eigene Identität. Da durch diese neuen Typen der Java-Grundsatz „alles ist ein Objekt“ ausgehebelt wird, können Werte, wie es mit primitiven Typen heute schon möglich ist, in Objekte, Arrays und andere Werte eingebaut werden. Dadurch können flachere Datenstrukturen erstellt werden. Weil kein Speicher für Objekt-Header und -Pointer verschwendet wird, sind auch dichtere Datenstrukturen möglich.

Ob dies nun in erster Linie nur der Performance von Java zugutekommt? Brian Goetz sieht es ein wenig differenzierter:

If you view values as being „faster objects“, you could indeed view this fundamental aspect of Valhalla as being primarily about efficiency. But equally, you could view them as „programmable primitives“, in which case it also becomes about better abstraction, encapsulation, readability, maintainability, and type safety. Which is the real point – that we need not force users to choose between abstraction / encapsulation / safety and performance. We can have both. Whether you call that „cheaper objects“ or „richer primitives“, the end result is the same.

In Bezug auf Generics beschreibt Brian Goetz die derzeitige Situation als sehr unbefriedigend und ineffizient. Derzeit ist es nämlich nur möglich, Generics über Referenztypen zu abstrahieren, was die Ausdrucksstärke von Bibliotheken vermindert und deren Anforderungen erhöht. Manche Methoden (etwa Arrays.fill()) müssen bis zu neun Mal geschrieben werden.

Ein besserer Ansatz ist, so Goetz, wenn eine generische Klasse oder Methode einmal geschrieben und dann über sämtliche mögliche Datentypen abstrahiert werden könnte:

Being able to write things once, rather than having an ad-hoc explosion of types and implementations (which often propagates into further explosion at the client site), means simpler, more expressive, more regular, more testable, more composible libraries. Without giving up performance when dealing with primitives and values, as boxing does today.

Um diese beiden Ziele abzurunden, sollten natürlich auch bestehende Bibliotheken, sofern möglich, an die neuen Features angepasst werden. Es geht dabei vor allem darum, die neuen Funktionen auf die Art und Weise in die existierenden Bibliotheken einzubinden, dass diese Features sich anfühlen, als seien sie ein nativer Bestandteil. Dies soll das Sterben von bestehenden Bibliotheken, deren andere Inhalte mittlerweile weit verbreitet sind, verhindern.

Fazit

Zusammenfassend schreibt Brian Goetz, dass das Projekt Valhalla durchaus aus Erwägungen der Performanz motiviert sei. Es sei allerdings besser, es als eine Verbesserung der Sicherheit, Abstraktion, Datenkapselung, Ausdrucksstärke und Wartbarkeit anzusehen, die keinen negativen Einfluss auf die Performance hat.

Lesen Sie auch: Oh, wie schön ist Panama! – Neues OpenJDK-Projekt vorgeschlagen

Das vollständige Mission Statement von Brian Goetz findet sich in der Valhalla-Spec-Experts Mailing-Liste. Weitere Informationen zum Projekt Valhalla gibt es auf der Homepage des Projektes.

UPDATE 19.10.2016: Ob Projekt Valhalla bereits in der Java-Version 10 enthalten sein wird – wie in der ersten Fassung dieses Artikels vermutet – ist offenbar noch nicht geklärt. Brian Goetz hat JAXenter gegenüber klargestellt:

We have not targeted this set of features at Java 10. This is something we are working on but not yet targeted to a release. Brian Goetz

Wir haben die entsprechenden Stellen im Artikel angepasst.

.

Verwandte Themen:

Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Hinterlasse einen Kommentar

3 Kommentare auf "Brian Goetz veröffentlicht Mission Statement für „Project Valhalla“"

avatar
400
  Subscribe  
Benachrichtige mich zu:
TestP
Gast

Da werden sie aber ordentlich die JVM umbauen müssen. Bisher haben sie das gemieden wie der Teufel das Weihwasser und fast alle neuen Features lieber in den Compiler gepackt. Aber wenn sie schon die JVM anfassen dann sollten sie vielleicht auch gleich reified generics einbauen.

Grüße

Brian Goetz
Gast

We have not targeted this set of features at Java 10; please correct. This is something we are working on but not yet targeted to a release.
P