Po šesti měsících vývoje zveřejnila společnost Oracle platformu Java SE 26 (Java Platform, Standard Edition 26), jejíž referenční implementací je otevřený projekt OpenJDK. Kromě odstranění některých zastaralých funkcí v Java SE 26 zůstává zpětná kompatibilita s předchozími verzemi platformy Java — většina dříve napsaných Java projektů bude fungovat bez změn na nové verzi. Připravené instalační balíčky Java SE 26 (JDK, JRE a Server JRE) jsou k dispozici pro Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Referenční implementace Java SE 26 vyvinutá v rámci projektu OpenJDK je zcela otevřená pod licencí GPLv2 s výjimkami GNU ClassPath, které povolují dynamické spojení s komerčními produkty.
Java SE 26 je zařazen do kategorie vydání s běžnou podporou, aktualizace pro něj budou vydávány do příštího vydání. Pro dlouhodobou podporu (LTS) se doporučuje používat Java SE 25, Java SE 21 nebo Java SE 17, pro které budou aktualizace vydávány do let 2033, 2031 a 2029 (veřejně dostupné — do září 2030, 2028 a 2026). Rozšířená podpora LTS větve Java SE 8 potrvá do roku 2030, a Java SE 11 do roku 2032.
Mezi změnami v Java SE 26 (1, 2, 3, 4):
- Bylo implementováno varování při použití hluboké reflexe pro změnu polí označených klíčovým slovem „final“. V budoucnu se plánuje, že nebezpečné funkce jazyka budou ve výchozím nastavení zakázány a mimo jiné se pole označená jako final stanou zcela neměnitelnými, a to odstraněním obcházení pro jejich změnu prostřednictvím hluboké reflexe (API Reflection).
- Byl odstraněn API Applet (java.applet.Applet*, javax.swing.JApplet), který se používal pro spouštění Java aplikací v prohlížeči. Tento API ztratil relevanci po ukončení podpory Java pluginu pro prohlížeče a byl prohlášen za zastaralý v roce 2021.
- Byla zavedena možnost použití předem vytvořeného cache (AOT — ahead-of-time) s jakýmikoli sběrači odpadu, včetně ZGC (Z Garbage Collector). Změna zahrnuje podporu sekvenčního načítání předem cacheovaných Java objektů do paměti, pomocí univerzálního a nezávislého na sběrači odpadu formátu namísto přímého mapování do paměti specifických reprezentací cache. Použití AOT cache zkracuje dobu spuštění a urychluje warmup virtuálního stroje HotSpot.
- Do API HTTP Client byla přidána podpora protokolu HTTP/3, což umožňuje aplikacím a knihovnám přistupovat k serverům přes HTTP/3 po minimálních úpravách kódu.
- Byla zvýšena výkonnost sběrače odpadu G1 díky zkrácení blokování pro synchronizaci vláken aplikace s vlákny sběrače odpadu.
- Byl navržen druhý předběžný návrh API pro kódování a dekódování objektů s kryptografickými klíči, certifikáty a seznamy odvolaných certifikátů, používající formát PEM (Privacy-Enhanced Mail).
- Byl navržen k testování šestý předběžný návrh API pro strukturovaný paralelismus (Structured Concurrency), který zjednodušuje vývoj vícitevových aplikací zpracováním několika úloh, které běží v různých vláknech, jako jednotného bloku.
- Byla přidána druhá předběžná verze API Lazy Constants pro práci s objekty, které obsahují neměnné údaje a jsou zpracovávány v JVM jako konstanty. Takové objekty podléhají optimalizaci výkonu podobné polím se slovem „final“. Na rozdíl od „final“ nový API odděluje vytvoření trvalých hodnot a jejich inicializaci, zaručuje, že hodnota může být inicializována pouze jednou, zkracuje dobu spuštění programů a umožňuje v uživatelském kódu uplatnit optimalizace zkroucení konstant (constant-folding), které byly dříve používány pouze v interním kódu JDK. class Application { // Bylo: // static final UserService USERS = new UserService(); // Nyní lze: static final StableValue<UserService> USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- Ve mechanismu matchování vzorů byl navržen čtvrtý předběžný variant možnosti použití primitivních typů (int, byte, char a další základní typy, které nejsou objekty) ve všech typech šablon, v operátoru „instanceof“ a v blokách „switch“. switch (x.getStatus()) { case 0 -> „okay“; case 1 -> „warning“; case 2 -> „error“; case int i -> „unknown status: “ + i; } if (i instanceof byte b) { … b … }
- Byla navržena jedenáctá testovací implementace API Vector, která poskytuje funkce pro vektorová výpočty prováděná pomocí vektorových instrukcí procesorů x86_64 a AArch64 a umožňuje provádět operace najednou na několika hodnotách (SIMD). Na rozdíl od automatizace vektorování skalarni operací poskytované JIT kompilátorem HotSpot, nové API umožňuje explicitně řídit vektorování pro paralelní zpracování dat.
Kromě toho společnost Oracle oznámila projekt Detroit, který se bude rozvíjet v rámci OpenJDK a cílit na zlepšení přenositelnosti mezi Java, JavaScript a Python. V rámci projektu se plánuje umožnit vložení do procesu JVM runtime s JavaScriptovým enginem V8 a interpretem CPython. Dříve společnost Oracle rozvíjela JavaScriptový engine Nashorn, který běžel na JVM, ale projekt byl zastaven kvůli problematickému vývoji samostatné implementace JavaScriptu v situaci, kdy byla hlavní ekosystém navázána na engine V8.
Dále lze zmínit zveřejnění aktualizace platformy pro vytváření aplikací s grafickým uživatelským rozhraním JavaFX 26. V nejbližších hodinách se také očekává vydání univerzální virtuální stroje GraalVM 26, který podporuje spuštění aplikací v JavaScriptu (Node.js), Pythonu, Ruby, R, jakýchkoliv jazyků pro JVM (Java, Scala, Clojure, Kotlin) a jazyky, pro které lze vytvářet bitcode LLVM (C, C++, Rust).
Zdroj: opennet.ru
