Vydanie platformy Java SE 22 a implementácie otvorenej referenčnej verzie OpenJDK 22

Po šiestich mesiacoch vývoja vydal Oracle Java SE 22 (Java Platform, Standard Edition 22), ktorý využíva open-source projekt OpenJDK ako referenčnú implementáciu. S výnimkou odstránenia niektorých zastaraných funkcií si Java SE 22 zachováva spätnú kompatibilitu s predchádzajúcimi vydaniami platformy Java – väčšina predtým napísaných projektov Java bude pri spustení v novej verzii fungovať bez zmien. Zostavy Java SE 22 (JDK, JRE a Server JRE) pripravené na inštaláciu sú pripravené pre Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Referenčná implementácia Java 22, vyvinutá projektom OpenJDK, je plne open source pod licenciou GPLv2, s výnimkami GNU ClassPath, ktoré umožňujú dynamické prepojenie s komerčnými produktmi.

Java SE 22 je klasifikovaná ako bežná podporná verzia a bude dostávať aktualizácie až do ďalšieho vydania. Pobočka Long Term Support (LTS) by mala byť Java SE 21 alebo Java SE 17, ktorá bude dostávať aktualizácie do roku 2031, respektíve 2029 (všeobecne dostupná do roku 2028 a 2026). Verejná podpora pre LTS vetvu Java SE 11 sa skončila minulý rok v septembri, ale predĺžená podpora bude pokračovať až do roku 2032. Rozšírená podpora pre LTS vetvu Java SE 8 bude pokračovať do roku 2030.

Pripomeňme, že počnúc vydaním Java 10 projekt prešiel na nový vývojový proces, čo znamená kratší cyklus tvorby nových vydaní. Nová funkcionalita sa teraz vyvíja v jednej neustále aktualizovanej hlavnej vetve, ktorá zahŕňa hotové zmeny a z ktorej sa vetvy rozvetvujú každých šesť mesiacov, aby sa stabilizovali nové vydania.

