Pas gjashtĂ« muajsh zhvillimi, Oracle publikoi platformĂ«n Java SE 25 (Java Platform, Standard Edition 24), ku si implementim referencĂ« pĂ«rdoret projekti i hapur OpenJDK. Me pĂ«rjashtim tĂ« heqjes sĂ« disa funksioneve tĂ« vjetruara, Java SE 25 ruan pĂ«rputhshmĂ«rinĂ« prapa me versionet e mĂ«parshme tĂ« platformĂ«s Java â shumica e projekteve Java tĂ« shkruara mĂ« herĂ«t do tĂ« funksionojnĂ« pa ndryshime kur ekzekutohen nĂ« versionin e ri. Paketat e gatshme pĂ«r instalim tĂ« Java SE 25 (JDK, JRE dhe Server JRE) janĂ« pĂ«rgatitur pĂ«r Linux (x86_64, AArch64), Windows (x86_64) dhe macOS (x86_64, AArch64). Implementimi referencĂ« i Java SE 25, i zhvilluar nĂ« kuadĂ«r tĂ« projektit OpenJDK, Ă«shtĂ« plotĂ«sisht i hapur nĂ«n licencĂ«n GPLv2 me pĂ«rjashtimet GNU ClassPath, tĂ« cilat lejojnĂ« lidhjen dinamike me produkte komerciale.
Java SE 25 Ă«shtĂ« klasifikuar si njĂ« version me mbĂ«shtetje tĂ« zgjeruar afatgjatĂ«, pĂ«r tĂ« cilin pĂ«rditĂ«simet do tĂ« publikohen deri nĂ« vitin 2033 (pĂ«rditĂ«simet publike do tĂ« dalin deri nĂ« shtator 2030). Si degĂ« me mbĂ«shtetje afatgjatĂ« (LTS), vazhdojnĂ« tĂ« mirĂ«mbahen edhe Java SE 17 dhe 21, pĂ«r tĂ« cilat pĂ«rditĂ«simet do tĂ« publikohen respektivisht deri nĂ« vitet 2029 dhe 2031 (publiket â deri nĂ« 2026 dhe 2028). MbĂ«shtetja e zgjeruar pĂ«r degĂ«t LTS Java SE 8 dhe 11 do tĂ« vazhdojĂ« deri nĂ« vitet 2030 dhe 2032.
Në mesin e risive të ofruara në Java SE 25 (1, 2, 3, 4):
- ĂshtĂ« shtuar API eksperimental StableValue pĂ«r punĂ« me objekte qĂ« pĂ«rmbajnĂ« tĂ« dhĂ«na tĂ« pandryshueshme dhe qĂ« trajtohen nga JVM si konstante. PĂ«r objekte tĂ« tilla zbatohen optimizime tĂ« performancĂ«s, tĂ« ngjashme me fushat qĂ« pĂ«rdorin fjalĂ«n kyçe «final». API StableValue ndan krijimin e vlerave tĂ« pĂ«rhershme nga inicializimi i tyre, garanton qĂ« vlera mund tĂ« inicializohet vetĂ«m njĂ« herĂ«, shkurton kohĂ«n e nisjes sĂ« programeve dhe mundĂ«son pĂ«rdorimin nĂ« kodin e pĂ«rdoruesit tĂ« optimizimeve tĂ« palosjes sĂ« konstanteve (constant-folding), tĂ« cilat mĂ« parĂ« pĂ«rdoreshin vetĂ«m nĂ« kodin e brendshĂ«m tĂ« JDK. class Application { // Ishte: // static final UserService USERS = new UserService(); // U bĂ«: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- Shtohet API eksperimental për kodimin dhe dekodimin e objekteve me çelësa kriptografikë, certifikata dhe lista të certifikatave të tërhequra, duke përdorur formatin PEM (Pivacy-Enhanced Mail).
- Shtimi i mbështetjes për vlerat e kufizuara (Scoped Values) lejon ndarjen e të dhënave të pandryshueshme në shkallë dhe shkëmbimin efektiv të të dhënave midis nënprocesseve (vlerat trashëzohen). Scoped Values po zhvillohen për të zëvendësuar mekanizmin e variablave lokalë të procesit (thread-local variables) dhe janë më efikase kur përdoren një numër shumë të madh procesesh virtualë (mijëra dhe miliona procese). Dallimi kryesor midis Scoped Values dhe variablave lokalë të procesit është se të parat shkruhen një herë, nuk mund të ndryshohen më pas dhe mbeten të disponueshme vetëm gjatë ekzekutimit të procesit.
- Shtuar API për të përdorur funksionet kriptografike të formimit të çelësit (KDF, key derivation function), të cilat lejojnë krijimin e çelësave shtesë me gjatësi të nevojshme mbi bazën e çelësit sekret (p.sh., fjalëkalimit) dhe një grup të dhënash të rastësishme.
- Rq 32-bit x86. Përfundimi i mbështetjes për sistemet 32-bit x86 ka lejuar thjeshtimin e infrastrukturës për ndërtimin dhe testimin e JDK, si dhe ka mundësuar implementimin e mundësive të lidhura me platforma, pa krijimin e menaxhuesve të fallback për sistemet 32-bit x86.
- ĂshtĂ« shtuar mundĂ«sia pĂ«r tĂ« pĂ«rdorur njĂ« shprehje tĂ« vetme «import module M» pĂ«r tĂ« importuar menjĂ«herĂ« tĂ« gjitha paketat e eksportuara nga moduli i specifikuar. Ky ndryshim e thjeshton ndjeshĂ«m ripĂ«rdorimin e bibliotekave modulare, duke lejuar lidhjen e bibliotekave dhe klasave pa pĂ«rcaktuar vendin e tyre nĂ« hierarkinĂ« e paketave. PĂ«r shembull, specifikimi «import module java.base» do tĂ« sjellĂ« importimin e tĂ« 54 paketave qĂ« pĂ«rfshihen nĂ« modulin java.base, tĂ« cilat mĂ« parĂ« do tĂ« duhej tĂ« pĂ«rmendeshin veçmas («import java.io.*», «import java.util.*» etj.).
- ĂshtĂ« propozuar njĂ« variant kompakt pĂ«r strukturimin e programeve, i cili mund tĂ« jetĂ« i dobishĂ«m pĂ«r mĂ«sim dhe pĂ«r zhvillimin e aplikacioneve tĂ« vogla. NĂ« formĂ«n kompakte nuk kĂ«rkohet pĂ«rcaktimi i klasave shtesĂ«, API-tĂ« tipike importohen automatikisht dhe ofrohen metoda tĂ« thjeshtuara tĂ« hyrjes/daljes. PĂ«r shembull, aplikacioni «Hello, World!» mund tĂ« reduktohet nĂ«: void main() { IO.println(«Hello, World!»); }
- Lejohet pĂ«rdorimi nĂ« konstruktorĂ« i shprehjeve pĂ«rpara thirrjes sĂ« super(âŠ), e cila pĂ«rdoret pĂ«r thirrjen e drejtpĂ«rdrejtĂ« tĂ« konstruktorit tĂ« klasĂ«s prind nga konstruktori i klasĂ«s trashĂ«guese, nĂ«se kĂ«to shprehje nuk i referohen instancĂ«s qĂ« krijohet nga konstruktori. class Outer { void hello() { System.out.println(«Hello»); } class Inner { Inner() { hello(); super(); } } }
- ĂshtĂ« shtuar njĂ« mod aktivizimi gjenerativ pĂ«r mbledhĂ«sin e mbetjeve Shenandoah, ku objektet e vjetra dhe ato tĂ« sapo krijuara trajtohen veçmas pĂ«r tĂ« rritur efikasitetin e pastrimit tĂ« objekteve me jetĂ«shkurtĂ«r. Ky mod i ri siguron njĂ« kapacitet mĂ« tĂ« parashikueshĂ«m, qĂ«ndresĂ« ndaj ndryshimeve tĂ« ngarkesĂ«s dhe zvogĂ«lim tĂ« konsumit tĂ« memories gjatĂ« mbledhjes sĂ« mbetjeve. Planifikuesi Shenandoah synon tĂ« reduktojĂ« kohĂ«t e ndalimeve gjatĂ« mbledhjes sĂ« mbetjeve duke kryer njĂ« volum mĂ« tĂ« madh punĂ«sh paralel me ekzekutimin e aplikacioneve Java.
- ĂshtĂ« thjeshtuar krijimi i cache-it pĂ«r ngarkimin dhe kompozimin paraprak (Ahead-of-Time) tĂ« klasave, i cili mundĂ«son pĂ«rshpejtimin e nisjes sĂ« HotSpot JVM duke pĂ«rdorur klasat nĂ« gjendje tashmĂ« tĂ« ngarkuar dhe tĂ« kompozuar. GjatĂ« nisjes nuk kĂ«rkohen mĂ« veprime tĂ« veçanta pĂ«r regjistrimin e aktivitetit dhe krijimin e cache-it, dhe mjafton njĂ« komandĂ« e vetme: java -XX:AOTCacheOutput=app.aot -cp app.jar com.example.App âŠ
- Në nisjen e HotSpot Java VM është realizuar mundësia e përdorimit të profileve të ekzekutimit të metodave, të marra nga nisja e kaluar e aplikacionit. Kjo ndryshim lejon që JIT-kompilatori të ecë përpara pa mbledhur statistika dhe të fillojë menjëherë të gjenerojë kodin natyror pa pritur formimin e profilit.
- Në HotSpot JVM është implementuar mbështetje për header-a kompakte të objekteve, të cilat në sisteme 64-bit kanë zvogëluar madhësinë nga 96 në 64 bite (nga 12 në 8 byte). Zvogëlimi i madhësisë së header-eve ndihmon në uljen e madhësisë së grumbullit dhe rrit efikasitetin e punës së caches.
- ĂshtĂ« propozuar njĂ« implementim testues tĂ« API Vector, qĂ« ofron funksione pĂ«r llogaritjet vektoriale, tĂ« cilat realizohen duke pĂ«rdorur instruksionet vektoriale tĂ« procesorĂ«ve x86_64 dhe AArch64 dhe lejojnĂ« aplikimin e operacioneve njĂ«kohĂ«sisht nĂ« disa vlera (SIMD). Ndryshe nga mundĂ«sitĂ« e avokimit tĂ« vetvetishĂ«m tĂ« operacioneve skalar tĂ« ofruara nga kompili i JIT HotSpot, API i ri ofron mundĂ«sinĂ« pĂ«r tĂ« menaxhuar qartĂ« vektorizimin pĂ«r pĂ«rpunimin paralel tĂ« tĂ« dhĂ«nave.
- ĂshtĂ« propozuar pĂ«r testim varianti i pestĂ« paraprak i API pĂ«r paralelizmin e strukturuar (Structured Concurrency), qĂ« thjeshton zhvillimin e aplikacioneve me shumĂ« fije pĂ«rmes trajtimit tĂ« disa detyrave qĂ« ekzekutohen nĂ« fije tĂ« ndryshme si njĂ« blok i vetĂ«m.
- Në mekanizmin e përputhjes së modeleve është propozuar një variant i tretë paraprak i mundësisë për të përdorur tipe primitive (int, byte, char dhe tipe të tjera bazë që nuk janë objekte) në të gjitha llojet e modeleve, në operatorin «instanceof» dhe në blloqet «switch». switch (x.getStatus()) { case 0 -> «okay»; case 1 -> «warning»; case 2 -> «error»; case int i -> «unknown status: » + i; } if (i instanceof byte b) { ⊠b ⊠}
- Në JDK Flight Recorder (JFR) është shtuar mbështetje eksperimentale për profilizim me gjurmim më të saktë të përdorimit të burimeve të CPU në platformën Linux. Informacioni për kohën e ekzekutimit të strukturave të ndryshme mund të vizualizohet qartë me përdorimin e diagrameve me ngjyra «FlameGraph».
- ĂshtĂ« rritur qĂ«ndrueshmĂ«ria e JDK Flight Recorder (JFR) gjatĂ« kampionimit asinkron tĂ« stekĂ«ve tĂ« rrjedhave Java, falĂ« pĂ«rshkimit tĂ« stekut tĂ« thirrjeve vetĂ«m nĂ« «pikat e sigurta» (safepoints).
- Në JDK Flight Recorder (JFR) janë shtuar mjete për ndjekjen dhe vlerësimin e kohës së ekzekutimit të metodave. Mbështetet ndjekja e stekëve të thirrjeve të metodave specifike dhe regjistrimi i statistikave të saktë mbi thirrjet e metodave, përfshirë tregues si kohën e ekzekutimit dhe numrin e thirrjeve.
Burimi: opennet.ru
