Vydanie Java SE 20

Po šiestich mesiacoch vývoja vydal Oracle Java SE 20 (Java Platform, Standard Edition 20), 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 20 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 20 (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 20, 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 20 je klasifikovaná ako bežné vydanie podpory a bude naďalej dostávať aktualizácie až do ďalšieho vydania. Pobočka Long Term Support (LTS) by mala byť Java SE 17, ktorá bude naďalej dostávať aktualizácie až do roku 2029. 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 20 zahŕňajú:

  • Existuje predbežná podpora pre 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. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(request request, response response) { var level = (request. isAuthorized()? ADMIN : GUEST); var user = new User(level); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(požiadavka, odpoveď)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) vyvolá novú InvalidUserException(); return new DBConnection(...); } }
  • Bola pridaná druhá ukážka vzorov záznamov, ktorá rozširuje funkciu porovnávania vzorov zavedenú v jazyku Java 16 na analýzu hodnôt tried záznamov. Napríklad: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • Bola pridaná štvrtá predbežná implementácia porovnávania vzorov v príkazoch „switch“, čo umožňuje, aby štítky „case“ používali nie presné hodnoty, ale flexibilné vzory, ktoré pokrývajú sériu hodnôt naraz, pre ktoré bolo predtým potrebné používať ťažkopádne reťazce výrazov „ak...inak“. static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); }; }
  • Bola pridaná druhá predbežná implementácia FFM (Foreign Function & Memory) API, ktorá umožňuje organizovať interakciu programov Java s externým kódom a údajmi prostredníctvom volania funkcií z externých knižníc a prístupu k pamäti mimo JVM.
  • Bola pridaná druhá ukážka virtuálnych vlákien, čo sú ľahké vlákna, ktoré výrazne zjednodušujú písanie a údržbu vysokovýkonných viacvláknových aplikácií.
  • Pridané druhé experimentálne API pre štruktúrovaný paralelizmus, ktoré zjednodušuje vývoj viacvláknových aplikácií tým, že spracováva viacero úloh bežiacich v rôznych vláknach ako jeden blok.
  • Bola pridaná piata 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.

Zdroj: opennet.ru

Pridať komentár