Neue Java-Version erschienen

Java 12 ist da: Das sind die Highlights!

Hartmut Schlosser

© Shutterstock / DAN SCANDAL

 

Java 12 ist da. Die neue Java-Version kann ab sofort heruntergeladen werden. Enthalten sind acht neue Features, darunter eine Preview der erweiterten Switch Expressions.

Java 12 – die Highlights

Java 12 ist das erste Feature-Release nach der LTS-( Longterm-Support-)Version Java 11 vor sechs Monaten. Mit der Veröffentlichung konnte der neue, sechsmonatige Release-Zyklus für neue Java-Versionen eingehalten werden. Umgesetzt wurden insgesamt 8 JEPs (Java Enhancement Proposals):

  • JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
  • JEP 230: Microbenchmark Suite
  • JEP 325: Switch Expressions (Preview)
  • JEP 334: JVM Constants API
  • JEP 340: One AArch64 Port, Not Two
  • JEP 341: Default CDS Archives
  • JEP 344: Abortable Mixed Collections for G1
  • JEP 346: Promptly Return Unused Committed Memory from G1

Donald Smith, Oracles Senior Director Product Management für Java, hebt im Gespräch mit JAXenter die neuen Switch Expressions als eines der Highlights in Java 12 hervor:

Java 12 bringt unser erstes Preview-Feature in Form von Switch Expressions mit, welches letztlich einen großen Teil des Language Supports für Pattern Matching darstellen wird. Donald Smith

Den schnelleren Release-Zyklus für neue Java-Versionen beurteilt Donald positiv:

Der neue Release-Zyklus hat sich als unglaublich effektiv erwiesen. Wir freuen uns sehr darüber, dass Features wie der neue TLS1.3-Support dadurch schon seit dem Release von Java 11 in Produktion gehen konnten. Das hätte ansonsten womöglich einige Jahre warten müssen.

Während der Entwicklung von Java 12 wurde uns klar, dass das Feature „Raw String Literals“ noch nicht reif für eine Integration ins JDK war. Aufgrund des neuen Zyklus konnten wir es einfach abkoppeln, um es nun weiter zu diskutieren und zu verfeinern. Es ist großartig zu wissen, dass es nicht Jahre dauert, bis wir eine neue Gelegenheit zur Veröffentlichung bekommen. Donald Smith

Java 12: Die Neuerungen auf einen Blick

Java 12 bringt – neben zahlreichen Bugfixes – acht neue Features mit, die die Entwicklerproduktivität fördern sollen:

JEP 189 – Shenandoah Garbage Collector (Experimental)

Shenandoah ist ein Garbage Collector für Java, der für seine sehr kurzen STW-Pausen bekannt ist. Entwickelt wurde der Collector von Red Hat, allerdings soll er nicht alle vorhandenen Alternativen verdrängen – trotz seiner Vorteile. Als Alternativen werden unter anderem Zing/Azul, ZGC, G1 und CMS genannt, wobei gerade der Vergleich von Shenandoah mit ZGC interessant sein dürfte. Das Feature wird zunächst experimentell zum JDK hinzugefügt.

JEP 230 – Microbenchmark Suite

Bislang ist die Microbenchmark Suite ein eigenständiges Projekt und wird auch als solches verwaltet. In JEP 230 wird vorgeschlagen, eine grundlegende Benchmark Suite direkt in den Source Code des JDKs zu implementieren. Damit sollen Entwickler, so das Ziel, einfacher existierende Microbenchmarks ausführen bzw. neue erstellen können. Basieren soll das Ganze auf dem Java Microbenchmark Harness, in diesem Fall sollen auch Updates des JMH unterstützt werden. Das ist gleichzeitig auch eines der Risiken: JDK Builds würden damit auf einer Version des JMH basieren. Problematisch für viele Nutzer könnte auch der vermutlich gravierende Anstieg der Build-Zeiten und der Größe des Quelltext-Repositorys werden. Dafür könnten Entwickler aber auf ein Set von etwa einhundert Benchmarks direkt zugreifen, die in der Suite integriert werden sollen.

JEP 325 – Switch Expressions

Mit JEP 325 wird vorgeschlagen, die Switch-Anweisung zu erweitern, sodass sie entweder als Anweisung (Statement) oder als Ausdruck (Expression) genutzt werden kann. Beide Formen sollen dabei in der Lage sein, entweder „traditionelle“ oder „simplifizierte“ Variablen und Kontrollstrukturen zu nutzen. Ziel dieses JEPs ist es, das tägliche Programmieren zu vereinfachen und den Weg für Pattern Matching (JEP 305) in Verbindung mit der Anweisung switch zu ebnen. JEP 325 ist ein sogenanntes Preview Language Feature.

