Java 12 Überblick

Java 12 ist das nächste Major-Release und bringt einige Neuerungen mit sich. Diese umfassen sowohl größere Änderungen, wie die Switch-Expressions, als auch kleinere Verbesserungen in der JVM, in der Klassenbibliothek und bei der Garbage Collection. Im Folgenden werden wir uns einen groben Überblick über die Änderungen verschaffen.

Allgemeines

Switch-Expression

Im Gegensatz zum klassischen Switch-Statement, hat die Switch-Expression einen Rückgabewert. Dadurch lässt sich switch nun um einiges flexibler und fehlerresistenter einsetzen.

Eine detailliertere Übersicht über das neue Feature findet sich in einem separaten Blogpost: Switch-Expressions in Java 12.

Neue Microbenchmark Suite

Mit dem Release des JDK 12 wird eine Microbenchmark Suite ausgeliefert. Diese basiert auf dem bereits bekannten, bisher aber nicht direkt im JDK enthaltenen Java Microbenchmark Harness (JMH). Dank der eingebundenen Benchmark Suite können auf sehr einfache Art und Weise Benchmarks erstellt werden. Nachteil des Ganzen ist, dass durch die Bindung an JMH und dessen künftige Updates das JDK selbst von diesem abhängig wird.

JVM Constants API

Java 12 bringt eine neue API zur Beschreibung der Teile des Konstanten-Pools, den jedes Java-Class-File besitzt. In diesem Pool sind Konstanten abgelegt, die erst durch ihren Aufruf während der Laufzeit geladen werden. Das Package java.lang.invoke.constant wird künftig die Beschreibung dieser Konstanten erlauben. Details hierzu im JEP 334. Aufgrund der ursprünglichen Unterordnung dieses Features zu JEP 303 besteht nun eine Abhängigkeit zu diesem JEP.

One AArch64 Port, Not Two

Es werden alle Sourcen entfernt, die mit dem arm64 Port zu tun haben. Bleiben wird der 32 und der 64-Bit ARM Port. Diese Änderung soll vermeiden, dass Entwickler zwei 64-Bit Implementierungen des ARM Ports behandeln müssen. Details hierzu finden sich im JEP 340.

Garbage Collection & Performance

Neuer Garbage Collection Algorithmus “Shenandoah” (experimentell)

Shenandoah ist ein Garbage Collection-Algorithmus, der ursprünglich von Red Hat entwickelt wurde. Er ist auf hohe Reaktionsfähigkeit der Anwendung optimiert. Dies begründet sich auf, im Vergleich zu den Alternativen, kurzen, vorhersehbaren Stop-The-World-Pausen. Shenandoah soll jedoch nicht als Universallösung fungieren. Im Gegenteil soll er eher eine situationsbedingte Alternative zu den bereits existierenden GC-Algorithmen bieten, sollte Responsiveness besonderen Stellenwert besitzen. Details hierzu im JEP 189.

Abortable Mixed Collections für G1

Der Garbage Collection-Algorithmus G1 hatte bisher das Problem, dass er sich vergleichsweise oft mehr vorgenommen hat, als er in seiner beanspruchten Pause bewältigen konnte. Das führte dazu, dass Sets in der nächsten Pause bereits veraltet waren. Nun soll sich G1 nach wiederholtem Fehlschlagen seine Sets in zwei Teile aufspalten, ein Pflichtset und ein optionales Set. Das Pflichtset sollte möglichst aus neuen Regionen bestehen und das optionale Set aus bereits bekannten. Letztere können inkrementell und damit abbrechbar abgearbeitet werden, bis der GC entscheidet, die Pause hinreichend ausgenutzt zu haben. Wird dadurch eine Verbesserung der GC erzielt, schrumpft der optionale Teil. Wenn nicht, wiederholt sich die Spaltung. Details hierzu im JEP 344.

Promptly Return Unused Committed Memory from G1

Eine weitere Änderung für G1 betrifft die Freigabe des ihm zugewiesenen Speichers für den Java-Heap. Bisher hat G1 diesen teils unnötig lange in Anspruch genommen. Mit Java 12 soll der Speicher dem Betriebssystem zeitnah übergeben werden, während G1 diesen nicht aktiv benötigt. Details hierzu im JEP 346.

Default CDS Archives

CDS (Class-Data-Sharing) Archives, benutzen ein Archiv, in dem Meta-Daten von Klassen abgelegt sind. Diese können dann beim Laden einer neuen JVM schneller eingelesen werden. Somit müssen diese Klassen nicht immer vollständig neu geladen werden. Dies verkürzt die Startup-Zeit von Java Applikationen, verbessert GC-Performance und reduziert den Memory-Footprint. Für 64-Bit Builds wird ab Java 12 die vorher zwar vorhandene aber nicht ohne CLI-Befehl aktivierte Option der CDS Archives zum Default. Details hierzu im JEP 341.

Raw-String-Literals (vorerst verschoben)

Zunächst für Java 12 angekündigt, haben es die Raw-String-Literals nicht in dieses Release geschafft. Trotz der Entscheidung, diese aus Java 12 zu entfernen, sind sie jedoch nicht vom Tisch.

Raw-String-Literals bilden eine Alternative zu den klassischen String-Literalen. Wie der Name bereits vermuten lässt, interpretieren sie den String wie er ist und ignorieren dabei die meisten Escape-Sequenzen. Sie erhöhen stark die Lesbarkeit des Codes in Fällen, in denen bisher Escape-Sequenzen manuell ignoriert werden mussten.

Auch hierzu gibt es auf unserem Blog bereits einen Post, der sich detaillierter mit diesem Thema befasst: Raw-String-Literals geplant nach Java 12.

Short URL for this post: https://wp.me/p4nxik-3o8
This entry was posted in Java Basics and tagged . Bookmark the permalink.

1 Response to Java 12 Überblick

  1. Pingback: Java 13 Überblick | techscouting through the java news

Leave a Reply