Pas six muajsh zhvillimi, kompania Oracle lëshoi platformën Java SE 20 (Java Platform, Standard Edition 20), e cila përdor projektin e hapur OpenJDK si implementim standard. Përveç heqjes së disa veçorive të vjetra, Java SE 20 ruan përputhshmërinë me versionet e mëparshme të platformës Java — shumica e projekteve Java të shkruara më parë do të funksionojnë pa ndryshime nën menaxhimin e versionit të ri. Paketat e gatshme për instalim të Java SE 20 (JDK, JRE dhe Server JRE) janë përgatitur për Linux (x86_64, AArch64), Windows (x86_64) dhe macOS (x86_64, AArch64). Implementimi standard i Java 20, i zhvilluar brenda projektit OpenJDK, është plotësisht i hapur nën licencën GPLv2 me përjashtime të GNU ClassPath, që lejojnë lidhjen dinamike me produkte komerciale.
Java SE 20 është kategorizuar si një version me mbështetje të zakonshme, përditësimet e të cilit do të publikohen deri në lëshimin e ardhshëm. Si degë me mbështetje të zgjatur (LTS) duhet të përdoret Java SE 17, përditësimet e të cilit do të publikohen deri në vitin 2029. Kujtojmë se që nga lëshimi i Java 10, projekti kaloi në një proces të ri zhvillimi, që parashikon një cikël më të shkurtër për formimin e lëshimeve të reja. Funksionaliteti i ri tani zhvillohet në një degë master të vazhdueshme që përfshin ndryshimet e gatshme dhe prej së cilës ndahen degët për stabilizimin e lëshimeve të reja çdo gjashtë muaj.
Nga risitë e Java 20 mund të përmenden:
- U propozua mbështetje paraprake për vlerat e kufizuara (Scoped Values), të cilat lejojnë ndarjen e të dhënave të pandryshueshme në rrjedha dhe shkëmbimin efikas të të dhënave midis rrjedhave fëmijë (vlerat trashëgohen). Scoped Values zhvillohen për të zëvendësuar mekanizmin e variablave lokale për rrjedhën (thread-local variables) dhe janë më efikase kur përdoren një numër shumë të madh rrjedhash virtuale (mijëra dhe miliona rrjedha). Dallimi kryesor i Scoped Values nga variablat lokale për rrjedhën është se të parat shkruhen njëherë, nuk mund të ndryshohen më tej dhe mbeten të aksesueshme vetëm për kohën e ekzekutimit të rrjedhës. 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(…); } }
- U shtua realizimi i dytë paraprak i modeleve të regjistrimeve (record pattern), që zgjerojnë mundësinë që shfaqej në Java 16 për përputhje me modelin në mënyrë për të analizuar vlerat e klasave të tipit regjistrimi. Për shembull: 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); } }
- U shtua realizimi i katërt paraprak i përputhjes me modelin në shprehjet "switch", që lejon në etiketat "case" përdorimin e modeleve fleksibël që mbulojnë një seri vlerash, për të cilat më parë ishte e nevojshme të përdoret një varg i gjatë shprehjesh "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(); }; }
- U shtua realizimi i dytë paraprak i API FFM (Foreign Function & Memory), që lejon organizimin e bashkëpunimit të programeve Java me kodin dhe të dhënat e jashtme përmes thirrjeve të funksioneve nga biblioteka të jashtme dhe aksesit në kujtesë përtej JVM.
- U shtua realizimi i dytë paraprak i rrjedhave virtuale, që përfaqësojnë rrjedha të lehta, duke e thjeshtuar ndjeshëm shkruarjen dhe mbajtjen e aplikacioneve shumë të dhëna dhe me shumë rrjedha.
- U shtua varianti i dytë eksperimental i API për paralelizmin e strukturuar, që thjeshton zhvillimin e aplikacioneve shumë të dhëna përmes trajtimit të disa detyrave, të cilat ekzekutohen në rrjedha të ndryshme, si një bllok të vetëm.
- U shtua realizimi i pestë paraprak i API Vector, i cili ofron funksione për llogaritje vektoriale që kryhen duke përdorur udhëzimet vektoriale të procesorëve x86_64 dhe AArch64 dhe lejon aplikimin e operacioneve njëherësh në disa vlera (SIMD). Ndryshe nga funksionet e ofruara nga kompajleri JIT HotSpot për avotizimin automatik të operacioneve skalar, API i ri ofron mundësinë për të menaxhuar drejtpërdrejt vektorizimin për përpunimin paralel të të dhënave.
Burimi: opennet.ru
