Java-News: Java JDK 21 – Ein kurzer Überblick über die bevorstehenden Neuerungen

Die Veröffentlichung der neuen Version des Java JDK rückt näher und wir haben in unserem Blog beschlossen, einen genaueren Blick auf die neuen Funktionen der Sprache zu werfen. Das geplante Veröffentlichungsdatum ist der 19. September 2023. Es ist jedoch bereits möglich, diese Version im Early Access herunterzuladen und die ersten Experimente zu starten. (In einem früheren Artikel haben wir die Merkmale des Java 20 JDK besprochen).

Java 21 (nach Java 17) ist wieder eine Version mit Langzeitunterstützung (LTS), was bedeutet, dass Oracle mindestens fünf Jahre lang, bis September 2028, kostenlose Updates und bis September 2031 erweiterte kostenpflichtige Unterstützung anbieten wird.

Java JDK 21 Funktionen
Java JDK 21 Funktionen

 

Schauen wir uns kurz den Inhalt von JDK 21 an und worauf wir uns freuen können. Wir beginnen mit den interessantesten neuen Funktionen und Verbesserungen.

Virtuelle Threads (virtuelle Fäden)

Virtuelle Fäden (virtual threads) sind leichte Threads, die das Schreiben, Warten und Verfolgen von hochleistungsfähigen nebenläufigen Anwendungen erheblich vereinfachen. Dazu gehören die Skalierbarkeit von Serveranwendungen, die in Thread-on-Demand-Form geschrieben wurden, indem die Hardware effizient genutzt wird, die Möglichkeit, vorhandenen Code, der die lang.ThreadAPI verwendet, mit minimalen Änderungen auf virtuelle Threads zu migrieren, und die Möglichkeit, virtuelle Threads mit den vorhandenen JDK-Tools einfach zu debuggen und zu profilieren.

Virtuelle threads wurden in JDK 20 und JDK 19 eingeführt und werden in JDK 21 vervollständigt. Virtuelle Threads wurden in JDK 20 und JDK 19 eingeführt und werden in JDK 21 fertiggestellt. Die garantierte Unterstützung für lokale Thread-Variablen wird also dafür sorgen, dass viele bestehende Bibliotheken ohne Änderungen mit virtuellen Threads verwendet werden können.

Sequenced collections (sequenzierte Sammlungen)

Sequentielle Sammlungen, bzw. Sammlungen mit Ordnung ist eine weitere interessante neue Funktion. JDK 21 führt das Design von Sammlungen mit Ordnung ein und stellt Schnittstellen für Sammlungen mit definierter Ordnung zur Verfügung. Jede Kollektion hat ein klar definiertes erstes, zweites Element und so weiter, bis hin zum letzten Element. Es werden einheitliche APIs für den Empfang von ersten und letzten Elementen und für die Verarbeitung von Elementen in umgekehrter Reihenfolge bereitgestellt. Die Motivation für diesen Vorschlag ist, dass das Java-Sammlungs-Framework keinen Sammlungstyp hat, der eine Folge von Elementen mit einer definierten Reihenfolge darstellt. Es fehlt auch ein einheitlicher Satz von Operationen, die für diese Sammlungen gelten. Diese Lücken sind ein Problem und eine Quelle von Beschwerden. Der Vorschlag sieht vor, Schnittstellen für Sequenzen von Sammlungen, Sets und Maps zu definieren und sie in die bestehende Hierarchie der Sammlungstypen aufzunehmen. Alle diese neuen Methoden haben vordefinierte Implementierungen.

Record pattern (Aufzeichnungsmuster)

Mit Aufzeichnungsmustern ist es möglich, Aufzeichnungswerte zu dekonstruieren. Probendatensätze und Probentypen können verschachtelt werden, was eine leistungsstarke, deklarative und kombinierbare Datenabfrage und -verarbeitung ermöglicht. Zu den Entwurfszielen gehören die Erweiterung des Musterabgleichs, um Instanzen von Datensatzklassen zu zerstören, und das Hinzufügen verschachtelter Muster, um die Komposition von Datenabfragen zu ermöglichen. Diese Funktion wurde parallel zum Mustervergleich für Switch-Ausdrücke entwickelt.

Pattern matching for switch (Mustervergleich für Switch)

Mit dieser Funktion kann ein Switch-Ausdruck/Befehl gegen mehrere Muster getestet werden, von denen jedes eine bestimmte Aktion hat, was einen sicheren und präzisen Ausdruck komplexer Datenabfragen ermöglicht. Diese Funktion wurde ursprünglich in JDK 17 vorgeschlagen, in den nachfolgenden Versionen modifiziert und sollte in JDK 21 auf der Grundlage der Rückmeldungen und Erfahrungen von Java-Entwicklern vervollständigt und modifiziert werden. Zu den wichtigsten Änderungen im Vergleich zu früheren Versionen von JEP gehören die Entfernung von Klammern in Mustern und die Zulassung von qualifizierten Aufzählungskonstanten sowie die Erhöhung der Sicherheit von Ausdrücken und Switch-Anweisungen, indem verlangt wird, dass alle möglichen Eingabewerte abgedeckt werden. Ein weiteres Ziel ist es, sicherzustellen, dass bestehende Switch-Writes ohne Änderungen funktionsfähig bleiben und mit der gleichen Semantik ausgeführt werden.

String templates (Zeichenfolgenvorlagen)

Hierbei handelt es sich um ein Feature in Form eines JDK 21-Beispiels, das die bestehenden String-Literale und Textblöcke in Java ergänzt, indem es diesen Text mit eingebetteten Ausdrücken und Prozessoren kombiniert, um spezielle Ergebnisse zu erzielen. Dieses Sprachmerkmal und die API sollen das Schreiben von Java-Programmen vereinfachen, indem sie es leicht machen, Zeichenketten auszudrücken, die zur Laufzeit berechnete Werte enthalten. Es verspricht, die Lesbarkeit von Ausdrücken zu verbessern, die Programmsicherheit zu erhöhen, die Flexibilität zu bewahren und die Verwendung von APIs zu vereinfachen, die Strings akzeptieren, die in anderen Sprachen als Java geschrieben wurden. Die Funktion ermöglicht auch die Entwicklung von Nicht-String-Ausdrücken, die durch die Kombination von Textliteralen und eingebetteten Ausdrücken erstellt werden.

Unnamed patterns and variables (unbenannte Muster und Variablen)

Diese Funktion verbessert die Lesbarkeit des Codes und die Wartung, da Muster erstellt werden können, ohne dass ein Komponentenname oder -typ angegeben werden muss. Unbenannte Variablen können initialisiert werden, werden aber nicht verwendet. Das Ziel ist es, unnötige verschachtelte Muster zu eliminieren und nicht verwendete Variablen zu identifizieren.

Unbenannte Klassen und Instanzhauptmethoden

Diese Funktion zielt darauf ab, das Schreiben erster Java-Programme zu vereinfachen, bei denen Studenten möglicherweise nicht sofort die Sprachfunktionen verstehen, die für komplexere Projekte vorgesehen sind. Damit kann man einfache Programme erstellen und sie nach und nach mit fortgeschrittenen Funktionen erweitern.

Structured concurrency (strukturierte Nebenläufigkeit)

strukturierte Nebenläufigkeit vereinfacht die Programmierung in einer gleichzeitigen Umgebung, indem eine API verwendet wird, die Gruppen von zusammenhängenden Aufgaben als Arbeitseinheiten verwaltet. Dies verbessert das Fehlermanagement, was die Zuverlässigkeit und Beobachtbarkeit erhöht. Diese Funktion, die zuvor in JDK 20 und JDK 19 getestet wurde, wird nun als Beispiel-API im Paket util.concurrent unterstützt.

Scoped values (skalierte Werte)

Die Vorschauversion dieser Funktion ermöglicht die gemeinsame Nutzung unveränderlicher Daten zwischen Threads und Komponenten. Skalierte Werte sind lokalen Thread-Variablen vorzuziehen, insbesondere wenn man eine große Anzahl virtueller Threads verwendet. Diese Funktion verbessert die Lesbarkeit und Robustheit des Codes.

Prepare to disallow the dynamic loading of agents

Deaktivieren des dynamischen Ladens von Agenten – diese Änderung zielt darauf ab, die Integrität der JVM zu verbessern, indem sie vor dem dynamischen Laden von Agenten warnt, während die Anwendung läuft. Das Ziel ist es, das Gleichgewicht zwischen Serviceänderungen und Code-Integrität zu verbessern und sicherzustellen, dass die meisten Tools von dieser Änderung nicht betroffen sind.

Key encapsulation mechanism API (Schlüsselkapselungsmechanismus API )

Diese Funktion ermöglicht die Verwendung von Algorithmen zur Sicherung symmetrischer Schlüssel mit öffentlicher Kryptographie. Ziel ist es, Anwendungen zu ermöglichen, Algorithmen wie den RSA Key Encapsulation Mechanism (RSA-KEM) und das Elliptic Curve Integrated Encryption Scheme (ECIES) in einer Vielzahl von Protokollen und kryptographischen Schemata zu verwenden.

Generation ZGC

Diese Funktion zielt darauf ab, die Anwendungsleistung zu verbessern, indem separate Generationen für junge und alte Objekte verwendet werden. Generational ZGC ermöglicht eine effizientere Sammlung von jungen Objekten und führt zu einem geringeren Speicherverbrauch und einer geringeren Belastung durch die Garbage Collection (Sammeln von unnötig zugewiesenem Speicher).

Foreign function & memory API

Ermöglicht die Interoperabilität von Java-Programmen mit Code und Daten außerhalb der Java-Laufzeitumgebung. Es ermöglicht den Aufruf externer Bibliotheken und den sicheren Zugriff auf den Speicher und ersetzt damit JNI(Java Native Interface).

Vector-API (Vektor-API)

Mit dieser API können Berechnungen vektoriell durchgeführt werden, was zu einer besseren Leistung als bei skalaren Berechnungen führt. Das Ziel ist es, eine einfache und zuverlässige Lösung für Vektorberechnungen auf unterstützten Architekturen bereitzustellen.

Deprecate the Windows 32-bit x86 Port for Removal

Diese Änderung zielt darauf ab, den 32-Bit-Port für Windows x86 in einer zukünftigen Version zu entfernen. Windows 10, das letzte Betriebssystem von Microsoft, das den 32-Bit-Modus unterstützt, beendet seinen Lebenszyklus im Oktober 2025.

Zusätzlich zu diesen Funktionen ist JDK 21 auch dabei, die Benennung von Netzwerkschnittstellen in Windows zu ändern. Es ist auch eine experimentelle Funktion „kompakte Objekt-Header“ geplant, um die Größe der Objekt-Header in der JVM zu reduzieren und damit den Speicherplatz zu verringern.

Wenn du dich für die neuen Funktionen von Java JDK 21 interessierst und mehr darüber erfahren möchtest, empfehlen wir dir einen Besuch auf der offiziellen OpenJDK-Website.

Über den Autor

Jozef Wagner

Java Developer Senior

Viac ako 10 rokov programujem v Jave, momentálne pracujem v msg life Slovakia ako Java programátor senior a pomáham zákazníkom implementovať ich požiadavky do poistného softvéru Life Factory. Vo voľnom čase si rád oddýchnem v lese, prípadne si zahrám nejakú dobrú počítačovú hru.

Informieren Sie uns über sich