Nach sechsmonatiger Entwicklung hat Oracle die Plattform Java SE 26 (Java Platform, Standard Edition 26) veröffentlicht, deren Referenzimplementierung auf dem Open-Source-Projekt OpenJDK basiert. Abgesehen von der Entfernung einiger veralteter Funktionen bleibt die Abwärtskompatibilität zu früheren Versionen der Java-Plattform in Java SE 26 erhalten – die meisten zuvor entwickelten Java-Projekte werden ohne Änderungen unter der neuen Version lauffähig sein. Installierbare Builds von Java SE 26 (JDK, JRE und Server JRE) sind für Linux (x86_64, AArch64), Windows (x86_64) und macOS (x86_64, AArch64) vorbereitet. Die im Rahmen des OpenJDK-Projekts entwickelte Referenzimplementierung von Java SE 26 ist vollständig unter der GPLv2-Lizenz mit Ausnahmen von GNU ClassPath lizenziert, die dynamisches Linking mit kommerziellen Produkten erlauben.
Java SE 26 gehört zur Kategorie der Versionen mit regulärem Support, für die Updates bis zur nächsten Veröffentlichung bereitgestellt werden. Für langfristigen Support (LTS) sollte Java SE 25, Java SE 21 oder Java SE 17 verwendet werden, für die Updates bis 2033, 2031 und 2029 veröffentlicht werden (öffentlich bis September 2030, 2028 und 2026). Der erweiterte Support für den LTS-Zweig Java SE 8 wird bis 2030 dauern, während Java SE 11 bis 2032 unterstützt wird.
Unter den Änderungen in Java SE 26 (1, 2, 3, 4):
- Es wurde eine Warnung implementiert, wenn tiefe Reflexion verwendet wird, um Felder zu ändern, die mit dem Schlüsselwort „final“ gekennzeichnet sind. In Zukunft ist geplant, unsichere Sprachfeatures standardmäßig zu deaktivieren und unter anderem zu gewährleisten, dass als final gekennzeichnete Felder vollständig unveränderlich sind, indem der Umweg zur Änderung über tiefe Reflexion (API Reflection) entfernt wird.
- Das API Applet (java.applet.Applet*, javax.swing.JApplet) wurde entfernt, das zum Ausführen von Java-Anwendungen im Browser verwendet wurde. Dieses API ist nach der Einstellung des Supports für das Java-Plugin für Browser obsolet geworden und wurde 2021 als veraltet erklärt.
- Die Möglichkeit zur Verwendung von vorab generiertem Cache (AOT - ahead-of-time) mit allen Garbage Collectoren, einschließlich ZGC (Z Garbage Collector), wurde realisiert. Diese Änderung umfasst die Unterstützung für das sequenzielle Laden von zwischengespeicherten Java-Objekten in den Speicher unter Verwendung eines universellen und unabhängig von Garbage Collectoren-Formats anstelle einer direkten Abbildung in speicher-spezifische Cache-Darstellungen. Die Verwendung des AOT-Caches verkürzt die Startzeit und beschleunigt das Warmup der HotSpot-JVM.
- Die Unterstützung für das HTTP/3-Protokoll wurde zur HTTP Client-API hinzugefügt, das es Anwendungen und Bibliotheken ermöglicht, nach minimalen Codeänderungen auf Server über HTTP/3 zuzugreifen.
- Die Leistung des G1-Garbage Collectors wurde verbessert, indem die Sperrzeiten zur Synchronisation der Anwendungsthreads mit den Threads des Garbage Collectors verringert wurden.
- Ein zweiter Vorab-Entwurf der API zum Codieren und Decodieren von Objekten mit kryptografischen Schlüsseln, Zertifikaten und Sperrlisten für Zertifikate wurde vorgeschlagen, unter Verwendung des PEM-Formats (Privacy-Enhanced Mail).
- Ein sechster Vorab-Entwurf der API für strukturiertes Parallelismus (Structured Concurrency) wurde zum Testen vorgeschlagen, der die Entwicklung von Multithread-Anwendungen vereinfacht, indem mehrere Aufgaben, die in verschiedenen Threads ausgeführt werden, als ein einziger Block behandelt werden.
- Die zweite Vorab-Überarbeitung der API für Lazy Constants wurde hinzugefügt, um mit Objekten zu arbeiten, die unveränderliche Daten enthalten und in der JVM als Konstanten verarbeitet werden. Auf solche Objekte werden Leistungsoptimierungen angewendet, die mit Feldern mit dem Schlüsselwort „final“ vergleichbar sind. Im Gegensatz zu „final“ trennt die neue API die Erstellung permanenter Werte von deren Initialisierung, garantiert, dass der Wert nur einmal initialisiert werden kann, verkürzt die Programmstartzeiten und ermöglicht es, in Benutzer-Code Optimierungen wie Constant Folding anzuwenden, die zuvor nur im internen Code der JDK verwendet wurden. class Application { // War: // static final UserService USERS = new UserService(); // Jetzt möglich: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- Im Mechanismus der Mustervergleichs wurde eine vierte vorläufige Möglichkeit für die Verwendung primitiver Typen (int, byte, char und andere Basis-Typen, die keine Objekte sind) in allen Arten von Mustern, im Operator „instanceof“ und in „switch“-Blöcken vorgeschlagen. switch (x.getStatus()) { case 0 -> „okay“; case 1 -> „warnung“; case 2 -> „fehler“; case int i -> „unbekannter Status: “ + i; } if (i instanceof byte b) { … b … }
- Es wurde eine elfte Testimplementierung der API Vector vorgeschlagen, die Funktionen für Vektorberechnungen anbietet, die unter Verwendung der Vektorbefehle der x86_64- und AArch64-Prozessoren durchgeführt werden und es ermöglichen, Operationen gleichzeitig auf mehrere Werte anzuwenden (SIMD). Im Gegensatz zu den im JIT-Compiler HotSpot bereitgestellten Automatisierungsfunktionen zur Vektorisierung skalare Operationen, bietet die neue API die Möglichkeit, die Vektorisierung für die parallele Datenverarbeitung explizit zu steuern.
Darüber hinaus kündigte Oracle das Projekt Detroit an, das im Rahmen von OpenJDK entwickelt werden soll und darauf abzielt, die Portabilität zwischen Java, JavaScript und Python zu verbessern. Im Rahmen des Projekts wird angestrebt, die Möglichkeit zu bieten, die JVM-Laufzeit mit der JavaScript-Engine V8 und dem CPython-Interpreter einzubetten. Zuvor hatte Oracle bereits die JavaScript-Engine Nashorn entwickelt, die auf der JVM lief, das Projekt jedoch aufgrund der Schwierigkeiten eingestellt, eine separate Implementierung von JavaScript zu entwickeln, während das Hauptökosystem auf die V8-Engine angewiesen ist.
Zusätzlich kann die Veröffentlichung eines Updates der Plattform zur Erstellung von grafischen Benutzeroberflächen mit JavaFX 26 erwähnt werden. In den nächsten Stunden wird auch die Veröffentlichung der universellen GraalVM 26 erwartet, die die Ausführung von Anwendungen in JavaScript (Node.js), Python, Ruby, R sowie in allen Sprachen für die JVM (Java, Scala, Clojure, Kotlin) und in Sprachen, für die Bytecode LLVM generiert werden kann (C, C++, Rust), unterstützt.
Quelle: opennet.ru
