Po šiestich mesiacoch vývoja spoločnosť Oracle vydala verziu Java SE 27 (Java Platform, Standard Edition 27), ktorá ako referenčnú implementáciu používa projekt OpenJDK s otvoreným zdrojovým kódom. S výnimkou odstránenia niektorých zastaraných funkcií si Java SE 27 zachováva spätnú kompatibilitu s predchádzajúcimi verziami platformy Java – väčšina predtým napísaných projektov Java bude pri spustení v novej verzii bežať nezmenená. Pripravené na inštaláciu sú zostavy Java SE 27 (JDK, JRE a Server JRE). Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Referenčná implementácia Java SE 27, vyvinutá v rámci projektu OpenJDK, je plne open source pod licenciou GPLv2 s výnimkou GNU ClassPath, ktorá umožňuje dynamické prepojenie s komerčnými produktmi.
Java SE 27 je zaradená do kategórie vydaní s bežnou podporou, pričom aktualizácie budú vydávané do nasledujúceho vydania. Vetva s dlhodobou podporou (LTS) by mala byť Java SE 25, Java SE 21 alebo Java SE 17, pričom aktualizácie budú vydávané do roku 2033, 2031 a 2029 (vo všeobecnosti dostupné do septembra 2030, 2028 a 2026). Rozšírená podpora pre vetvu Java SE 8 LTS bude pokračovať do roku 2030 a pre Java SE 11 do roku 2032.
Zmeny v Java SE 27 (1, 2, 3, 4) zahŕňajú:
- V predvolenom nastavení všetky prostredia používajú zberač odpadu G1 (Garbage-First), ktorý sa predtým používal pre serverové systémy. G1 je optimalizovaný pre použitie na viacprocesorových systémoch s veľkými pamäťovými kapacitami a pre vyváženie predvídateľnej latencie s vysokou priepustnosťou. Počas prevádzky G1 rozdeľuje pamäť do mnohých malých oblastí a uprednostňuje tie oblasti s väčším počtom nepoužívaných objektov a menej aktívne využívanými údajmi.
- JVM HotSpot štandardne používa kompaktné hlavičky objektov. Na 64-bitových systémoch bola veľkosť hlavičky znížená z 96 na 64 bitov, čím sa znížila spotreba pamäte a zvýšila sa pravdepodobnosť, že sa dáta dostanú do vyrovnávacej pamäte procesora. V benchmarkoch SPECjbb2015 sa spotreba pamäte znížila o 22 %, zaťaženie CPU sa znížilo o 8 % a počet operácií zberu odpadu sa znížil o 15 %. Časy testovania analyzátora JSON sa skrátili o 10 %.
- Implementácia TLS 1.3 pridáva podporu pre hybridné schémy zhody kľúčov, ktoré kombinujú kvantovo odolný algoritmus ML-KEM (CRYSTALS-Kyber) s klasickými algoritmami eliptickej krivky ECDHE: X25519MLKEM768 (ECDHE s krivkou X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE s krivkou secp256r1 + ML-KEM-768) a SecP384r1MLKEM1024 (ECDHE s krivkou secp384r1 + ML-KEM-1024). V rozhraní API javax.net.ssl Tieto schémy sú štandardne povolené a na ich použitie nie sú potrebné žiadne zmeny v aplikácii.
- JDK Flight Recorder (JFR), nástroj používaný na monitorovanie výkonu, profilovanie a diagnostiku, teraz podporuje čistenie argumentov príkazového riadka, počiatočných hodnôt premenných prostredia a systémových vlastností v uložených diagnostických informáciách. Táto zmena zabraňuje úniku citlivých údajov spracovaných profilovaným procesom, ako sú autorizačné tokeny a prístupové kľúče API odovzdávané prostredníctvom premenných prostredia.
- Tretia ukážka rozhrania Lazy Constants API bola implementovaná pre prácu s objektmi obsahujúcimi nemenné dáta, ktoré sú v JVM považované za konštanty. Na takéto objekty sa aplikujú optimalizácie výkonu podobné tým, ktoré sú určené pre polia s kľúčovým slovom „final“. Na rozdiel od „final“ nové API oddeľuje vytváranie konštantných hodnôt od ich inicializácie, zaručuje, že hodnotu je možné inicializovať iba raz, skracuje čas spustenia programu a umožňuje použitie optimalizácií skladania konštánt, ktoré sa predtým používali iba v internom kóde JDK, v používateľskom kóde. class Application { // Predtým: // static final UserService USERS = new UserService(); // Teraz: static final StableValue UŽÍVATEĽIA = StabilnáHodnota.of(); verejná statická UžívateľskáSlužba používatelia() { vrátiť UŽÍVATEĽIA.orElseSet(UžívateľskáSlužba::nový); } }
- Nástroj na porovnávanie vzorov zavádza piaty návrh možnosti používať primitívne typy (int, byte, char a iné neobjektovo orientované základné typy) vo všetkých druhoch vzorov, v operátore instanceof a v blokoch switch. switch (x.getStatus()) { case 0 -> "okej"; case 1 -> "upozornenie"; case 2 -> "chyba"; case int i -> "neznámy stav: " + i; } if (i instanceof byte b) { … b … }
- Siedmy návrh rozhrania Structured Concurrency API, ktoré zjednodušuje vývoj viacvláknových aplikácií tým, že viacero úloh bežiacich na rôznych vláknach považuje za jeden celok, bol vydaný na testovanie.
- Bola implementovaná dvanásta testovacia implementácia rozhrania Vector API. Toto API poskytuje funkcie pre vektorové výpočty vykonávané pomocou vektorových inštrukcií procesorov x86_64 a AArch64 a umožňuje simultánne operácie s viacerými hodnotami (SIMD). Na rozdiel od automatickej vektorizácie skalárnych operácií kompilátora HotSpot JIT, nové API umožňuje explicitnú kontrolu nad vektorizáciou pre paralelné spracovanie dát.
- Tretia verzia rozhrania API je teraz k dispozícii na kódovanie a dekódovanie objektov obsahujúcich kryptografické kľúče, certifikáty a zoznamy zrušených certifikátov pomocou formátu PEM (Privacy-Enhanced Mail).
Okrem toho s potešením oznamujeme vydanie aktualizácie platformy JavaFX 27 na vytváranie aplikácií s grafickým používateľským rozhraním. V najbližších hodinách sa očakáva aj vydanie univerzálneho virtuálneho stroja GraalVM 27, ktorý podporuje spúšťanie aplikácií v jazykoch JavaScript (Node.js), Python, Ruby, R, ľubovoľnom jazyku JVM (Java, Scala, Clojure, Kotlin) a jazykoch, pre ktoré je možné generovať bitový kód LLVM (C, C++, Rust).
Zdroj: opennet.ru
