Vydání Java SE 25 LTS a OpenJDK 25

Po šesti měsících vývoje společnost Oracle vydala platformu Java SE 25 (Java Platform, Standard Edition 24), jejíž referenční implementací je otevřený projekt OpenJDK. Kromě odstranění některých zastaralých funkcí v Java SE 25 byla zachována zpětná kompatibilita s předchozími verzemi platformy Java – většina dříve napsaných Java projektů bude fungovat bez změn pod novou verzí. Sestavení Java SE 25 (JDK, JRE a Server JRE) připravená k instalaci jsou k dispozici pro Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Referenční implementace Java SE 25 vyvinutá v rámci projektu OpenJDK je plně otevřená pod licencí GPLv2 s výjimkami GNU ClassPath, které umožňují dynamické propojování s komerčními produkty.

Java SE 25 je považována za vydání s rozšířenou dobou podpory, aktualizace budou vydávány až do roku 2033 (veřejné aktualizace budou vycházet do září 2030). Větev s dlouhou dobou podpory (LTS) nadále doprovází také verze Java SE 17 a 21, aktualizace pro které budou vydávány do let 2029 a 2031, respektive (veřejné – do let 2026 a 2028). Rozšířená podpora LTS větví Java SE 8 a 11 bude trvat do roku 2030 a 2032.

Mezi novinkami nabízenými v Java SE 25 (1, 2, 3, 4):

  • Byl přidán experimentální API StableValue pro práci s objekty, které obsahují neměnné údaje a jsou v JVM zpracovávány jako konstanty. Na takové objekty se vztahují optimalizace výkonu podobné těm, které mají pole s klíčovým slovem „final“. API StableValue odděluje vytváření trvalých hodnot a jejich inicializaci, zaručuje, že hodnota může být inicializována pouze jednou, zkracuje dobu spuštění programů a umožňuje v uživatelském kódu aplikovat optimalizace zkracování konstant (constant-folding), které byly dříve používány pouze ve vnitřním kódu JDK. class Application { // Bylo: // static final UserService USERS = new UserService(); // Stalo se: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
  • Byl přidán experimentální API pro kódování a dekódování objektů s kryptografickými klíči, certifikáty a seznamy odvolaných certifikátů, používající formát PEM (Privacy-Enhanced Mail).
  • Byla přidána podpora ohraničených hodnot (Scoped Values), které umožňují sdílení neměnných dat v vláknových procesech a efektivní výměnu dat mezi podvlákny (hodnoty jsou děděny). Scoped Values se vyvíjejí jako náhrada mechanismu proměnných lokálních pro vlákno (thread-local variables) a jsou účinnější při použití velkého množství virtuálních vláken (tisíce a miliony vláken). Hlavní rozdíl mezi Scoped Values a proměnnými lokálními pro vlákno spočívá v tom, že první se zapisují jednou, poté již nemohou být změněny a zůstávají dostupné pouze během běhu vlákna.
  • Bylo přidáno API pro použití kryptografických funkcí generování klíčů (KDF, key derivation function), které umožňují vytvoření dalších klíčů požadované délky na základě tajného klíče (například hesla) a libovolné množiny dat.
  • Byl odstraněn kód a skripty pro podporu 32bitových systémů x86. Ukončení podpory 32bitových systémů x86 umožnilo zjednodušení infrastruktury pro sestavování a testování JDK, stejně jako implementaci funkcí závislých na platformách bez nutnosti vytvářet fallback zpracovatele pro 32bitové systémy x86.
  • Byla přidána možnost použití jednoho výrazu „import module M“ pro import všech balíčků exportovaných určeným modulem. Změna výrazně usnadňuje opětovné použití modulových knihoven, umožňuje připojování knihoven a tříd bez nutnosti definovat jejich umístění v hierarchii balíčků. Například uvedení „import module java.base“ povede k importu všech 54 balíčků zahrnutých v modulu java.base, které by dříve bylo nutné uvádět jednotlivě („import java.io.*“, „import java.util.*“ atd.).
  • Byl navržen kompaktní variant formátování programů, která může být užitečná při výuce a vývoji menších aplikací. V kompaktní formě není třeba definovat nadbytečné třídy, typové API se automaticky importují a zjednodušené metody vstupu/výstupu jsou dostupné. Například aplikaci „Hello, World!“ lze zjednodušit na: void main() { IO.println(„Hello, World!“); }
  • Je povoleno specifikovat vyjádření v konstruktoru před voláním super(…), které se používá pro explicitní volání konstruktoru rodičovské třídy z konstruktoru děděné třídy, pokud se tyto výrazy neodkazují na instanci vytvářenou konstruktorovým voláním. class Outer { void hello() { System.out.println("Ahoj"); } class Inner { Inner() { hello(); super(); } } }
  • Byl přidán generativní režim progarbage collector Shenandoah, kdy jsou Staré a Nové objekty zpracovávány odděleně pro zvýšení efektivity čištění objektů s krátkou životností. Nový režim zajišťuje předvídatelnější propustnost, odolnost vůči změnám zátěže a snížení spotřeby paměti při sběru odpadu. Plánovač Shenandoah se zaměřuje na zkrácení doby zastavení během sběru odpadu prováděním většího objemu práce paralelně s prováděním Java aplikací.
  • Bylo zjednodušeno vytvoření cache pro předběžné (Ahead-of-Time) načítání a sestavování tříd, což umožňuje zrychlit spuštění HotSpot JVM tím, že využívá třídy v již načteném a sestaveném stavu. Při spuštění již nejsou potřeba samostatné operace pro zápis aktivit a vytvoření cache, postačuje jeden příkaz: java -XX:AOTCacheOutput=app.aot -cp app.jar com.example.App …
  • Při spuštění HotSpot Java VM byla implementována možnost využití profilů vykonávání metod, získaných při předchozím spuštění aplikace. Tato změna umožňuje JIT kompilátoru obejít se bez shromažďování statistik a okamžitě začít generovat nativní kód bez čekání na vytvoření profilu.
  • V HotSpot JVM byla implementována podpora kompaktních hlaviček objektů, jejichž velikost na 64bitových systémech byla snížena z 96 na 64 bitů (z 12 na 8 bajtů). Snížení velikosti hlaviček umožňuje zmenšit velikost heapu a zvýšit efektivitu práce cache.
  • Byla navržena testovací implementace API Vector, která poskytuje funkce pro vektorové výpočty prováděné pomocí vektorových instrukcí procesorů x86_64 a AArch64 a umožňuje aplikovat operace na více hodnotách současně (SIMD). Na rozdíl od automatizované vektorizační funkce skalarových operací v JIT kompilátoru HotSpot, nové API umožňuje explicitně řídit vektorizační proces pro paralelní zpracování dat.
  • Byl navržen pro testování pátý předběžný návrh API pro strukturovanou konkurenci, který usnadňuje vývoj vícethreadových aplikací zpracováním několika úloh, které běží v různých vláknech, jako jednotného bloku.
  • Ve mechanismu vzorového porovnání byl navržen třetí předběžný návrh možnosti využití primitivních typů (int, byte, char a dalších základních typů, které nejsou objekty) ve všech typech šablon, v operátoru „instanceof“ a v blocích „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) byla přidána experimentální podpora profilu s přesnějším sledováním spotřeby CPU na platformě Linux. Informace o době běhu různých konstrukcí mohou být názorně vizualizovány pomocí barevných diagramů „FlameGraph“.
  • Zvýšena stabilita JDK Flight Recorder (JFR) při asynchronním vzorkování zásobníků Java vláken tím, že se obchází zásobník volání pouze na „bezpečných bodech“ (safepoints).
  • Do JDK Flight Recorder (JFR) byly přidány nástroje pro sledování a hodnocení doby běhu metod. Podporuje sledování zásobníku volání konkrétních metod a shromažďování přesné statistiky o volání metod, zahrnující takové metriky jako doba běhu a počet volání.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster