Pas pas gjashtë muajsh zhvillimi, kompania Oracle publikoi platformën Java SE 20 (Java Platform, Standard Edition 20), e cila përdor projektin e hapur OpenJDK si implementimin referues. me përjashtim të heqjes së disa funksionaliteteve të vjetra, Java SE 20 mban përputhshmëri të prapame me versionet e mëparshme të platformës Java - shumica e projekteve të kaluara të shkruara në Java do të punojnë pa asnjë ndryshim nën menaxhimin e versionit të ri. Ndërtesat e gatshme për thekë 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 referues i Java 20, i zhvilluar në kuadër të projektit OpenJDK, është plotësisht i hapur nën licencën GPLv2 me përjashtime nga GNU ClassPath, që lejojnë lidhjen dinamike me produkte komerciale.
Java SE 20 është klasifikuar si një lëshim me një periudhë mbështetjeje standarde, përditësimet për të cilin do të publikohen deri në lëshimin e ardhshëm. Si degë me periudhë të zgjatur mbështetjeje (LTS) duhet të përdoret Java SE 17, përditësimet për të cilën do të publikohen deri në vitin 2029. Kujtojmë se, që nga publikimi i Java 10, projekti ka kaluar në një proces të ri zhvillimi, që përfshin një cikël më të shkurtër të formimit të lëshimeve të rinj. Funksionaliteti i ri tani zhvillohet në një degë master të përhershme, në të cilën përfshihen ndryshimet e gatshme dhe nga e cila ndahen degë për stabilizimin e lëshimeve të reja çdo gjashtë muaj.
Nga risitë e Java 20 mund të përmendim:
- ĂshtĂ« propozuar njĂ« mbĂ«shtetje paraprake pĂ«r vlera tĂ« kufizuara (Scoped Values), tĂ« cilat lejojnĂ« ndarjen e tĂ« dhĂ«nave tĂ« pandryshueshme nĂ« rrjedha dhe shkĂ«mbimin efikas tĂ« tĂ« dhĂ«nave midis nĂ«n-rrjedhave (vlerat trashĂ«gohen). Scoped Values zhvillohen pĂ«r tĂ« zĂ«vendĂ«suar mekanizmin e variablave lokalĂ« tĂ« rrjedhĂ«s (thread-local variables) dhe janĂ« mĂ« efikase kur pĂ«rdoren njĂ« numĂ«r shumĂ« tĂ« madh tĂ« rrjedhave virtuale (mijĂ«ra dhe milionĂ« rrjedha). Dallimi kryesor midis Scoped Values dhe variablave lokalĂ« tĂ« rrjedhĂ«s Ă«shtĂ« se tĂ« parat shkruhen njĂ« herĂ«, mĂ« pas nuk mund tĂ« ndryshohen dhe mbeten tĂ« disponueshme vetĂ«m gjatĂ« 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(âŠ); } }
- ĂshtĂ« shtuar njĂ« realizim i dytĂ« paraprak i ŃĐ°Đ±Đ»ĐŸĐœĂ«ve tĂ« regjistrimit (record pattern), qĂ« zgjerojnĂ« mundĂ«sinĂ« e pĂ«rfaqĂ«simit tĂ« pranishme nĂ« Java 16 pĂ«r pĂ«rputhshmĂ«rin me mostrat e mjeteve pĂ«r analizimin e vlerave tĂ« klasave tĂ« tipit record. 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); } }
- ĂshtĂ« shtuar njĂ« realizim i katĂ«rt paraprak i pĂ«rputhshmĂ«risĂ« me mostrat nĂ« shprehjet «switch», qĂ« lejon pĂ«rdorimin e formateve fleksibĂ«l nĂ« etiketat «case», duke mbuluar menjĂ«herĂ« njĂ« seri vlerash, pĂ«r tĂ« cilat mĂ« parĂ« ishte e nevojshme tĂ« pĂ«rdorej njĂ« varg i ngatĂ«rruar 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(); }; }
- ĂshtĂ« shtuar njĂ« realizim i dytĂ« paraprak i API FFM (Foreign Function & Memory), qĂ« lejon organizimin e bashkĂ«punimit tĂ« programeve Java me kod dhe tĂ« dhĂ«na tĂ« jashtme pĂ«rmes thirrjeve tĂ« funksioneve nga biblioteka tĂ« jashtme dhe aksesit nĂ« memorie jashtĂ« JVM.
- E shtuar është realizimi i dytë i përkohshëm i rrjedhave virtuale, të cilat janë rrjedha të lehta që thjeshtojnë ndjeshëm shkrimin dhe mbështetje e aplikacioneve të shumëfishta me performancë të lartë.
- E shtuar është varianti i dytë i API eksperimental për paralelizmin e strukturuar, i cili thjeshton zhvillimin e aplikacioneve të shumëfishta duke trajtuar disa detyra të kryera në rrjedha të ndryshme si një bllok të vetëm.
- E shtuar është realizimi i pestë i përkohshëm i API-së Vector, e cila ofron funksione për llogaritjet vektoriale që kryhen duke përdorur instrukcione vektoriale të procesorëve x86_64 dhe AArch64, duke lejuar që operacionet të aplikohen njëkohësisht në shumë vlera (SIMD). Ndryshe nga mundësitë e avovektorizimit të operacioneve skalarë të ofruara nga JIT-kompila HotSpot, API-i ri ofron mundësinë për të menaxhuar në mënyrë të qartë vektorizimin për përpunimin paralel të të dhënave.
Burimi: opennet.ru
