Java 23: Čo prináša JDK 23?

Java ako programovací jazyk pokračuje v dominancii pre dnešné technologické trendy. Aj súčasné vydanie Java 23 s množstvom vylepšení ukazuje, že premyslené plánovanie a dopredu stanovené a dodržané termíny prispievajú k tomu, že sa Java so svojim ekosystémom stala pre množstvo vývojárov na celom svete preferovanou platformou pre moderný vývoj softvéru.

Prehľad vylepšení jazyka Java (JEPs) za posledných 10 rokov

Prehľad vylepšení jazyka Java (JEPs) za posledných 10 rokov
ZDROJ: inside.java/2024/09/17/jdk-23-available/

Java 23  – prehľad a štatistika

Podobne ako s predchádzajúcimi vydaniami Javy, Java 23 je kolektívnym výsledkom prispievateľov a to, či už jednotlivcov, alebo organizácií OpenJDK komunity.

Množstvo zmien v JDK aktualizáciách zostáva za posledných pár rokov do značnej miery konštantná (v priemere okolo 10), ale to je dané pravidelnými šesťmesačnými vydaniami, ktoré aj napriek relatívne krátkemu času na prípravu siahajú od nových vlastností jazyka, cez malé vylepšenia existujúcej funkcionality, až po opravy chýb a aktualizácie dokumentácie.

Každá zmena pre daný tiket je reprezentovaná samostatným komitom do repozitára JDK Bug System. Zaujímavosťou je, že medzi verziami Java 11 až po Java 23 bolo 28 724 vyriešených problémov, pričom 20 450 (cca. 71%) bolo dokončenými ľuďmi pracujúcich pre Oracle, zatiaľ čo 8 274 (cca. 29%) prispeli jednotliví Java programátori pracujúci buď samostatne alebo pre iné organizácie.

Primitívne typy vo vzoroch, instaceof a switch (ukážka)

Táto zmena (JEP 455) zruší niekoľko obmedzení, ktoré existujú pri používaní primitívnych typov pri porovnávaní vzorov. Kód, ktorý spracováva primitívne typy a typy objektov, je možné zjednodušiť, keď nie sú potrebné žiadne špeciálne úpravy a obidva typy možno spracovať rovnakým spôsobom. Umožnenie inštancii instanceof akceptovať primitíva ďalej redukuje kód pre bežné prípady, pretože teraz dokáže automaticky spracovať podmienené pretypovania – kde je potrebné skontrolovať hodnotu, aby sa zabezpečilo, že je platná pre cieľový typ.

Deklarácie pre import modulov (ukážka)

JEP 476 – umožňuje vývojárom importovať všetky balíky exportované modulom pomocou jediného príkazu. To zjednodušuje opätovné použitie modulárnych knižníc bez toho, aby sa vyžadovalo, aby bol importovaný kód v samotnom module. Vďaka tejto funkcii môžu začiatočníci používať knižnice tretích strán a základné triedy Java bez toho, aby sa museli učiť, kde sa nachádzajú v hierarchii balíkov.

Implicitne deklarované triedy a inštancia main metód (tretia ukážka)

JEP 477 – Toto umožní začiatočníkom písať svoje prvé programy Java bez toho, aby museli najprv porozumieť funkciám určeným pre väčšie a komplexnejšie programy. Jednoduché programy môžu používať zjednodušené deklarácie a v prípade potreby sa bez problémov rozšíria o pokročilejšie funkcie podľa potreby. Skúsení vývojári si tiež môžu vychutnať stručné písanie malých programov.

Flexibilné telá konštruktorov (druhá ukážka)

JEP 482 – Umožnením, aby sa niektoré príkazy v konštruktoroch objavili pred explicitným vyvolaním konštruktora, teda super(…) alebo this(…), vývojári získajú slobodu lepšie vyjadrovať správanie konštruktorov. Prirodzenejšie umiestnenie logiky, ktoré táto vlastnosť poskytuje, odstraňuje potrebu začleniť časť kontrolnej a inicializačnej logiky do pomocných statických metód a pomocných medzikonštruktorov. Napríklad, ak môže konštruktor overiť prijaté argumenty pred vyvolaním konštruktora supertriedy, rýchlo zlyhá a vyhne sa tak zbytočnej inštancii supertriedy, keď sú argumenty neplatné.

Class-File API (druhý náhľad)

JEP 466 – tento JEP navrhuje API na analýzu, generovanie a transformáciu súborov triedy Java , ktoré sleduje formát definovaný špecifikáciou Java Virtual Machine . Ak bude toto API dodané ako súčasť každého vydania, zmierni sa napätie spôsobené tým, že Java prijala šesťmesačný cyklus medzi vydaniami a frameworkov, ktoré manipulujú so súbormi tried, ktoré sa aktualizujú pri každom vydaní za účelom rýchleho prijatia nových verzií. Keď sa táto funkcionalita dokončí, mala by oslobodiť samotný JDK od jeho závislosti od knižnice ASM tretej strany.

