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
