© Snipergraphics/Shutterstock.com
Von Version zu Version – Teil 1

Das Neueste ist des Neuen Feind


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).

krypczyk_features_1_1.tif_fmt1.jpgAbb. 1: Versionen und Support von Java SE [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...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang