Verzia Java SE 24 a OpenJDK 24

Po šiestich mesiacoch vývoja spoločnosť Oracle uverejnila platformu Java SE 24 (Java Platform, Standard Edition 24), pričom ako referenčná implementácia slúži otvorený projekt OpenJDK. S výnimkou odstránenia niektorých zastaraných funkcií v Java SE 24 je zachovaná spätná kompatibilita s predchádzajúcimi verziami platformy Java — väčšina predtým naprogramovaných projektov Java bude fungovať bez zmien pri spustení pod novou verziou. K dispozícii sú pripravené inštalačné zostavy Java SE 24 (JDK, JRE a Server JRE) pre Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Referenčná implementácia Java SE 24, vyvinutá 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 24 je klasifikovaná ako verzia s bežnou dobou podpory, aktualizácie pre ktorú budú vydávané do ďalšej verzie. Ako verzia s dlhou dobou podpory (LTS) sa odporúča použiť Java SE 21 alebo Java SE 17, pre ktoré budú aktualizácie vydávané do rokov 2031 a 2029 (verejne dostupné do rokov 2028 a 2026). Rozšírená podpora LTS vetvy Java SE 8 potrvá do roku 2030, zatiaľ čo Java SE 11 do roku 2032. Nasledujúcou LTS verziou bude jesenné vydanie Java SE 25.

Medzi novinkami, ktoré ponúka Java SE 24, sú:

  • Bol navrhnutý experimentálny generatívny režim práce garbage collectora Shenandoah, pri ktorom sa samostatne spracovávajú staré a novovytvorené objekty na zvýšenie efektivity čistenia objektov s krátkou životnosťou. Nový režim poskytuje predvídateľnejšiu priepustnosť, odolnosť voči zmenám zaťaženia a znižuje spotrebu pamäte pri zbere odpadu. Plánovač Shenandoah má za cieľ skrátiť časy zastavenia počas zberu odpadu realizovaním väčšieho objemu práce paralelne s vykonávaním Java aplikácií.
  • V HotSpot JVM bola implementovaná experimentálna podpora kompaktných hlavičiek objektov, ktorých veľkosť sa na 64-bitových systémoch znížila z 96 na 64 bitov (z 12 na 8 bajtov). Zníženie veľkosti hlavičiek umožňuje zmenšiť veľkosť hromady a zvýšiť efektivitu práce kešov.
  • V garbage collectore G1 bola zjednodušená implementácia bariér, ktoré sledujú prístup aplikácie k pamäti. V novej verzii boli operácie rozšírenia bariér presunuté na neskoršiu fázu kompilácie v C2 JIT. Testy ukazujú, že takýto presun umožňuje znížiť režijné náklady v JIT kompilátore C2 o 10-20% v závislosti od aplikácie.
  • Pridané API na využívanie kryptografických funkcií na deriváciu kľúča (KDF, key derivation function), ktoré umožňujú vytvoriť ďalšie kľúče požadovanej dĺžky na základe tajného kľúča (napríklad hesla) a ľubovoľnej množiny údajov. KDF API má zatiaľ štatút predbežného (preview).
  • Pridaná možnosť predbežného (Ahead-of-Time) načítania a kompozície tried. Zmena umožňuje urýchliť spustenie HotSpot JVM poskytnutím tried použitých v aplikácii v už načítanom a skomponovanom stave. Pri prvom spustení aplikácie sa stav všetkých tried uloží do cache a pri ďalších spusteniach sa používa na urýchlenie načítania.
  • Pridané API Class-File na analýzu, generovanie a konverziu súborov s triedami Java.

    ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().startsWith("debug"))) { classBuilder.with(ce); } } });

  • Pridané rozšírené API Stream, ktoré podporuje definovanie vlastných medzioperačných operácií, ktoré môžu byť užitočné v prípadoch, keď sú existujúce vstavané medzioperačné operácie nedostatočné na požadovanú konverziu údajov. Vlastní spracovatelia sa pripájajú pomocou novej medzioperačnej operácie Stream::gather(Gatherer), ktorá spracováva prvky prúdu aplikovaním na ne zadaného užívateľského spracovateľa. jshell > Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 == > [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Predložená štvrtá predbežná implementácia obmedzených hodnôt (Scoped Values), ktorá umožňuje zdieľať nemenné dáta v prúdoch a efektívne vymieňať dáta medzi podprúdmi (hodnoty sú dediace). Scoped Values sa vyvíjajú ako náhrada mechanizmu lokálnych premenných prúdu (thread-local variables) a sú efektívnejšie pri použití veľmi veľkého množstva virtuálnych prúdov (tisíce a milióny prúdov). Hlavný rozdiel medzi Scoped Values a lokálnymi premennými prúdu spočíva v tom, že prvé sa zapisujú raz, neskôr ich nie je možné zmeniť a zostávajú dostupné iba počas vykonávania prúdu.
  • Do mechanizmov porovnávania vzorov bola pridaná predbežná podpora pre použitie primitívnych typov (int, byte, char a ďalšie 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 … }
  • Predložená deviata predbežná implementácia API Vector, poskytujúca funkcie pre vektorové výpočty, ktoré sa vykonávajú pomocou vektorových inštrukcií procesorov x86_64 a AArch64 a umožňujú súčasne aplikovať operácie na viaceré hodnoty (SIMD). Na rozdiel od možností, ktoré ponúka JIT-kompilátor HotSpot na automatizovanú vektoráciu skalárnych operácií, nové API umožňuje explicitne spravovať vektoráciu pre paralelné spracovanie dát.
  • Implementovaná podpora synchronizácie virtuálnych prúdov bez ich pripevnenia (pinning) k prúdom spojeným s platformou. Virtuálne prúdy v synchronizovanej metóde alebo výraze v stave blokovania teraz uvoľňujú svoj platformový prúd, čo umožňuje iným virtuálnym prúdom používať ho, čo podstatne zvyšuje počet dostupných virtuálnych prúdov a zlepšuje škálovateľnosť aplikácií využívajúcich viacvláknovosť.
  • Bol pridaný tretí predbežný variant funkcie, ktorá umožňuje definovať výrazy v konštruktoroch pred volaním super(…), ktoré sa používa na explicitné volanie konštruktora rodičovskej triedy z konštruktora dedenej triedy, ak sa tieto výrazy neodkazujú na inštanciu vytvorenú konštruktorom. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • V nástroji jlink bola implementovaná podpora pre vytváranie runtime obrazov bez použitia súborov JMOD, čo umožňuje znížiť veľkosť JDK približne o 25%.
  • Bol pridaný druhý predbežný variant použitia výrazu „import module M“ na import všetkých balíkov, ktoré uvedený modul exportuje. Zmena podstatne uľahčuje opätovné použitie modulových knižníc, umožňujúca pripojiť knižnice a triedy bez určenia ich miesta v hierarchii balíkov. Napríklad, použitie „import module java.base“ spôsobí import všetkých 54 balíkov, ktoré sú súčasťou modulu java.base, ktoré by inak museli byť uvedené osobitne (napr. „import java.io.*“, „import java.util.*“ a pod.).
  • Bol pridaný štvrtý predbežný variant neexplicitne deklarovaných tried a anonymných inštancií metódy „main“, v ktorých je možné sa zaobísť bez deklarácií public/static, odovzdávania poľa argumentov a iných entít súvisiacich s deklaráciou triedy. // bolo public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // teraz je možné void main() { System.out.println("Hello, World!"); }
  • Bol navrhnutý na testovanie štvrtý predbežný variant API pre štruktúrovanú konkurenciu (Structured Concurrency), ktorý zjednodušuje vývoj viacerých vlákien aplikácií spracovaním viacerých úloh vykonávaných v rôznych vláknach ako jedného bloku.
  • Do API KeyPairGenerator, Signature a KeyFactory bola pridaná podpora algoritmov ML-KEM (CRYSTALS-Kyber) a ML-DSA (CRYSTALS-Dilithium), štandardizovaných Národným inštitútom štandardov a technológií USA (NIST) a odolných voči útokom na kvantových počítačoch. Tieto algoritmy využívajú kryptografické metódy založené na riešení úloh teórie mriežok, pričom čas na ich vyriešenie je rovnaký na bežných aj kvantových počítačoch.
  • V garbage collectore ZGC bola odstránená podpora ne-generatívneho režimu, ktorý nerozdeľoval spracovanie „starých“ a „mladých“ objektov. Od verzie Java SE 23 je generatívny režim ZGC aplikovaný predvolene.
  • Pridané varovania pri používaní API JNI (Java Native Interface) a FFM (Foreign Function & Memory) s cieľom pripraviť vývojárov na obmedzenie prístupu k týmto API z dôvodu zahrnutia v jednom z budúcich vydaní režimu zabezpečenia integrity, ktorý predvolene zakazuje interakciu s natívnym kódom.
  • Zapnuté varovanie pri používaní metód prístupu k externému pamäťovému priestoru (mimo JVM), poskytovaných triedou sun.misc.Unsafe. Na prístup k pamäti mimo haldy (off-heap) a interakciu s externým kódom sa odporúča používať API VarHandle. V predchádzajúcom vydaní bola podpora sun.misc.Unsafe vyhlásená za zastaranú.
  • Vypnutý Security Manager, ktorý už dávno stratil význam a stal sa málo žiadaným po ukončení podpory pre prehliadačové pluginy. Security Manager bol v Jave 17 vyhlásený za zastaraný. V jednom z nasledujúcich vydaní je plánované úplné odstránenie kódu Security Managera.
  • Odstránený kód na podporu 32-bitových platforiem OS Windows na systémoch x86. Vyhlásený za zastaraný a naplánovaný na odstránenie je port Javy pre 32-bitové systémy x86 (podpora Linuxu na 32-bitových systémoch x86 bude ukončená).

Ďalej je potrebné spomenúť publikáciu aktualizácie platformy na vytváranie aplikácií s grafickým rozhraním JavaFX 24 a nový release univerzálnej virtuálnej machine GraalVM, ktorá podporuje spúšťanie aplikácií v JavaScripte (Node.js), Pythone, Rubym, R, akýchkoľvek jazykoch pre JVM (Java, Scala, Clojure, Kotlin) a jazykoch, pre ktoré môže byť vytvorený bitcode LLVM (C, C++, Rust). Okrem podpory JDK 24 bola v novej verzii GraalVM vykonaná optimalizácia pre úlohy súvisiace s strojovým učením, vylepšená podpora kompilácie Java bytecode do strojového kódu, pridaný mechanizmus SkipFlow na zníženie veľkosti spustiteľných súborov a skrátenie času kompilácie.

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