Po šesti měsících vývoje společnost Oracle vydala verzi Java SE 27 (Java Platform, Standard Edition 27), která jako referenční implementaci používá open source projekt OpenJDK. S výjimkou odstranění některých zastaralých funkcí si Java SE 27 zachovává zpětnou kompatibilitu s předchozími verzemi platformy Java – většina dříve napsaných projektů Java poběží v nové verzi beze změny. Jsou připraveny buildy Java SE 27 (JDK, JRE a Server JRE) připravené k instalaci. Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Referenční implementace Java SE 27, vyvinutá projektem OpenJDK, je plně open source pod licencí GPLv2 s výjimkou GNU ClassPath, která umožňuje dynamické propojování s komerčními produkty.
Java SE 27 je zařazena do kategorie pravidelné podpory, přičemž aktualizace budou vydávány do další verze. Větev s dlouhodobou podporou (LTS) by měla být Java SE 25, Java SE 21 nebo Java SE 17, přičemž aktualizace budou vydávány do roku 2033, 2031 a 2029 (obecně dostupné do září 2030, 2028 a 2026). Rozšířená podpora pro větev Java SE 8 LTS bude pokračovat do roku 2030 a pro Java SE 11 do roku 2032.
Změny v Javě SE 27 (1, 2, 3, 4) zahrnují:
- Ve výchozím nastavení všechna prostředí používají garbage collector G1 (Garbage-First), dříve používaný pro serverové systémy. G1 je optimalizován pro použití na víceprocesorových systémech s velkými paměťovými kapacitami a pro vyvážení předvídatelné latence s vysokou propustností. Během provozu G1 rozděluje paměť do mnoha malých oblastí a upřednostňuje ty s více nepoužívanými objekty a méně aktivně přístupnými daty.
- JVM HotSpot standardně používá kompaktní objektové hlavičky. Na 64bitových systémech byla velikost hlavičky zmenšena z 96 na 64 bitů, což snižuje spotřebu paměti a zvyšuje pravděpodobnost, že se data dostanou do mezipaměti procesoru. V benchmarkových testech SPECjbb2015 se spotřeba paměti snížila o 22 %, zatížení CPU se snížilo o 8 % a počet operací garbage collection se snížil o 15 %. Doba testování analyzátoru JSON se zkrátila o 10 %.
- Implementace TLS 1.3 přidává podporu pro hybridní schémata shody klíčů, která kombinují kvantově odolný algoritmus ML-KEM (CRYSTALS-Kyber) s klasickými algoritmy eliptického křivkového systému ECDHE: X25519MLKEM768 (ECDHE s křivkou X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE s křivkou secp256r1 + ML-KEM-768) a SecP384r1MLKEM1024 (ECDHE s křivkou secp384r1 + ML-KEM-1024). V API javax.net.ssl Tato schémata jsou ve výchozím nastavení povolena a k jejich použití není nutné provádět žádné změny v aplikaci.
- JDK Flight Recorder (JFR), nástroj používaný pro monitorování výkonu, profilování a diagnostiku, nyní podporuje sanitizaci argumentů příkazového řádku, počátečních hodnot proměnných prostředí a systémových vlastností v uložených diagnostických informacích. Tato změna zabraňuje úniku citlivých dat zpracovávaných profilovaným procesem, jako jsou autorizační tokeny a přístupové klíče API předávané prostřednictvím proměnných prostředí.
- Byla implementována třetí preview verze Lazy Constants API pro práci s objekty obsahujícími neměnná data, které jsou v JVM považovány za konstanty. Na tyto objekty jsou aplikovány optimalizace výkonu podobné těm, které se používají pro pole s klíčovým slovem „final“. Na rozdíl od „final“ nové API odděluje vytváření konstantních hodnot od jejich inicializace, zaručuje, že hodnotu lze inicializovat pouze jednou, zkracuje dobu spouštění programu a umožňuje použití optimalizací skládání konstant, které se dříve používaly pouze v interním kódu JDK, v uživatelském kódu. class Application { // Dříve: // static final UserService USERS = new UserService(); // Nyní: static final StableValue UŽIVATELÉ = StabilníHodnota.of(); public static UživatelskáSlužba uživatelé() { return USERS.orElseSet(UživatelskáSlužba::new); } }
- Engine pro porovnávání vzorů zavádí pátou verzi, která umožňuje používat primitivní typy (int, byte, char a další neobjektové základní typy) ve všech druzích vzorů, v operátoru instanceof a v blocích switch. switch (x.getStatus()) { case 0 -> "okej"; case 1 -> "varování"; case 2 -> "chyba"; case int i -> "neznámý stav: " + i; } if (i instanceof byte b) { … b … }
- Sedmý návrh rozhraní Structured Concurrency API, které zjednodušuje vývoj vícevláknových aplikací tím, že s více úlohami běžícími na různých vláknech zachází jako s jednou jednotkou, byl vydán k testování.
- Byla implementována dvanáctá testovací implementace vektorového API. Toto API poskytuje funkce pro vektorové výpočty prováděné pomocí vektorových instrukcí procesorů x86_64 a AArch64 a umožňuje simultánní operace s více hodnotami (SIMD). Na rozdíl od automatické vektorizace skalárních operací kompilátoru HotSpot JIT umožňuje nové API explicitní kontrolu nad vektorizací pro paralelní zpracování dat.
- Třetí verze API je nyní k dispozici pro kódování a dekódování objektů obsahujících kryptografické klíče, certifikáty a seznamy zneplatněných certifikátů pomocí formátu PEM (Privacy-Enhanced Mail).
Dále s potěšením oznamujeme vydání aktualizace platformy JavaFX 27 pro tvorbu aplikací s grafickým uživatelským rozhraním. V nadcházejících hodinách se očekává také vydání univerzálního virtuálního stroje GraalVM 27, který podporuje spouštění aplikací v JavaScriptu (Node.js), Pythonu, Ruby, R, libovolném jazyce JVM (Java, Scala, Clojure, Kotlin) a jazycích, pro které lze generovat bitový kód LLVM (C, C++, Rust).
Zdroj: opennet.ru