Vector API (ôsmy inkubátor)

JEP 469 – umožňuje vývojárom Java vyjadrovať vektorové výpočty, ktoré sa spoľahlivo kompilujú za behu do optimálnych vektorových inštrukcií na podporovaných architektúrach CPU, čím dosahujú výkon lepší ako ekvivalentné skalárne výpočty. Neexistujú žiadne rozdiely oproti 7. inkubácii tejto funkcie v JDK 22. Očakáva sa, že toto API sa bude naďalej vracať ako inkubačné, prinajlepšom len s malými zmenami, kým nebudú dostupné potrebné funkcie z projektu Valhalla.

Stream Gatherers (druhá ukážka)

JEP 473 – vylepšuje rozhranie Stream API na podporu vlastných prechodných operácií. To umožní prúdovým kanálom transformovať údaje spôsobmi, ktoré nie sú ľahko dosiahnuteľné s existujúcimi vstavanými prechodnými operáciami. Zberače prúdu poskytujú takú flexibilitu pre medziľahlé operácie, akú umožňujú zberače pre terminálne operácie. Toto vylepšenie predstavuje päť vstavaných zberačov.

Štruktúrovaný súbeh (tretí náhľad)

JEP 480 – štruktúrovaná súbežnosť umožňuje vývojárom zaobchádzať so skupinami súvisiacich úloh spustených v rôznych vláknach ako s jednou jednotkou práce, čím sa zjednodušuje spracovanie chýb a ich zrušenie, zvyšuje sa spoľahlivosť a zlepšuje sa pozorovateľnosť. Toto API podporuje štýl súbežného programovania, ktorý môže eliminovať bežné riziká vyplývajúce zo zrušenia a vypnutia, ako sú úniky vlákien a oneskorenia pri zrušení.

Scoped Values (tretí náhľad)

JEP 481 – umožní metóde zdieľať nemenné údaje so svojimi volajúcimi v rámci vlákna aj s podriadenými vláknami. Použitie hodnôt rozsahu sa dajú ľahšie zdôvodniť ako premenných lokálneho vlákna. Majú tiež nižšie priestorové a časové náklady, najmä ak sa používajú spolu s virtuálnymi vláknami (JEP 444) a štruktúrovanou súbežnosťou (JEP 480).

ZGC: Predvolený generačný režim

JEP 474 – prepne predvolený režim Z Garbage Collector (ZGC) na generačný režim. Spätná väzba z používania generácie ZGC, predstavenej v JDK 21, ako aj interné testovanie potvrdili, že vo väčšine prípadov použitia funguje výrazne lepšie ako negeneračný ZGC. Tento JEP tiež zavrhuje negeneračný režim ZGC so zámerom odstrániť ho v budúcom vydaní JDK.

Poznámky k dokumentu Markdown

JEP 467 – umožňuje použitie Markdown namiesto iba kombinácie HTML a Javadoc @-tagov na písanie komentárov v Javadoc dokumentácii. Nový formát uľahčuje čítanie a pochopenie dokumentácie v zdrojovej forme.

Návrh na odstránenie metódy prístupu k pamäti v sun.misc.unsafe

JEP 471 – zavedením rozhrania API pre cudzie funkcie a pamäť (JEP 454) v JDK 22 bolo poskytnuté podporované rozhranie API na efektívny prístup k externej (cudzej) pamäti. Preto bolo oznámené budúce odstránenie metód v sun.misc.unsafe používaných na cudzí prístup k pamäti.

Tu nájdeš poznámky ku vydaniu Java JDK 23.

Záver

Java 23 prináša množstvo vylepšení, ktoré zjednodušujú prácu vývojárov a umožňujú efektívnejšie využívanie platformy. Nové funkcie, ako vylepšenia jazyka, výkonu či nástrojov, opäť potvrdzujú, že Java je pre mnohých vývojárov preferovanou voľbou.

Ak si Java programátor a hľadáš prácu, pozri si naše benefity pre zamestnancov a reaguj na najnovšie ponuky práce.

O autorovi

Jozef Wagner

Java Developer Senior

Viac ako 10 rokov programujem v Jave, momentálne pracujem v msg life Slovakia ako Java programátor senior a pomáham zákazníkom implementovať ich požiadavky do poistného softvéru Life Factory. Vo voľnom čase si rád oddýchnem v lese, prípadne si zahrám nejakú dobrú počítačovú hru.

Daj nám o sebe vedieť