JEP 334 – JVM Constants API

JEP 334 beinhaltet ein neues API für das Erstellen nomineller Beschreibungen wichtiger Dateiklassen- und Laufzeit-Artefakte in Form von Konstanten, die aus einem Pool von Konstanten geladen werden. Dieses Sammelsurium wertbasierter symbolischer Referenztypen (JVMS 5.1) sollen im neuen Package java.lang.invoke.constant enthalten sein und die Beschreibung jeder ladbaren Konstante ermöglichen. Ursprünglich war das API eine Unterfunktion des JEP 303 (Intrinsics for the LDC and INVOKEDYNAMIC Instructions), sodass JEP 303 nun von JEP 334 abhängt.

JEP 340 – One AArch64 Port, Not Two

Das JEP 340 wurde erstellt, um sämtliche Sourcen zu entfernen, die mit dem arm64-Port zusammenhängen. Im JDK bleiben sollen allerdings der 32-bit ARM-Port und der 64-bit aarch64-Port. Entwickler, so verspricht man sich, brauchen sich dann nicht mehr mit zwei unterschiedlichen 64-bit ARM-Implementierungen herumschlagen. Zusätzlich fällt die Arbeit weg, gleich zwei dieser Ports verwalten und aktuell halten zu müssen.

JEP 341 – Default CDS Archives

Durch sogenanntes Class Data Sharing (CDS) kann die Startzeit von Java-Anwendungen reduziert werden, das gilt insbesondere für kleinere Anwendungen. Zudem hilft es dabei, den Footprint ein wenig zu verringern. Da man, um dieses Feature nutzen zu können, allerdings den befehl java -Xshare:dump ausführen muss, ist die Nutzung noch nicht allzu verbreitet. Durch das JEP 341 soll nun CDS mit der Standard-Klassenliste auch ohne diesen zusätzlichen Schritt automatisch für native 64-bit Builds genutzt werden. Die Unterstützung für 32-bit Builds und Cross-kompilierte Builds könnte in einem späteren Release hinzukommen.

JEP 344 – Abortable Mixed Collections for G1

JEP 344 sieht vor, den Garbace Collector G1 zu verbessern. Wählen die Auswahlheuristiken des Collection Sets immer wieder eine falsche Anzahl an Regionen aus, sollte das Collection Set zweigeteilt werden. Es sollte dann bestenfalls aus einem obligatorischen und einem optionalen Teil bestehen. Ersterer sollte dann aus den Teilen bestehen, die G1 nicht inkrementell verarbeiten kann (neue Regionen zum Beispiel), Letzterer sollte nur aus alten Regionen bestehen. Nach dem Pflichtteil wird dann der optionale Teil verarbeitet, G1 kann anschließend entscheiden, das Sammeln (basierend auf der verbleibenden Zeit) einzustellen. Wird die Garbage Collection dadurch wieder genauer, kann der optionale Teil schrumpfen, kommt es allerdings wieder zu Ungenauigkeiten, wird wieder gesplittet.

JEP 346 – Promptly Return Unused Committed Memory from G1

Um G1 geht es auch in JEP 346: In diesem Fall geht es darum, den G1 Garbace Collector insofern zu verbessern, dass der für den Java Heap reservierte Speicher wieder an das Betriebssystem übergeben wird, wenn G1 sich im Leerlauf befindet.

Grafisch aufbereitet und mit Beispielen versehen finden Sie die Neuerungen in Java 12 in unserem Cheat Sheet:

Get Java 12

Laut Oracles offizieller Mitteilung wird das Oracle JDK 12 mindestens zwei Updates erhalten, bevor es im Oktober des Jahres von JDK 13 abgelöst wird. Der Download ist unter https://jdk.java.net/12/ möglich.

Eine detaillierte Einführung in die Neuerungen von Java 12 gibt JAXenter-Autor Falk Sippach in seinem Artikel: Java 12: Und halbjährlich grüßt das Murmeltier.

Java 12: Das sind die neuen Features!

Verwandte Themen:

Geschrieben von
Hartmut Schlosser
Hartmut Schlosser
Content-Stratege, IT-Redakteur, Storyteller – als Online-Teamlead bei S&S Media ist Hartmut Schlosser immer auf der Suche nach der Geschichte hinter der News. #java #eclipse #devops #machinelearning #seo. Zum Lächeln bringen ihn kreative Aktionen, die den Leser bewegen. @hschlosser
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
4000
  Subscribe  
Benachrichtige mich zu: