Vydanie Java SE 25 LTS a OpenJDK 25

Po šiestich mesiacoch vývoja spoločnosť Oracle publikovala platformu Java SE 25 (Java Platform, Standard Edition 24), ktorej referenčná implementácia vychádza z otvoreného projektu OpenJDK. Okrem odstránenia niektorých zastaraných funkcií v Java SE 25 zostala zabezpečená spätná kompatibilita s predchádzajúcimi vydaniami platformy Java — väčšina predtým napísaných Java projektov bude fungovať bez zmien na novej verzii. Pripravené na inštaláciu zostavy Java SE 25 (JDK, JRE a Server JRE) sú k dispozícii pre Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Referenčná implementácia Java SE 25 navrhnutá v rámci projektu OpenJDK je plne otvorená pod licenciou GPLv2 s výnimkami GNU ClassPath, ktoré umožňujú dynamické prepojenie s komerčnými produktmi.

Java SE 25 patrí medzi vydania s rozšírenou dobou podpory, aktualizácie budú vydávané do roku 2033 (verejné aktualizácie budú vydávané do septembra 2030). Ako vetvy s dlhou dobou podpory (LTS) budú pokračovať aj vetvy Java SE 17 a 21, pre ktoré budú aktualizácie vydávané do rokov 2029 a 2031 (verejné — do roku 2026 a 2028). Rozšírená podpora LTS vetiev Java SE 8 a 11 potrvá do rokov 2030 a 2032.

Medzi novinkami navrhnutými v Java SE 25 (1, 2, 3, 4):

  • Bol pridaný experimentálny API StableValue na prácu s objektmi, ktoré obsahujú nemenné dáta a sú spracovávané v JVM ako konštanty. Na tieto objekty sa aplikujú optimalizácie výkonu podobné poliam s kľúčovým slovom „final“. API StableValue oddeľuje vytváranie trvalých hodnôt a ich inicializáciu, zaručuje, že hodnota môže byť inicializovaná len raz, skracuje čas spustenia programov a umožňuje v používateľskom kóde aplikovať optimalizácie zmršťovania konštánt (constant-folding), ktoré sa predtým používali len vo vnútornom kóde JDK. class Application { // Predtým: // static final UserService USERS = new UserService(); // Teraz: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
  • Bol pridaný experimentálny API na kódovanie a dekódovanie objektov s kryptografickými kľúčmi, certifikátmi a zoznamami odvolaných certifikátov s použitím formátu PEM (Pivacy-Enhanced Mail).
  • Pridaná podpora obmedzených hodnôt (Scoped Values), ktoré umožňujú zdieľať nemenné dáta v vláknach a efektívne vymieňať si dáta medzi podradenými vláknami (hodnoty sa dedičia). Scoped Values sú vyvinuté na nahradenie mechanizmu premenných lokálnych k vláknu (thread-local variables) a sú efektívnejšie pri použití veľmi veľkého množstva virtuálnych vlákien (tisíce a milióny vlákien). Hlavný rozdiel medzi Scoped Values a premennými lokálnymi k vláknu je v tom, že prvé sa zapisujú iba raz, následne ich nie je možné zmeniť a zostávajú dostupné len počas vykonávania vlákna.
  • Pridané API na používanie kryptografických funkcií derivácie kľúča (KDF, key derivation function), ktoré umožňujú generovať dodatočné kľúče požadovanej dĺžky na základe tajného kľúča (napríklad hesla) a ľubovoľného súboru dát.
  • Odstránený kód a skripty zostavenia pre podporu 32-bitových systémov x86. Ukončenie podpory 32-bitových systémov x86 umožnilo zjednodušiť infraštruktúru pre zostavovanie a testovanie JDK, ako aj realizovať možnosti viazané na platformy bez vytvárania fallback-handlerov pre 32-bitové systémy x86.
  • Pridaná možnosť používať jeden príkaz „import module M“ na import všetkých balíkov, ktoré vyváža zvolený modul. Táto zmena výrazne zjednodušuje opätovné použitie modulových knižníc, pričom umožňuje pripojiť knižnice a triedy bez definovania ich umiestnenia v hierarchii balíkov. Napríklad, prípad 'import module java.base' prinesie import všetkých 54 balíkov, ktoré sú súčasťou modulu java.base, pričom predtým by bolo potrebné ich spomínať samostatne („import java.io.*“, „import java.util.*“ atď.).
  • Navrhnutá kompaktná forma úpravy programov, ktorá môže byť užitočná pre vzdelávanie a pri vývoji malých aplikácií. V kompaktnej forme nie je potrebné definovať zbytočné triedy, automaticky sa importujú typové API a sú dostupné zjednodušené metódy vstupu/výstupu. Napríklad aplikáciu „Hello, World!“ možno zjednodušiť na: void main() { IO.println(„Hello, World!“); }
  • Povolené je použitie v konštruktoch výrazov pred volaním super(…), používaného na explicitné volanie konštruktora rodičovskej triedy z konštruktora zdedenej triedy, ak sa tieto výrazy nezameriavajú na vytváraný konštruktorom inštanciu. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • Pridaný generatívny režim práce garbage collectora Shenandoah, v ktorom sú oddelene spracované staré a nedávno vytvorené objekty pre zvýšenie efektivity čistenia objektov s krátkou životnosťou. Nový režim zabezpečuje predvídateľnejšiu propustnosť, odolnosť voči zmenám záťaže a zníženú spotrebu pamäte pri garbage collection. Plánovač Shenandoah sa sústreďuje na skrátenie času zastavenia počas garbage collection tým, že vykonáva väčšie množstvo práce paralelne s vykonávaním Java aplikácií.
  • Zjednodušené vytváranie cache pre predbežné (Ahead-of-Time) načítanie a kompiláciu tried, čo umožňuje zrýchliť spustenie HotSpot JVM zapojením tried v už načítanom a skompilovanom stave. Pri spustení už nie sú potrebné samostatné operácie na zapisovanie aktivít a vytváranie cache, stačí jeden príkaz: java -XX:AOTCacheOutput=app.aot -cp app.jar com.example.App …
  • Pri štarte HotSpot Java VM je implementovaná možnosť používať profily vykonávania metód získané pri predchádzajúcom spustení aplikácie. Zmena umožňuje JIT-kompilátoru obísť sa bez zhromažďovania štatistiky a okamžite začať generovať natívny kód bez čakania na vytvorenie profilu.
  • V HotSpot JVM je implementovaná podpora kompaktných hlavičiek objektov, ktorých veľkosť na 64-bitových systémoch bola znížená z 96 na 64 bitov (z 12 na 8 bajtov). Zníženie veľkosti hlavičiek umožňuje zmenšiť veľkosť haldy a zvýšiť efektivitu práce cache.
  • Navrhnutá testovacia implementácia API Vector poskytuje funkcie pre vektorové výpočty, ktoré sa vykonávajú s využitím vektorových inštrukcií procesorov x86_64 a AArch64 a umožňujú súčasne aplikovať operácie na viaceré hodnoty (SIMD). Na rozdiel od funkcií automatizovanej vektorizácie skalarových operácií poskytnutých JIT kompilátorom HotSpot dáva nové API možnosť výslovne riadiť vektorizáciu pre paralelné spracovanie údajov.
  • Pre testovanie bol navrhnutý piaty predbežný variant API pre štruktúrovanú paralelnost (Structured Concurrency), ktorý zjednodušuje vývoj viacvláknových aplikácií prostredníctvom spracovania niekoľkých úloh vykonávaných v rôznych vláknach ako jedného bloku.
  • V mechanizme porovnávania s obrazcom bol navrhnutý tretí predbežný variant možnosti využívania primitívnych typov (int, byte, char a iné základné typy, ktoré nie sú objektmi) vo všetkých druhoch šablón, v operátore «instanceof» a v blokoch «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 … }
  • Do JDK Flight Recorder (JFR) bola pridaná experimentálna podpora profilovania s presnejším sledovaním spotreby zdrojov CPU na platforme Linux. Informácie o čase vykonávania rôznych konštrukcií môžu byť vizuálne zobrazené pomocou farebných diagramov «FlameGraph».
  • Zvýšila sa stabilita fungovania JDK Flight Recorder (JFR) pri asynchrónnom vzorkovaní zásobníkov vlákien Java vďaka obchádzaniu zásobníka volaní len na «bezpečných bodov» (safepoints).
  • Do JDK Flight Recorder (JFR) boli pridané prostriedky pre sledovanie a hodnotenie času vykonávania metód. Podporuje sa sledovanie zásobníka volaní konkrétnych metód a zápis presnej štatistiky o volaniach metód, pokrývajúcej také metriky, ako sú čas vykonávania a počet volaní.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster