Vydanie Java SE 23 a OpenJDK 23

Po šiestich mesiacoch vývoja spoločnosť Oracle vydala platformu Java SE 23 (Java Platform, Standard Edition 23), pričom ako referenčná realizácia sa používa otvorený projekt OpenJDK. Okrem odstránenia niektorých zastaraných funkcií v Java SE 23 zostala zachovaná spätná kompatibilita s predchádzajúcimi verziami platformy Java — väčšina predtým napísaných Java projektov bude fungovať bez zmien pri spustení s novou verziou. Hotové inštalačné zostavy Java SE 22 (JDK, JRE a Server JRE) sú pripravené pre Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Referenčná realizácia Java 23, vyvinutá v rámci projektu OpenJDK, je úplne otvorená pod licenciou GPLv2 s výnimkami GNU ClassPath, ktoré povoľujú dynamické prepojenie s komerčnými produktmi.

Java SE 23 je zaradená do kategórie vydaní so štandardnou dobou podpory, aktualizácie budú vydávané do nasledujúceho vydania. Ako vetvu s dlhodobou podporou (LTS) by ste mali použiť Java SE 21 alebo Java SE 17, pre ktoré budú vydávané aktualizácie do rokov 2031 a 2029 (verejné - 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.

Medzi novinkami v Java SE 23 nájdete:

  • Predvolený generatívny režim práce garbage collectora ZGC (Generational Z Garbage Collector) využíva oddelené spracovanie „starých“ a „mladých“ objektov, čo zvyšuje účinnosť čistenia novovytvorených objektov s krátkou životnosťou. Použitie Generational ZGC znižuje riziko prerušenia počas pridelenia zdrojov, znižuje záťaž CPU a spotrebu pamäte počas likvidácie odpadu. Testovanie Generational ZGC s Apache Cassandra 4 ukázalo štvornásobné zvýšenie priepustnosti pri pevnej veľkosti haldy (heap) a zníženie veľkosti haldy o štvrtinu pri nezmenenej priepustnosti.
  • Do JavaDoc bola pridaná podpora pre použitie Markdown rozšírenia na dokumentovanie kódu v komentároch, ktoré je možné použiť namiesto zmesi HTML a @-tagov JavaDoc.
    Vydanie Java SE 23 a OpenJDK 23
  • Mechanizmy porovnávania rozšírené o predbežnú podporu pre použitie primitivných typov (int, byte, char a iné základné typy, ktoré nie sú objektmi) vo všetkých typoch š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 -> „neznámy stav: „ + i; } if (i instanceof byte b) { … b … }
  • Pridaná predbežná podpora pre použitie jedného výrazu „import module M“ na importovanie všetkých balíkov exportovaných daným modulom. Táto zmena výrazne zjednodušuje opätovné využitie modulových knižníc, pričom umožňuje pripojenie knižníc a tried bez nutnosti určiť ich miesto v hierarchii balíkov. Napríklad, uvedenie „import module java.base“ spôsobí import všetkých 54 balíkov, ktoré sú súčasťou modulu java.base, ktoré by sa predtým museli uvádzať individuálne („import java.io.*“, „import java.util.*“ a pod.).

    Navrhnutá druhá predbežná implementácia API Class-File na analýzu, generovanie a transformáciu súborov s Java triedami. 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); } } });

  • Navrhnutá ôsma predbežná implementácia API Vector, ktorá poskytuje 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 viacero hodnôt (SIMD). Na rozdiel od funkcií automatizovanej vektorizácie skalarových operácií poskytovaných JIT kompilátorom HotSpot, nové API umožňuje explicitne riadiť vektorizáciu pre paralelné spracovanie dát.
  • Do triedy java.io.Console boli pridané metódy format, printf, readPassword a readLine pre formátovanie, výstup a čítanie textu s ohľadom na vybranú lokalitu. System.console().printf(Locale.FRANCE, „%1$tY-%1$tB-%1$te %1$tA“, new Date()) 2024-mai-16 jeudi
  • Pridaná druhá predbežná implementácia rozšíreného API Stream, ktorá podporuje definovanie vlastných medzioperácií, ktoré môžu byť užitočné v prípadoch, keď existujúcich vstavaných medzioperácií je nedostatok pre požadovanú transformáciu údajov. Vlastné spracovatelia sa pripájajú pomocou novej medzioperácie Stream::gather(Gatherer), ktorá spracováva prvky prúdu s použitím 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]]
  • Pridaná tretia predbežná implementácia neexplicitne deklarovaných tried a anonymných inštancií metódy „main“, v ktorých je možné obísť deklarácie public/static, prenášanie poľa argumentov a iné entity spojené 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("Ahoj, svet!"); }
  • Pridaná druhá predbežná varianta funkcie, ktorá umožňuje špecifikáciu výrazov v konštruktoroch pred volaním super(...), slúžiacich na explicitné volanie konštruktora rodičovskej triedy z konštruktora dedenej triedy, pokiaľ sa tieto výrazy neodkazujú na inštanciu vytvorenú konštruktorom. class Outer { void hello() { System.out.println("Ahoj"); } class Inner { Inner() { hello(); super(); } } }
  • Pridaná tretia predbežná implementácia obmedzených hodnôt (Scoped Values), ktorá umožňuje zdieľať nemenné údaje v prúdoch a efektívne vymieňať dáta medzi podriadenými prúdmi (hodnoty sa dedičia). Scoped Values sa vyvíjajú ako náhrada za mechanizmus premenných lokálnych k prúdu (thread-local variables) a sú efektívnejšie pri použití veľmi veľkého počtu virtuálnych prúdov (tisíce a milióny prúdov). Hlavný rozdiel medzi Scoped Values a premennými lokálnymi k prúdu je v tom, že prvé sa zapisujú raz, ďalej nemôžu byť menené a zostávajú dostupné len počas vykonávania prúdu.
  • Predložený na testovanie tretí predbežný variant API pre štruktúrovaný paralelizmus (Structured Concurrency), ktorý zjednodušuje vývoj viackoľových aplikácií spracovaním viacerých úloh vykonávaných v rôznych vláknach ako jedného bloku.
  • Metódy prístupu k externému pamäťovému priestoru (mimo JVM), ktoré poskytuje trieda sun.misc.Unsafe, sú vyhlásené za zastarané a plánuje sa ich odstránenie. Na prístup k pamäti mimo haldy (off-heap) a interakciu s externým kódom sa odporúča používať API VarHandle a API FFM (Foreign Function & Memory).

Ďalšie poznámky zahŕňajú publikáciu aktualizácie platformy pre vytváranie aplikácií s grafickým rozhraním JavaFX 23 a zaradenie JIT kompilátora GraalVM do základného zloženia Oracle JDK 23.

Taktiež bol predstavený nový výstup univerzálnej virtuálnej mašiny GraalVM, ktorá podporuje spúšťanie aplikácií v JavaScripte (Node.js), Pythone, Rubyn, R, akýchkoľvek jazykov pre JVM (Java, Scala, Clojure, Kotlin) a jazykov, pre ktoré môže byť vytvorený bitkód LLVM (C, C++, Rust). Okrem podpory JDK 23 bola v novej verzii optimalizovaná spotreba pamäte a veľkosť spustiteľného kódu, implementovaná plná podpora nástrojov na vkladanie Pythonu a WebAssembly do Java kódu pomocou JIT 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