Java-Entwicklung im Soll: JDK 14 ist erschienen

Das JDK 14 umfasst in Summe mehr Neuerungen als die beiden Vorgängerversionen zusammen, darunter auch Pattern Matching und final die Switch Expressions.

Lesezeit: 2 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 120 Beiträge
Von

Oracle und die in die Java-Entwicklung involvierten Parteien haben die Version 14 der Programmierplattform und -sprache veröffentlicht. Das neue Release erscheint rund ein halbes Jahr nach der Freigabe von Java 13, und damit bleiben die Entwickler ihrem vor anderthalb Jahren begonnenen Rhythmus treu, alle halbe Jahre eine neue Sprachversion zu veröffentlichen.

Somit hat man sich von großen Big-Bang-Releases verabschiedet, die zuvor zumeist mehrere Jahre auf sich warten ließen. Dadurch gibt es nun jeweils weniger Neuerungen als früher. Doch die mehr als ein Dutzend neuen Features von Java 14 können sich durchaus sehen lassen, und tatsächlich umfassen sie in Summe mehr JEPs (JDK Enhancement Proposals) als JDK 12 und 13 zusammen. Viele der Neuerungen wurden außerdem über Jahre hinweg im Rahmen der sogenannten Panama- und Amber-Forschungsinitiativen entwickelt und erprobt.

So führt der JEP 305 das Pattern Matching (dt. Mustervergleich) ein. Damit soll sich laut OpenJDK-Dokumentation eine gemeinsame Logik "prägnant und sicher" ausdrücken lassen. Die Motivation für dieses jüngst auch in der Programmiersprache Ruby eingeführte und für C++23 vorgesehene Feature ist, dass es derzeit kein geregeltes Vorgehen hierfür gebe und es an der Zeit sei, das zu reglementieren. Noch hat das Pattern Matching aber Preview-Status.

Im Zuge des JEP 343 (Packaging Tool) entsteht ein Werkzeug, das sich zur Paketierung von Self-contained Java-Anwendungen nutzen lassen soll. Mit dem JEP 345 (NUMA-Aware Memory Allocation for G1) soll sich die Leistung des Garbage Collector G1 auf großen Maschinen verbessern lassen, während die Arbeiten des JEP 349 (JFR Event Streaming) für die kontinuierliche Überwachung von mit dem JDK Flight Recorder aufgezeichneten Daten sorgen sollen.

Die Freigabe des JEP 352 (Non-Volatile Mapped Byte Buffers) gewährt neue Modi zur Dateizuordnung, durch die man die FileChannel-API zum Erstellen von MappedByteBuffer-Instanzen verwenden kann, die sich auf nichtflüchtigen Speicher beziehen. Durch den JEP 358 (Helpful NullPointerExceptions) generiert die JVM nun NullPointerExceptions, die ausgeben, welche Variable null war. Ein weiteres Preview-Feature ist der JEP 359 (Records). Es geht hier um eine Syntax für die Deklaration von Klassen, die als transparente Halter für unveränderliche Daten dienen.

Die im JEP 361 definierten Switch Expressions hatten im JDK 12 und 13 Preview-Status. Nun ist man einen Schritt weiter, und sie sind nun offizieller Bestandteil von Java. Sie sollen die tägliche Arbeit der Entwickler vereinfachen. Switch-Anweisungen können sowohl als Statement als auch als Expression genutzt werden und somit explizit einen Wert zurückliefern. Das Ergebnis einer Switch-Anweisung vom Typ Expression kann somit zum Beispiel einer Variablen zugeordnet werden. Neben dem traditionellen Kontrollfluss lässt sich nun alternativ auch eine stark vereinfachte Variante wählen. Die Switch-Anweisung wird so deutlich schlanker und lesbarer. Letztlich ist der JEP eine Vorbereitung auf das Pattern Matching, bei dem das bisherige switch-Statement zu einigen Unregelmäßigkeiten führen kann.

Beim JEP 362 geht es um die Vorbereitungen dafür, die veralteten Solaris- und SPARC-Ports in einem späteren Release zu entfernen. Einen Schritt weiter ist hier der Concurrent Mark Sweep (CMS) Garbage Collector (GC), der nun im Zuge des JEP 363 beseitigt wurde. Zeitgemäße Garbage-Collector-Ansätze wie ZGC und Shenandoah sind hier mittlerweile der Standard. Ersterer wurde übrigens auf Windows und macOS portiert (JEP 364, JEP 365). Als ebenfalls veraltet gelten nun die "ParallelScavenge + SerialOld GC Combination" (JEP 366) und die Pack200-Tools und -API, die seit JDK 11 als veraltet galt, sie wurden mit dem neuen Release entfernt.

Durch den JEP 368 werden Textblöcke hinzugefügt, die mehrzeilige String-Literale sind, die wiederum keine Escape-Sequenzen benötigen, automatisch Strings auf vorhersehbare Weise formatieren und Entwicklern die Kontrolle über das Format geben. Das Feature ist nicht neu, hat aber weiterhin Preview-Status. Schließlich sei auf den JEP 370 (Foreign-Memory Access API) verwiesen. Die API hat noch Incubator-Status und soll es Java-Programmen ermöglichen, sicher und effizient auf fremden Speicher außerhalb des Java-Heap zuzugreifen.

Java 14 ist kein LTS-Release (Long-Term Support), was bedeutet, dass es mit der Veröffentlichung von Java 15 im September dieses Jahres schon wieder veraltet sein wird. Das nächste LTS-Release wird Java 17 sein, das für September 2021 geplant ist. Die gegenwärtige LTS-Version ist das JDK 11.

Java 14 steht ab sofort zum Herunterladen zur Verfügung und wird schon bald in anderen Implementierungen wie AdoptOpenJDK erhältlich sein. (ane)