Nové funkcie v Java 22 zahŕňajú:

  • G1 garbage collector obsahuje podporu pre pripínanie oblastí, čo vám umožňuje dočasne opraviť umiestnenie objektov Java v pamäti, aby ste sa vyhli ich presúvaniu zberačom odpadu a aby sa odkazy na tieto objekty mohli bezpečne prenášať medzi Java a natívnym kódom. Pripnutie vám umožňuje znížiť latenciu a vyhnúť sa zakázaniu zhromažďovania odpadkov pri vykonávaní kritických oblastí JNI (Java Native Interface) s natívnym kódom (pri vykonávaní týchto sekcií by JVM nemalo presúvať kritické objekty, ktoré sú s nimi spojené, aby sa predišlo konfliktným podmienkam). Pripnutím sa odstránia kritické predmety z dohľadu zberača odpadu, ktorý môže pokračovať v čistení nepripnutých oblastí.
  • Bola pridaná predbežná funkcia, ktorá umožňuje špecifikovať výrazy v konštruktoroch pred volaním super(...), používa sa na explicitné volanie konštruktora nadradenej triedy zo zdedeného konštruktora triedy, ak tieto výrazy neodkazujú na inštanciu vytvorenú konštruktorom. class Vonkajší { void ahoj() { System.out.println("Ahoj"); } class Inner { Inner() { hello(); Super(); } } }
  • FFM (Foreign Function & Memory) API bolo stabilizované, čo umožňuje interakciu programov Java s externým kódom a údajmi volaním funkcií z externých knižníc a prístupom k pamäti mimo JVM, bez použitia JNI (Java Native Interface).
  • Bola povolená podpora nepomenovaných premenných a zhody vzorov – namiesto nepoužívaných, ale potrebných premenných a vzorov pri volaní môžete teraz zadať znak „_“. // was String pageName = switch (page) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // teraz môžete String pageName = switch (page) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • Predbežná implementácia Class-File API je navrhnutá na analýzu, generovanie a konverziu súborov triedy 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(). beginWith("debug"))) { classBuilder.with(ce); } } });
  • Pomôcka java poskytuje možnosť spúšťať programy Java dodávané vo forme niekoľkých súborov kódu alebo predkompilovaných knižníc tried bez samostatného kompilovania týchto súborov a bez konfigurácie systému zostavovania. Nová funkcia uľahčuje spúšťanie programov, v ktorých je kód rôznych tried rozdelený do samostatných súborov. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Ahoj!"); } }

    Napríklad na spustenie programu pozostávajúceho z dvoch súborov „Prog.java“ a „Helper.java“ teraz stačí spustiť „java Prog.java“, ktorý skompiluje triedu Prog, zadefinuje odkaz na triedu Helper, nájsť a skompilovať súbor Helper.java a zavolať metódu main.

  • Pridaná druhá predbežná implementácia String Templates, implementovaná okrem reťazcových literálov a textových blokov. Šablóny reťazcov umožňujú kombinovať text s vypočítanými výrazmi a premennými bez použitia operátora +. Nahradenie výrazov sa vykonáva pomocou substitúcií \{..} a na kontrolu správnosti dosadených hodnôt je možné pripojiť špeciálne obslužné programy. Napríklad nástroj SQL skontroluje hodnoty, ktoré sa nahrádzajú do kódu SQL a ako výstup vráti objekt java.sql.Statement, zatiaľ čo procesor JSON monitoruje správnosť náhrad JSON a vráti JsonNode. String query = "SELECT * FROM Person p WHERE p." + vlastnosť + " = '" + hodnota + "'"; // bol príkaz dotaz = SQL."""SELECT * FROM Osoba p WHERE p.\{vlastnosť} = '\{hodnota}'"""; // sa stal
  • Bola pridaná siedma ukážka rozhrania Vector API, ktorá poskytuje funkcie pre vektorové výpočty, ktoré sa vykonávajú pomocou vektorových inštrukcií na procesoroch x86_64 a AArch64 a umožňujú súčasné použitie operácií na viaceré hodnoty (SIMD). Na rozdiel od možností, ktoré poskytuje kompilátor HotSpot JIT pre automatickú vektorizáciu skalárnych operácií, nové API umožňuje explicitne riadiť vektorizáciu pre paralelné spracovanie údajov.
  • Bola pridaná predbežná implementácia rozšíreného Stream API, ktorá podporuje definovanie vašich vlastných medzioperácií, čo môže byť užitočné v prípadoch, keď existujúce vstavané medzioperácie nestačia na požadovanú transformáciu údajov. Natívne obslužné rutiny sú pripojené pomocou novej prechodnej operácie Stream::gather(Gatherer), ktorá spracováva prvky toku tak, že na ne aplikuje používateľsky špecifikovaný obslužný program. 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]]
  • Na testovanie bola navrhnutá druhá verzia experimentálneho API pre štruktúrovanú súbežnosť, ktorá zjednodušuje vývoj viacvláknových aplikácií spracovaním viacerých úloh vykonávaných v rôznych vláknach ako jeden blok.
  • Pridaná druhá predbežná implementácia implicitne deklarovaných tried a nepomenovaných inštancií metódy „main“, ktorá sa môže zaobísť bez verejných/statických deklarácií, odovzdávania radu argumentov a iných entít spojených s deklaráciou triedy. // bola verejná trieda HelloWorld { public static void main(String[] args) { System.out.println("Ahoj svet!"); } } // teraz môžete void main() { System.out.println("Ahoj, svet!"); }
  • Pridaná druhá ukážka implementácie Scoped Values, ktorá umožňuje zdieľanie nemenných údajov medzi vláknami a efektívnu výmenu údajov medzi podriadenými vláknami (hodnoty sa dedia). Scoped Values ​​​​sú vyvinuté s cieľom nahradiť mechanizmus lokálnych premenných vlákien a sú efektívnejšie pri použití veľmi veľkého počtu virtuálnych vlákien (tisíce alebo milióny vlákien). Hlavný rozdiel medzi Scoped Values ​​​​a lokálnymi premennými vlákna je v tom, že prvé sa zapisujú raz, v budúcnosti sa nedajú zmeniť a zostávajú dostupné iba počas trvania spustenia vlákna.
  • Parallel garbage collector má vylepšený výkon pri práci s veľkými poľami objektov. Optimalizácia umožnila v niektorých testoch s veľkými poľami objektov skrátiť oneskorenie pred začatím hľadania objektu o 20 %.

Okrem toho si môžete všimnúť zverejnenie aktualizácie platformy na vytváranie aplikácií s grafickým rozhraním JavaFX 22.

Zdroj: opennet.ru

Pridať komentár