Po šestih mesecih razvoja je Oracle izdal platformo Java SE 20 (Java Platform, Standard Edition 20), ki kot referenčno implementacijo uporablja odprtokodni projekt OpenJDK. Z izjemo odstranitve nekaterih zastarelih funkcij Java SE 20 ohranja združljivost s prejšnjimi izdajami platforme Java – večina prej napisanih projektov Java se bo v novi različici izvajala nespremenjena. Pripravljene so za namestitev različice Java SE 20 (JDK, JRE in Server JRE). Linux (x86_64, AArch64), Windows (x86_64) in macOS (x86_64, AArch64). Referenčna implementacija Java 20, ki jo je razvil projekt OpenJDK, je v celoti odprtokodna pod licenco GPLv2 z izjemo GNU ClassPath, ki omogoča dinamično povezovanje s komercialnimi izdelki.
Java SE 20 je kategorizirana kot izdaja redne podpore, s posodobitvami, ki bodo izdane pred naslednjo izdajo. Veja dolgoročne podpore (LTS) bi morala biti Java SE 17, ki bo prejemala posodobitve do leta 2029. Spomnimo se, da je projekt z izdajo Jave 10 prešel na nov razvojni proces, kar pomeni krajši cikel za oblikovanje novih izdaj. Nova funkcionalnost se zdaj razvija v eni stalno posodobljeni glavni veji, ki vključuje že dokončane spremembe in iz katere se veje razvejajo vsakih šest mesecev za stabilizacijo novih izdaj.
Nove funkcije v Javi 20 vključujejo:
- Predlagana je predhodna podpora za omejene vrednosti (Scoped Values), ki omogoča deljenje nespremenljivih podatkov med nitmi in učinkovito izmenjavo podatkov med podrejenimi nitmi (vrednosti se dedujejo). Namenjene so nadomestitvi mehanizma lokalnih spremenljivk niti in so učinkovitejše pri uporabi zelo velikega števila virtualnih niti (tisoče in milijone niti). Glavna razlika med omejenimi vrednostmi in lokalnimi spremenljivkami niti je v tem, da se prve zapišejo enkrat, jih ni mogoče naknadno spremeniti in ostanejo na voljo le za čas izvajanja niti. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request.isAuthorized()? ADMIN : GUEST); var user = new User(level); ScopedValue.where(CURRENT_USER, user) .run(() -> Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); če (!user.canOpen()) vrže novo NeveljavnoIzjemoUporabnika(); vrni novo DBConnection(...); } }
- Dodana je bila druga predhodna implementacija vzorcev zapisov, ki razširja funkcijo ujemanja vzorcev, uvedeno v Javi 16, za razčlenjevanje vrednosti razredov zapisov. Na primer: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
- Dodana je bila četrta predogledna implementacija ujemanja vzorcev v izrazih switch, ki omogoča, da oznake primerov uporabljajo prilagodljive vzorce, ki obsegajo vrsto vrednosti namesto natančnih vrednosti, kar je prej zahtevalo nerodne verige stavkov if-else. static String formatterPatternSwitch(Object obj) { return switch (obj) { 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(); }; }
- Dodana je bila druga predhodna implementacija API-ja FFM (Foreign Function & Memory), ki programom Java omogoča interakcijo z zunanjo kodo in podatki s klicanjem funkcij iz zunanjih knjižnic in dostopom do pomnilnika zunaj JVM.
- Dodana je bila druga predhodna implementacija virtualnih niti, ki so lahke niti, ki močno poenostavijo pisanje in vzdrževanje visokozmogljivih večnitnih aplikacij.
- Dodana je bila druga različica eksperimentalnega API-ja za strukturirano paralelnost, ki poenostavlja razvoj večnitnih aplikacij, saj več nalog, ki se izvajajo v različnih nitih, obravnava kot eno samo enoto.
- Dodana je bila peta predhodna implementacija vektorskega API-ja. Ta API ponuja funkcije za vektorske izračune, ki se izvajajo z uporabo vektorskih ukazov procesorjev x86_64 in AArch64, ter omogoča sočasno delovanje z več vrednostmi (SIMD). Za razliko od samodejne vektorizacije skalarnih operacij prevajalnika HotSpot JIT, novi API omogoča ekspliciten nadzor nad vektorizacijo za vzporedno obdelavo podatkov.
Vir: opennet.ru
