Nach sechsmonatiger Entwicklung hat Oracle die Plattform Java SE 26 (Java Platform, Standard Edition 26) veröffentlicht, wobei das Open-Source-Projekt OpenJDK als Referenzimplementierung dient. Mit Ausnahme der Entfernung einiger veralteter Funktionen bleibt die Rückwärtskompatibilität zu früheren Versionen der Java-Plattform in Java SE 26 erhalten — die meisten zuvor geschriebenen Java-Projekte werden ohne Änderungen unter der neuen Version lauffähig sein. Installationsbereite 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) verfügbar. Die im Rahmen des OpenJDK-Projekts entwickelte Referenzimplementierung von Java SE 26 ist vollständig unter der GPLv2-Lizenz mit Ausnahmen für GNU ClassPath veröffentlicht, die dynamisches Binden an kommerzielle Produkte erlauben.
Java SE 26 gehört zur Kategorie der Veröffentlichungen mit regulärer Unterstützung, für die Updates bis zur nächsten Version bereitgestellt werden. Als Version mit langfristiger Unterstützung (LTS) sollten Java SE 25, Java SE 21 oder Java SE 17 verwendet werden, deren Updates bis 2033, 2031 und 2029 herausgegeben werden (öffentlich bis September 2030, 2028 und 2026). Die erweiterte Unterstützung der LTS-Version Java SE 8 wird bis 2030, und die von Java SE 11 bis 2032 dauern.
Zu den Änderungen in Java SE 26 (1, 2, 3, 4):
- Eine Warnung wird ausgegeben, wenn tiefe Reflection verwendet wird, um mit dem Schlüsselwort „final“ markierte Felder zu ändern. Zukünftig ist geplant, unsichere Sprachfunktionen standardmäßig zu deaktivieren und unter anderem zu gewährleisten, dass als final gekennzeichnete Felder vollständig unveränderlich sind, indem Umgehungslösungen für deren Änderung durch tiefe Reflection (API Reflection) entfernt werden.
- Die API Applet (java.applet.Applet*, javax.swing.JApplet), die zur Ausführung von Java-Anwendungen im Browser verwendet wurde, wurde entfernt. Diese API hat nach dem Ende des Supports für das Java-Plugin für Browser ihre Relevanz verloren und wurde 2021 als veraltet erklärt.
- Die Möglichkeit zur Verwendung eines vorausgefertigten Caches (AOT – ahead-of-time) wurde mit allen Garbage Collectors, einschließlich ZGC (Z Garbage Collector), realisiert. Diese Änderung ermöglicht die Unterstützung einer sequenziellen Ladeweise von vorab zwischengespeicherten Java-Objekten in den Speicher, indem ein universelles, von den Garbage Collectors unabhängiges Format anstelle einer direkten Abbildung in speicherspezifische Cache-Darstellungen verwendet wird. Die Nutzung des AOT-Caches reduziert die Startzeit und beschleunigt den Warmup der HotSpot-VM.
- Im HTTP Client API wurde die Unterstützung des HTTP/3-Protokolls hinzugefügt, die es Anwendungen und Bibliotheken ermöglicht, Server über HTTP/3 mit minimalen Änderungen im Code anzusprechen.
- Die Leistung des Garbage Collectors G1 wurde verbessert, indem die Sperrzeiten zur Synchronisation von Anwendungs-Threads mit Threads des Garbage Collectors reduziert wurden.
- Eine zweite Vorabversion der API zum Kodieren und Dekodieren von Objekten mit kryptografischen Schlüsseln, Zertifikaten und Listen widerrufener Zertifikate unter Verwendung des PEM-Formats (Privacy-Enhanced Mail) wurde vorgeschlagen.
- Die sechste Vorabversion der API für strukturierten Parallelismus (Structured Concurrency) wurde für Testzwecke angeboten. Diese API vereinfacht die Entwicklung von Multithread-Anwendungen, indem mehrere in verschiedenen Threads ausgeführte Aufgaben als ein einzelner Block behandelt werden.
- Die zweite Vorabversion 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. An diese Objekte werden Leistungoptimierungen angewendet, die ähnlich wie bei Feldern mit dem Schlüsselwort „final“ sind. Im Gegensatz zu „final“ trennt die neue API die Erstellung konstanter Werte von deren Initialisierung, stellt sicher, dass der Wert nur einmal initialisiert werden kann, verkürzt die Startzeit von Programmen und ermöglicht es, in Benutzeranwendungen Optimierungen wie Constant-Folding anzuwenden, die zuvor nur im internen JDK-Code verwendet wurden. class Application { // Früher: // static final UserService USERS = new UserService(); // Jetzt ist es möglich: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- Im Rahmen des Mustervergleichs wurde ein vierter vorläufiger Ansatz zur Verwendung primitiver Datentypen (int, byte, char und andere grundlegende Typen, die keine Objekte sind) in allen Arten von Vorlagen, im Operator „instanceof“ und in den „switch“-Blöcken vorgeschlagen. switch (x.getStatus()) { case 0 -> „okay“; case 1 -> „warning“; case 2 -> „error“; case int i -> „unbekannter Status: „ + i; } if (i instanceof byte b) { … b … }
- Eine elfte Testimplementierung der API Vector wurde vorgeschlagen, die Funktionen für vektorielle Berechnungen bereitstellt, die mit Vektor-Instruktionen der Prozessoren x86_64 und AArch64 durchgeführt werden und die es ermöglichen, Operationen gleichzeitig auf mehrere Werte anzuwenden (SIMD). Im Gegensatz zu den im JIT-Compiler HotSpot verfügbaren Möglichkeiten zur automatischen Vektorisierung skalaren Operationen, bietet die neue API die Möglichkeit, die Vektorisierung für die parallele Datenverarbeitung explizit zu steuern.
Darüber hinaus hat Oracle das Projekt Detroit angekündigt, das Teil von OpenJDK wird und darauf abzielt, die Portabilität zwischen Java, JavaScript und Python zu verbessern. Im Rahmen des Projekts wird angestrebt, die Integration in den JVM-Laufzeitprozess mit der JavaScript-Engine V8 und dem CPython-Interpreter zu ermöglichen. Zuvor hatte Oracle bereits die JavaScript-Engine Nashorn entwickelt, die auf der JVM lief, aber das Projekt eingestellt, da es schwierig war, eine separate Implementierung von JavaScript zu entwickeln, während das Hauptökosystem auf der V8-Engine basiert.
Zusätzlich ist es erwähnenswert, dass ein Update der Plattform für die Entwicklung von grafischen Benutzeroberflächen mit JavaFX 26 veröffentlicht wurde. In den nächsten Stunden wird auch die Veröffentlichung der universellen virtuellen Maschine GraalVM 26 erwartet, die die Ausführung von Anwendungen in JavaScript (Node.js), Python, Ruby, R, allen Sprachen für die JVM (Java, Scala, Clojure, Kotlin) und in Sprachen, für die Bitcode LLVM generiert werden kann (C, C++, Rust), unterstützt.
Quelle: opennet.ru
