Po šiestich mesiacoch vývoja spoločnosť Oracle vydala platformu Java SE 18 (Java Platform, Standard Edition 18), pričom ako referenčná implementácia sa používa otvorený projekt OpenJDK. Okrem odstránenia niektorých zastaraných funkcií v Java SE 18 bola zachovaná spätná kompatibilita s predchádzajúcimi verziami platformy Java — väčšina predtým napísaných Java projektov bude fungovať bez zmien pri spustení na novej verzii. Pripravené na inštaláciu zostavy Java SE 18 (JDK, JRE a Server JRE) sú dostupné pre Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Referenčná implementácia Java 18, vyvinutá v rámci projektu OpenJDK, je plne otvorená pod licenciou GPLv2 s výnimkami GNU ClassPath, ktoré povoľujú dynamické prepojenie s komerčnými produktmi.
Java SE 18 patrí do kategórie vydaní s bežnou dobou podpory, aktualizácie pre ktoré budú vydávané do ďalšieho vydania. Ako vetvu s dlhodobou dobou podpory (LTS) je potrebné používať Java SE 17, aktualizácie pre ktoré budú vydávané do roku 2029. Pripomeňme, že od vydania Java 10 prešiel projekt na nový proces vývoja, ktorý zahŕňa kratší cyklus vydania nových verzií. Nové funkcie sa teraz vyvíjajú v stále aktualizovanej master vetve, do ktorej sa zahrnú pripravené zmeny a od ktorej sa každých šesť mesiacov odčleňujú vetvy na stabilizáciu nových vydaní.
Medzi novinkami Java 18 môžeme spomenúť:
- Predvolená kódovanie je UTF-8. Java API, ktoré spracovávajú textové údaje so zohľadnením kódovania znakov, teraz predvolene používajú UTF-8 na všetkých platformách, bez ohľadu na systémové nastavenia a nastavenú lokalitu. Pre návrat k starému správaniu, kde sa kódovanie volí s ohľadom na systémovú lokalitu, môžete použiť parameter „-Dfile.encoding=COMPAT“.
- Súčasťou balíka je com.sun.net.httpserver, ktorý obsahuje nástroj jwebserver a knižnicové API implementujúce jednoduchý http.server na poskytovanie statického obsahu (CGI a servlet-príbuzné spracovatelia nie sú podporovaní). Vstavaný http.server nie je optimalizovaný pre pracovné zaťaženia a nepodporuje správu prístupu a autentifikáciu, keďže je primárne zameraný na využitie počas vývoja na vytváranie prototypov, ladenie a testovanie projektov.
- V JavaDoc je implementovaná podpora pre tag „@snippet“ na vkladanie pracovných príkladov a úryvkov kódu do dokumentácie API, na ktoré môžu byť aplikované nástroje na kontrolu správnosti, zvýrazňovanie syntaxe a integráciu s IDE.
- Bola prepracovaná implementácia API java.lang.reflect (Core Reflection), určená na získavanie informácií o metódach, poliach a konštruktoroch tried, ako aj na prístup k vnútornej štruktúre tried. Samotné API java.lang.reflect zostalo nezmenené, ale teraz je realizované cez použitie deskriptorov metód (method handles), ktoré poskytuje modul java.lang.invoke, namiesto aplikovania generátorov bajtkódu. Táto zmena umožnila zjednotiť implementácie java.lang.reflect a java.lang.invoke, a zjednodušiť ich údržbu.
- Bola navrhnutá tretia predbežná realizácia API Vector, poskytujúca funkcie pre vektorové výpočty, ktoré sú vykonávané pomocou vektorových inštrukcií procesorov x86_64 a AArch64 a umožňujú súčasne aplikovať operácie na niekoľko hodnôt naraz (SIMD). Na rozdiel od funkcií automatizovaného vektorizovania skalarových operácií poskytovaných JIT-kompilátorom HotSpot, nové API ponúka možnosť explicitne riadiť vektorizáciu pre paralelné spracovanie dát.
- Bol pridaný SPI rozhranie (service-provider interface) na rozlíšenie názvov hostiteľov a IP adresy, ktoré umožňuje v java.net.InetAddress nasadiť alternatívne rezolvery, nie viazané na spracovateľov poskytovaných operačným systémom.
- Navrhnutá druhá predbežná implementácia API Foreign Function & Memory, pomocou ktorého aplikácie môžu interagovať s kódom a údajmi, ktoré sa nachádzajú mimo Java runtime. Nové API umožňuje efektívne volať funkcie, ktoré nie sú vykonávané v JVM, a pristupovať k pamäti, ktorá nie je spravovaná JVM. Napríklad je možné volať funkcie z externých zdieľaných knižníc a pristupovať k údajom procesu bez použitia JNI.
- Pridaná druhá experimentálna implementácia zhodnotenia podľa vzoru vo výrazoch „switch“, ktorá umožňuje v značkách „case“ používať nie presné hodnoty, ale flexibilné vzory, pokrývajúce hneď sériu hodnôt, pre ktoré predtým bolo potrebné používať objemné reťazce výrazov „if…else“. Object o = 123L; String formatted = switch (o) { 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(); };
- Mechanizmus finalizácie bol vyhlásený za zastaraný a bude vypnutý v niektorom z nasledujúcich vydaní, rovnako ako súvisiace metódy, ako Object.finalize(), Enum.finalize(), Runtime.runFinalization() a System.runFinalization().
- Vo zberačoch odpadu ZGC (Z Garbage Collector), SerialGC a ParallelGC bola implementovaná podpora deduplikácie reťazcov.
Zdroj: opennet.ru
