Neue Versionen von Java erscheinen seit einiger Zeit im halbjährlichen Zyklus. Einige Entwickler erwarten das jeweils neue Release sehnsüchtig, während andere nur den Sprung zur nächsten LTS-Version ernstnehmen. Wie relevant waren die Änderungen in JDK 14 und 15 für die Praxis? Wir versuchen eine Einordnung und Bewertung.
Moderne Programmiersprachen entwickeln sich stetig weiter und werden fortlaufend mit neuen Features ausgestattet. Das ist kein Phänomen von Java, auch andere moderne Programmiersprachen erhalten in regelmäßigen Zyklen Updates. Sie rüsten neue Sprachfeatures nach, verbessern die Syntax – meist hin zu einer kompakteren Schreibweise – oder nehmen erweiterte Merkmale anderer Programmierparadigmen, zum Beispiel aus dem funktionalen Bereich, in das Sprachspektrum auf. Als versierter Java-Entwickler konnte man bekanntermaßen im September 2020 Release 15 des JDK begrüßen. Version JDK 14 wurde bereits im März 2020 released. Bleibt es beim bekannten halbjährlichen Zyklus, dann können wir im März dieses Jahres JDK 16 installieren und bewegen uns mit reichlich Tempo auf die kommende Long-Term-Support-Version 17 von Java zu (Abb. 1).

In dieser dreiteiligen Artikelserie wollen wir die Entwicklung der letzten Sprachversionen aus unterschiedlichen Blickwinkeln betrachten, gewissermaßen auf dem Weg zur neuen LTS-Version JDK 17. Zunächst sehen wir uns an, was die Hauptfeatures der beiden letzten Versionen waren. Hier verliert man schnell den Überblick. Programmiersprachen entwickeln sich nicht im freien Raum, sondern man lernt untereinander und schaut sich bekanntermaßen die Features voneinander ab. Wo steht Java im Vergleich mit anderen Sprachen und einem ähnlichen Einsatzgebiet? Letztendlich braucht es immer den Blick in die Praxis (Quellcode), um die Einsatzfähigkeit neuer Sprachmerkmale zu studieren und ihre Tauglichkeit für die Praxis zu beurteilen.
Gerade für erfahrene Entwickler ist das Neuerlernen eines Sprachfeatures oft mit einer aufwendigen Umgewöhnung verbunden. Man hat sich seinen Stil und seine Art und Weise der Codierung mit den vorhandenen Programmierbefehlen und der bekannten Syntax angewöhnt. Neue Möglichkeiten müssen dann schon überzeugend sein, damit sie in Fleisch und Blut übergehen. Notwendig ist es, dass man sich die Features etwas genauer ansieht – zum Beispiel in Form von Beispielen.
Kernfeatures der Versionen 14 und 15
Java-Version 14 hat sowohl neue Features integriert als auch einige Altlasten entfernt. Wir haben die Informationen in Tabelle 1 und Tabelle 2 zusammengestellt.
JDK 14 | Beschreibung |
---|---|
Pattern Matching for instanceof (Preview): | Einführung von Pattern Matching (Mustervergleich) mit Hilfe des instanceof-Operators |
Packaging Tool | Verpacken der Java-Applikation in ein plattformspezifisches Paket, d. h. Linux: deb und rpm; macOS: pkg und dmg; Windows: msi und exe |
NUMA-Aware Memory Allocation for G1 | NUMA-fähige Speicherzuordnung für den G1 Garbage Collector zur Verbesserung der Leistung |
JFR Event Streaming | Ermöglicht eine kontinuierliche Überwachung von mit dem JDK Flight Recorder aufgezeichneten Daten |
Non-Volatile Mapped Byte Buffers | Non-Volatile Mapped Byte Buffers sieht den Zugriff auf nichtflüchtige Datenspeicher vor; diese (auch persistente Speicher genannt) werden eingesetzt, um Daten dauerhaft zu speichern |
Helpful NullPointerExceptions | Verbesserung der von JVM generierten NullPointerExceptions-Ausnahmemeldung; Entwickler und Supportmitarbeiter erhalten hilfreiche Informationen zur vorzeitigen Beendigung eines Programms |
Records (Preview) | Bieten eine kompakte Syntax für die Definition von Datenklassen |
Switch Expressions | Switch-Ausdrücke vereinfachen die Codierung, indem sie Switch erweitern, sodass der Befehl entweder als Anweisung oder als Ausdruck verwendet werden kann; Switch-Ausdrücke können mit einem Mustervergleich kombiniert werden |
ZGC on macOS/ Windows | Portierung des Z Garbage Collector auf macOS und Windows (experimentell) |
Foreign-Memory Access API | Es wird ein API eingeführt, mit dem Java-Anwendungen sicher und effizient auf fremden Speicher zugreifen können, der außerhalb des Java Heaps gespeichert ist |
Text Blocks | In Java ist das Einbetten von HTML-, XML-, SQL- oder JSON-Snippets in einen Code oft schwer zu lesen und zu behalten; zur Lösung werden Text Blocks eingeführt |
als veraltete Funktionen gekennzeichnet | Solaris and SPARC Ports, Concurrent Mark Sweep (CMS) Garbage Collector, ParallelScavenge + SerialOld GC Combination, Pack200 Tools and API |
Tabelle 1: Features und Anpassungen in Java 14 [2]
JDK 15 | Beschreibung |
---|---|
Edwards-Curve Digital Signature Algorithm (EdDSA) | EdDSA ist ein modernes Signaturschema, das gegenüber den vorhandenen Signaturschemata des bisherigen JDKs mehrere Vorteile bietet. |
Sealed Classes (Preview) | Einführung von versiegelten Klassen, d. h. Beschränkungen bei der Klassenvererbung. |
Hidden Classes | Es handelt sich um Klassen, die nicht direkt vom Bytecode anderer Klassen verwendet werden können. Versteckte Klassen sind für Frameworks vorgesehen, die zur Laufzeit Klassen generieren und diese indirekt über Reflektion verwenden. |
Neuimplementierung der DatagramSocket API | Ersetzen Sie die zugrunde liegenden Implementierungen der APIs java.net.DatagramSocket und java.net.MulticastSocket durch einfachere und modernere Implementierungen, die besser zu warten und zu debuggen sind |
Pattern Matching for instanceof (Second Preview) | Weitere Integration und Überarbeitung des Features aus Java 14 |
ZGC: A Scalable Low-Latency Garbage Collector | Änderung des Status des Z Garbage Collectors von einer experimentellen Funktion (siehe Java 14) in eine Produktfunktion |
Text Blocks | Weitere Integration und Überarbeitung des Features aus Java 14 |
Shenandoah: A Low-Pause-Time Garbage Collector | Änderung des Status des Shenandoah Garbage Collectors von einer experimentellen Funktion in eine Produktfunktion |
Foreign-Memory Access API | Weitere Integration und Überarbeitung des Features aus Java 14 |
Records (Second Preview) | Weitere Integration und Überarbeitung des Features aus Java 14 |
als veraltete Funktionen gekennzeichnet | Nashorn JavaScri... |