Technischer Projektleiter
Java Nachrichten: Wie ist die neueste Version von Java 20 JDK
Es sind wieder sechs Monate vergangen, und Oracle hat am 21. März 2023 hat Oracle die Verfügbarkeit der neuesten Version der weltweit beliebtesten Programmiersprache und Entwicklungsplattform bekannt gegeben. In diesem Artikel werden wir uns auf einige der wichtigsten Neuigkeiten konzentrieren. Die besten Vorteile der Updates früherer Versionen findest du im vorherigen Artikel. Die besten Java-Updates von Version SE 8 bis SE 17.
Java SE 20 (Oracle JDK 20) bringt tausende Verbesserungen in den Bereichen Leistung, Stabilität und Sicherheit mit, einschließlich Plattformverbesserungen, die Entwicklern helfen, die Produktivität zu steigern und Innovationen sowie Wachstum in ihren Organisationen zu fördern. Es sind bereits über 25 Jahre vergangen, seit Java Entwicklern ermöglicht, neue Generationen von robusten, skalierbaren und sicheren Anwendungen zu entwerfen und zu entwickeln.
Oracle JDK 20 ist keine Version mit langfristiger Unterstützung (LTS – long-term support), daher wird es nur Updates erhalten, bis es nach sechs Monaten durch JDK 21 ersetzt wird.
Das letzte LTS-Release von Java bleibt somit Oracle JDK 17 (veröffentlicht am 14. September 2021). Jedoch hat Oracle Pläne bekannt gegeben, den Zeitraum zwischen LTS-Veröffentlichungen von drei auf zwei Jahre zu verkürzen, daher ist JDK 21 als nächstes LTS für September 2023 geplant.
Die Anzahl der Änderungen in den JDK-Veröffentlichungen hat sich im Laufe der Zeit nicht stark verändert, aber unter dem sechsmonatigen Druck, neue Versionen herauszubringen, hat sich das Tempo der Bereitstellung neuer Funktionen und Verbesserungen, die für die Produktion bereit sind, stark erhöht. Anstelle von Tausenden von Fixes und fast hundert JEPs (Java Enhancement Proposals) alle paar Jahre, wie es früher mit den Hauptversionen der Fall war, werden Verbesserungen nun in bescheideneren Releases auf einem vorhersehbareren sechsmonatigen Zeitplan geliefert. Die Änderungen reichen von bedeutenden neuen Funktionen über kleine Verbesserungen bis hin zur Routine-Wartung, Fehlerbehebungen und der Verbesserung der Dokumentation. Jede Änderung wird durch einen eigenen Commit und ein Issue im JDK-Fehlerverwaltungssystem repräsentiert.
Neuigkeiten im Java JDK 20
Java 20 JDK enthält sieben JEPs (Java Enhancement Proposals), die darauf abzielen, die Produktivität der Entwickler zu steigern, die Java-Sprache zu verbessern sowie die Leistung, Stabilität und Sicherheit der Plattform zu erhöhen. Diese Funktionen umfassen virtuelle Threads, das Vector API, strukturierte Konkurrenz, begrenzte Werte, API für fremde Funktionen und Speicher, Record-Patterns und Pattern-Matching für Switch-Anweisungen.
Virtuelle Fäden (virtual threads)
Virtuelle Threads sind leichtgewichtige Threads, die die Anstrengung beim Schreiben, Warten und Debuggen von hochleistungsfähigen parallelen Anwendungen reduzieren. Das sind Instanzen der Klasse java.lang.Thread, die jedoch nicht an ein spezifisches Betriebssystem-Thread gebunden sind. Wenn der Code, der in einem virtuellen Thread läuft, eine blockierende Ein-/Ausgabeoperation aufruft, suspendiert die Java Laufzeitumgebung das virtuelle Thread, bis es wieder fortgesetzt werden kann. Wenn der Code, der in einem virtuellen Thread läuft, eine blockierende Ein-/Ausgabeoperation aufruft, pausiert die Java Laufzeitumgebung den virtuellen Thread, bis er wieder fortgesetzt werden kann.
Virtuelle Threads sind ideal für die Ausführung von Aufgaben geeignet, die einen Großteil ihrer Zeit mit Blockieren verbringen, oft beim Warten auf den Abschluss von Ein-/Ausgabeoperationen. Jedoch sind sie nicht für langwierige und prozessorintensive Operationen geeignet.
Vektor API Vorschlag (vector API proposal)
Der Vektor-API-Vorschlag ist eine neue Funktion in Java 20 JDK, die ein API einführt, um Vektorberechnungen auszudrücken, die zuverlässig auf optimierte Vektoranweisungen auf unterstützten CPU-Architekturen übersetzt werden können. Dadurch wird eine Leistung erzielt, die über der von äquivalenten skalaren Berechnungen liegt.
Das Ziel ist es, ein klares und prägnantes API bereitzustellen, das in der Lage ist, eine breite Palette von Vektorberechnungen auszudrücken, die aus Sequenzen von Vektoroperationen bestehen, die in Schleifen kombiniert sind und möglicherweise auch mit Flusskontrolle gesteuert werden können. Es sollte möglich sein, eine Berechnung auszudrücken, die in Bezug auf die Größe des Vektors oder die Anzahl der Bahnen pro Vektor generisch ist, so dass solche Berechnungen auf Hardware, die unterschiedliche Vektorgrößen unterstützt, übertragbar sind.
Strukturierte Nebenläufigkeit (structured concurrency)
Dies ist eine neue Funktion im Java SE 20 JDK, die eine API bereitstellt, um die Programmierung von Multithreading-Anwendungen zu vereinfachen und mehrere Aufgaben, die in verschiedenen Threads laufen, als eine einzige Arbeitseinheit zu behandeln. Die Fehlerbehandlung und das Abbrechen von Threads sind vereinfacht, was die Zuverlässigkeit verbessert und die Beobachtbarkeit erhöht.
Die einzige Änderung gegenüber dem Konzept in JDK 19 besteht darin, dass die Klasse StructuredTaskScope aktualisiert wurde, um die Vererbung von begrenzten Werten durch Threads zu unterstützen, die im Aufgabenbereich erstellt wurden.
Begrenzte Werte (scoped values)
Begrenzte Werte sind eine Neuerung in Java 20 JDK, die es Entwicklern ermöglicht, unveränderliche Daten innerhalb und zwischen Threads zu speichern und zu teilen. Dieses neue API wird in Java 20 JDK als Inkubatorfunktion eingeführt und ist in JEP 439 beschrieben.
In Java 20 JDK wird die neue Klasse jdk.incubator.concurrent.ScopedValue <> eingeführt, die einen begrenzten Wert als Schlüssel-Wert-Paar darstellt. Grundsätzlich ist ein begrenzter Wert ein Wert, der nur einmal gesetzt wird und für eine begrenzte Zeit in einem Thread zum Lesen verfügbar ist. Begrenzte Werte ermöglichen die gemeinsame Nutzung von Daten, ohne Methodenargumente zu verwenden.
API für Fremdfunktionen und Speicher (Fremdfunktionen- und Speicher-API)
Diese neue Funktion im Java 20 JDK ermöglicht es Java-Programmen, mit Code und Daten außerhalb der Java-Laufzeitumgebung zusammenzuarbeiten. Durch das effektive Aufrufen fremder Funktionen (Code außerhalb der Java Virtual Machine) [JVM] und den sicheren Zugriff auf fremden Speicher (Speicher, der nicht von der JVM verwaltet wird) ermöglicht diese Funktion Java-Programmen, native Bibliotheken aufzurufen und native Daten zu verarbeiten, ohne Java Native Interface (JNI) verwenden zu müssen. Das erhöht die Benutzerfreundlichkeit, Leistung und Sicherheit.
Muster von Aufzeichnungen record patterns)
Diese Verbesserung erweitert die Programmiersprache Java, indem sie es den Benutzern ermöglicht, Record Patterns und Typmuster zu verschachteln, um eine starke, deklarative und zusammengesetzte Form der Navigation und Datenverarbeitung zu schaffen. Dies hilft, die Produktivität der Entwickler zu steigern, indem es ihnen ermöglicht, die Mustererkennung zu erweitern, um komplexere Datenabfragen zu ermöglichen.
Mustervergleich für Switch-Anweisungen und Ausdrücke
Es ermöglicht Entwicklern, Muster in Switch-Anweisungen zu verwenden. Im Vergleich zur Verwendung von Konstanten bietet dies eine höhere Flexibilität und Ausdruckskraft.
Zusammenfassung
Das neue Java SE 20 JDK-Release bringt neben Fehlerkorrekturen auch sieben Vorschläge zur Verbesserung des JDK, um die Produktivität der Entwickler zu steigern, die Java-Sprache zu verbessern sowie die Leistung, Stabilität und Sicherheit der Plattform zu erhöhen.
Ihr könnt es hier herunterladen: Java SE 20 JDK download.