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 |
J 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