Po šestih mesecih razvoja je podjetje Oracle izdalo platformo Java SE 20 (Java Platform, Standard Edition 20), pri čemer se uporablja odprti projekt OpenJDK kot referenčna implementacija. Z izjemo odstranitve nekaterih zastarelih funkcij je Java SE 20 ohranila nazaj kompatibilnost s prejšnjimi različicami platforme Java – večina prej napisanih Java projektov bo brez sprememb delovala v novi različici. Namenske različice Java SE 20 (JDK, JRE in Server JRE) so pripravljene za Linux (x86_64, AArch64), Windows (x86_64) in macOS (x86_64, AArch64). Referenčna implementacija Java 20, razvita v okviru projekta OpenJDK, je popolnoma odprta pod licenco GPLv2 z izjemo GNU ClassPath, ki dovoljuje dinamično povezovanje s komercialnimi izdelki.
Java SE 20 spada v kategorijo izdaj s redno podporo, za katere bodo posodobitve izdane do naslednje različice. Za uporabo se priporoča Java SE 17, ki je dolgoročna podpora (LTS), posodobitve zanjo pa bodo izdane do leta 2029. Spomnimo, da je od različice Java 10 projekt prešel na nov postopek razvoja, ki vključuje krajše cikle izdaj novih verzij. Nova funkcionalnost se zdaj razvija v eni nepretrgoma posodobljeni master veji, v katero se vključujejo že pripravljene spremembe, in od katere se vsakih šest mesecev odcepijo veje za stabilizacijo novih izdaj.
Med novostmi Java 20 lahko omenimo:
- Nudila se predhodna podpora omejenih vrednosti (Scoped Values), ki omogočajo skupno rabo nespremenljivih podatkov v niti in učinkovito izmenjavo podatkov med podniti (vrednosti se dedujejo). Scoped Values se razvijajo, da nadomestijo mehanizem spremenljivk lokalnih za nit (thread-local variables) in so bolj učinkoviti pri uporabi zelo velikega števila virtualnih niti (tisoče in milijoni niti). Glavna razlika med Scoped Values in spremenljivkami lokalnimi za nit je ta, da se prve zapišejo enkrat, jih ni mogoče spremeniti in ostanejo dostopne samo med izvajanjem 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(); if (!user.canOpen()) throw new InvalidUserException(); return new DBConnection(…); } }
- Dodana je druga predhodna implementacija vzorcev zapisov (record pattern), ki širi zmožnost ujemanja, uvedeno v Javi 16, za analizo vrednosti razredov tipa record. Na primer: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = p.x(); int y = p.y(); System.out.println(x+y); } }
- Dodana je četrta predhodna implementacija ujemanja vzorcev v izrazih „switch“, ki omogoča, da se v oznakah „case“ uporabijo ne natančne vrednosti, temveč fleksibilni vzorci, ki obsegajo celo vrsto vrednosti, za katere je bilo prej treba uporabiti obsežne verige izrazov „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 druga predhodna implementacija API FFM (Foreign Function & Memory), ki omogoča interakcijo Java programov z zunanjim kodo in podatki prek klicev funkcij iz zunanjih knjižnic in dostopa do pomnilnika zunaj JVM.
- Dodana je druga preliminarna implementacija virtualnih tokova, koji predstavljaju lagane tokove, znatno pojednostavljujući pisanje i održavanje visoko performantnih višedretvenih aplikacija.
- Dodana je druga verzija eksperimentalnog API-ja za strukturirani paralelizam, koja olakšava razvoj višedretvenih aplikacija obrađujući nekoliko zadataka koji se izvršavaju u različitim tokovima kao jedinstvenu jedinicu.
- Dodana je peta preliminarna implementacija API-ja Vector, koji pruža funkcije za vektorska računanja, koja se izvršavaju korišćenjem vektorskih instrukcija procesora x86_64 i AArch64 i omogućavaju istovremeno primenjivanje operacija na više vrednosti (SIMD). Za razliku od mogućnosti automatske vektorizacije skalarnih operacija dostupan u JIT kompajleru HotSpot, novi API omogućava eksplicitno upravljanje vektorizacijom za paralelnu obradu podataka.
Izvor: opennet.ru
