Nach sechs Monaten Entwicklung hat Oracle die Plattform Java SE 19 (Java Platform, Standard Edition 19) veröffentlicht, wobei das OpenJDK-Projekt als Referenzimplementation dient. Abgesehen von der Entfernung einiger veralteter Funktionen bleibt die Abwärtskompatibilität zu früheren Versionen der Java-Plattform in Java SE 19 erhalten – die meisten zuvor geschriebenen Java-Projekte werden ohne Änderungen mit der neuen Version funktionieren. Fertig zur Installation sind die Pakete Java SE 19 (JDK, JRE und Server JRE) für Linux (x86_64, AArch64), Windows (x86_64) und macOS (x86_64, AArch64) vorbereitet. Die im Rahmen des OpenJDK-Projekts entwickelte Referenzimplementation von Java 19 ist vollständig unter der GPLv2-Lizenz mit Ausnahmen von GNU ClassPath offen, die dynamisches Binden an kommerzielle Produkte erlauben.
Java SE 19 gehört zur Kategorie der Versionen mit normaler Unterstützung, für die bis zur nächsten Version Aktualisierungen veröffentlicht werden. Für eine langfristige Unterstützung (LTS) sollte Java SE 17 verwendet werden, dessen Updates bis 2029 veröffentlicht werden. Es sei daran erinnert, dass mit der Veröffentlichung von Java 10 das Projekt auf einen neuen Entwicklungsprozess umgestiegen ist, der einen kürzeren Zyklus für die Erstellung neuer Releases vorsieht. Neue Funktionen werden jetzt in einem ständig aktualisierten Master-Branch entwickelt, der bereits fertige Änderungen enthält und von dem alle sechs Monate Branches zur Stabilisierung neuer Releases abgezweigt werden.
Zu den Neuerungen in Java 19 gehören:
- Die vorläufige Unterstützung von Record-Pattern wurde eingeführt, die die in Java 16 eingeführte Möglichkeit für Musterabgleiche mithilfe von Record-Klassenwerten erweitert. Zum Beispiel: record Point(int x, int y) {} void printSum(Object o) { if (o instanceof Point(int x, int y)) { System.out.println(x+y); } }
- In den Builds für Linux wird die Unterstützung der RISC-V-Architektur gewährleistet.
- Die vorläufige Unterstützung für die FFM-API (Foreign Function & Memory) wurde hinzugefügt, die es Java-Programmen ermöglicht, über Funktionsaufrufe auf externe Bibliotheken und den Zugriff auf den Speicher außerhalb der JVM mit externem Code und Daten zu interagieren.
- Die Unterstützung für virtuelle Threads wurde eingeführt, die als leichte Threads fungieren und die Entwicklung sowie Wartung von leistungsstarken, multithreadfähigen Anwendungen erheblich erleichtern.
- Eine vierte vorläufige Implementierung der Vector-API wurde vorgeschlagen, die Funktionen für Vektorberechnungen bereitstellt, die unter Verwendung von Vektorbefehlen der x86_64- und AArch64-Prozessoren durchgeführt werden und es ermöglichen, Operationen gleichzeitig auf mehrere Werte anzuwenden (SIMD). Im Gegensatz zur automatischen Vektorisierung von Skalaren im JIT-Compiler HotSpot ermöglicht die neue API eine explizite Steuerung der Vektorisierung für die parallele Datenverarbeitung.
- Eine dritte experimentelle Implementierung der Musterzuordnung in "switch"-Ausdrücken wurde hinzugefügt, die es ermöglicht, in den "case"-Labels keine genauen Werte, sondern flexible Muster zu verwenden, die eine Reihe von Werten abdecken, für die zuvor umständliche "if...else"-Ketten erforderlich waren. Object o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
- Eine experimentelle API für strukturierten Parallelismus wurde hinzugefügt, die die Entwicklung von mehrsträngigen Anwendungen vereinfacht, indem mehrere Aufgaben, die in verschiedenen Threads ausgeführt werden, als ein einheitlicher Block behandelt werden.
Quelle: opennet.ru
