JEPy jazyka Java v JDK 25

Jako obvykle se mnoho JEPů týká funkcí, které ještě nejsou finální. Tyto náhledové funkce (definované v JEP 12) a inkubační moduly (definované v JEP 11) umožňují zahrnutí plně vyvinutých funkcí do JDK a zároveň poskytují možnost jejich úpravy na základě zpětné vazby. 

Pojďme se ponořit do této nejnovější verze, začněme s věcmi, které jsou součástí jazyka Java. 

JEP Jméno Postavení
507  Primitivní typy ve vzorech, instanceof a switch  Náhled 

JEP 507 přináší třetí náhled primitivních typů ve vzorech, instanceof a switch. Tato funkce byla představena v JDK 23 a od té doby zůstala nezměněna. Ačkoli je Java objektově orientovaný jazyk, podporuje také primitivní hodnoty (základní datové typy zabudované přímo do jazyka) pro zajištění lepšího výkonu. Problém je v tom, že některé části jazyka neumožňují použití primitiv, a proto je nutné je nahradit ekvivalentními obalovými třídami s nezbytnou režií vytváření objektů a sběru odpadků. Projekt Valhalla nám doufejme umožní vytvářet generické typy, které mohou používat primitivy jako parametr typu. Prozatím se obtíže snižují tím, že je možné použít primitivy ve vzorech. To je významné zlepšení zejména pro switch. Některé okrajové případy však vyžadují pro jejich plné pochopení další zvážení. 

Podívejte se například na tento přepínač:

int x = 42; 


switch (x) 

Co byste očekávali, že se stane? 

Odpověď je (alespoň pro mě) trochu překvapivá. 

Tento přepínač způsobí chybu kompilátoru, protože celé číslo dominuje nad bajtovým, takže je nedosažitelné.

switch (x) 

Ve druhém přepínači je boxovací konverze z int na integer bezpodmínečně přesná, takže kompilátor neurčuje, zda stále existuje dominance. Toto se zkompiluje a poběží celkem hladce. 

Pojďme se podívat na další funkce v JDK 25. 

JEP Jméno Postavení
511  Deklarace importu modulů  Zavřeno, doručeno 

JEP 511 se zabývá deklaracemi importu modulů. Jedná se o drobnou změnu, která zjednodušuje způsob importu všech veřejně dostupných prvků modulu pomocí jediného příkazu. Je to podobné, jako když příkaz import umožňuje použití zástupného znaku pro prvky balíčku. 

JEP Jméno Postavení
512  Kompaktní zdrojové soubory a hlavní metody instance  Zavřeno, doručeno 

JEP 512 je Kompaktní zdrojové soubory a hlavní metody instance. Toto je nyní finální funkce a je součástí dlouhodobějšího pokusu o zjednodušení psaní vaší úplně první Java aplikace. Místo nutnosti definovat třídu s hlavní metodou kvalifikovanou jako public static void, stačí následující:

void main() 
JEP Jméno Postavení
513  Flexibilní konstrukční těla  Zavřeno, doručeno 

JEP 513 je Flexibilní těla konstruktorů. Toto uvolňuje určitá omezení ohledně fungování konstruktorů. Dříve muselo být jakékoli volání nadtřídy nebo přetíženého konstruktoru prvním příkazem. Nyní lze určité věci, jako například testy hodnot parametrů, vyhodnotit a potenciálně vyvolat výjimku před tímto voláním. To snižuje složitost kódu a eliminuje zbytečná volání metod. Toto bylo představeno jako náhledová funkce v JDK 22 v rámci JEP 447 s názvem Flexibilní těla konstruktorů a nyní je finální. 

Přejdeme-li do knihoven tříd, máme k dispozici následující funkce: 

JEP Jméno Postavení
470  PEM kódování pro kryptografické objekty  Zavřeno, doručeno 

JEP 470 je PEM kódování pro kryptografické objekty. Toto rozhraní API poskytuje pro kódování/dekódování objektů, které představují kryptografické klíče, certifikáty a seznamy zneplatněných certifikátů v rámci široce používaného transportního formátu PEM (Privacy-Enhanced Mail) a mimo něj. 

JEP Jméno Postavení
502  Stabilní hodnoty  Náhled 

JEP 502 se týká stabilních hodnot. Důležitým bodem diskuse při vývoji kódu v Javě je nejlepší využití objektů, které obsahují neměnné hodnoty. Java vždy měla klíčové slovo final, ale to není skutečně final, protože pole final lze upravovat pomocí reflexe. JEP Stabilní hodnoty zavádí API pro objekty, které JVM považuje za konstanty, a proto mohou těžit ze stejných výhod výkonu jako proměnné final. Stabilní hodnoty navíc poskytují větší flexibilitu při jejich inicializaci. Toto je ukázková funkce. 

JEP Jméno Postavení
505  Strukturovaná souběžnost  Náhled 

JEP 505 je strukturovaná souběžnost a nyní je ve své páté preview verzi. Jako součást širšího projektu Loom zachází strukturovaná souběžnost se skupinami souvisejících úloh běžících v různých vláknech jako s jednotlivými pracovními jednotkami, čímž zefektivňuje zpracování a rušení chyb, zlepšuje spolehlivost a zlepšuje pozorovatelnost. 

JEP Jméno Postavení
506  Vymezené hodnoty  Zavřeno, doručeno 

JEP 506 se nazývá Scoped Values ​​(Values ​​s omezeným rozsahem). Je také součástí projektu Loom a souvisí se strukturovanou souběžností. Scoped Values ​​umožňují metodě sdílet neměnná data jak s volanými proměnnými v rámci vlákna, tak s podřízenými vlákny. Scoped Values ​​jsou navrženy jako jednodušší alternativa k lokálním proměnným vlákna. Tato funkce, která byla představena jako ukázková funkce v JDK 21, je nyní finální. 

JEP Jméno Postavení
508  Vektorové API  Inkubátor 

JEP 508 je Vector API, které je nyní ve své rekordní desáté iteraci inkubátoru. Vector API je součástí většího projektu Valhalla, a proto zůstává inkubátorovým API. Dokud nebudou dodány další části Valhally, nebude toto API finalizováno pro případ, že by byly nutné další změny. Toto API poskytuje vývojářům způsob, jak dát JVM explicitní instrukce o tom, jak používat vektorové operace (jedna instrukce s více daty), aby bylo možné provádět více numerických operací (obvykle s polem) v jednom hodinovém cyklu. JIT kompilátor v JVM je již schopen používat autovektorizaci, ale není vždy schopen rozpoznat situace, kdy ji lze použít. Alternativní implementace, jako je JIT kompilátor Azul Falcon, který je součástí Platform Prime, dokáží autovektorizovat podstatně více kódu, což toto API činí méně hodnotným. 

JEP Jméno Postavení
510  API pro odvození klíčů  Zavřeno, doručeno 

JEP 510 je API pro odvození klíčů. Jedná se o API pro funkce odvození klíčů (KDF), což jsou kryptografické algoritmy pro odvození dalších klíčů z tajného klíče a dalších dat. Toto rozhraní, které bylo představeno jako ukázková funkce v JDK 24, je nyní finální. 

JDK 25 také obsahuje několik funkcí specifických pro JVM a další části JDK. 

JEP Jméno Postavení
519  Kompaktní záhlaví objektů  Zavřeno, doručeno 

JEP 519 je kompaktní záhlaví objektů. Na běžných 64bitových platformách používalo JVM 128 bitů k reprezentaci záhlaví objektu, které obsahovalo adresu objektu v haldě a různé stavové bity. Toto bylo nyní sníženo na 64 bitů bez ztráty funkčnosti. I když se to může zdát jako malá změna, může mít významný dopad. Profilování ukázalo 22% snížení velikosti haldy a 8% méně času CPU v běžném benchmarku. Toto bylo představeno jako ukázková funkce v JDK 24 a nyní je finální. 

JEP Jméno Postavení
521  Generační Shenandoah  Zavřeno, doručeno 

JEP 521 je Generational Shenandoah. Shenandoah je alternativní algoritmus pro sběr odpadu vyvinutý společností Red Hat. Zpočátku použití negenerační haldy neposkytovalo mnoha aplikacím potřebný výkon. Tato funkce, která byla představena jako ukázková verze v JDK 24, je nyní finální. Jiné algoritmy, jako například Azul C4 , který je součástí Platform Prime, mohou poskytnout ještě vyšší výkon a nižší latenci. 

Dva JEPy jsou součástí většího projektu Leyden, jehož cílem je zkrátit dobu spouštění a zahřívání spojenou s aplikacemi JVM. 

JEP Jméno Postavení
514  Ergonomie příkazového řádku s předstihem  Zavřeno, doručeno 

JEP 514 je ergonomie příkazového řádku s předstihem. Načítání a propojování tříd s předstihem bylo zahrnuto v JDK 24, ale vyžadovalo dvoufázový mechanismus pro generování a zpracování profilovacích dat. Ten byl vylepšen, aby se eliminovala potřeba samostatné fáze procesu. 

JEP Jméno Postavení
515  Profilování metod s předstihem  Zavřeno, doručeno 

JEP 515 je Ahead-of-Time Method Profiling (profilování metod před časem). Toto navazuje na načítání a propojování tříd AOT a poskytuje data profilování provádění metod při restartu aplikace. Alternativy, jako například ReadyNow, který je již součástí platformy Azul Platform Prime, nabízejí všechny tyto funkce a také opětovné použití kompilovaného kódu z předchozích běhů aplikace. To může přinést významné zvýšení výkonu. 

S vestavěným profilovacím nástrojem Java Flight Recorder (JFR) souvisí tři JEP. 

JEP Jméno Postavení
509  Profilování CPU času JFR  Zavřeno, doručeno 

JEP 509 , JFR CPU-Time Profiling, je představen jako experimentální funkce. Tato funkce zachycuje přesnější informace o profilování času CPU v systému Linux. 

JEP Jméno Postavení
518  Kooperativní vzorkování JFR  Zavřeno, doručeno 

JEP 518 je JFR kooperativní vzorkování. Toto vylepšení zlepšuje stabilitu sběru profilovacích dat, když jsou zásobníky vláken Java vzorkovány asynchronně. Toho je dosaženo procházením zásobníků volání pouze v bezpečných bodech a zároveň minimalizací zkreslení bezpečných bodů. 

JEP Jméno Postavení
520  Metoda a trasování JFR  Zavřeno, doručeno 

EP 520 je JFR Method Timing & Tracing. Poskytuje prostředky pro načasování a trasování metod pomocí instrumentace bajtkódu. 

JEP Jméno Postavení
503  Odebrání 32bitového portu x86  Zavřeno, doručeno 

Poslední funkcí v JDK 25 je JEP 503, odstranění 32bitového portu x86. 32bitový port JDK pro Windows byl v JDK 24 odstraněn, takže tím je dokončena práce na odstranění všech 32bitových portů. Ačkoli někteří lidé stále používají 32bitové operační systémy, jsou velmi staré a neočekává se, že by upgradovali svůj JDK bez upgradu operačního systému. 

Jak vidíte, JDK 25 obsahuje širokou škálu funkcí, které usnadní život vývojářům i uživatelům. JDK 25 je také verzí s dlouhodobou podporou (LTS) pro binární distribuce, jako je Azul Platform Core. To znamená, že bude mít prodlouženou údržbu (aktualizace) a podporu. 

Zdroj: Azul

Ohodnoťte prosím příspěvek. Díky tomu budeme vědět, na jaký obsah se v budoucnu soustředit.

Chcete být informováni o nových článcích na blogu Solutia?

Sledujte aktuální novinky a trendy z IT světa na našem profilu.

Sledovat na LinkedIn