Pas gjashtë muaj zhvillimi, kompania Oracle publikoi platformën Java SE 26 (Java Platform, Standard Edition 26), e cila përdor projektin e hapur OpenJDK si realizimin referues. Përveç heqjes së disa mundësive të vjetra, Java SE 26 ruan përputhshmërinë me versionet e kaluara të platformës Java - shumica e projekteve Java të shkruara më parë do të funksionojnë pa ndryshime nën menaxhimin e versionit të ri. Versionet e gatshme për instalim të Java SE 26 (JDK, JRE dhe Server JRE) janë përgatitur për Linux (x86_64, AArch64), Windows (x86_64) dhe macOS (x86_64, AArch64). Realizimi referues i Java SE 26, i zhvilluar në kuadër të projektit OpenJDK, është plotësisht i hapur nën licencën GPLv2 me përjashtime nga GNU ClassPath, të cilat lejojnë lidhjen dinamike me produkte komerciale.
Java SE 26 është klasifikuar si një lëshim me mbështetje të zakonshme, përditësimet e të cilit do të lëshohen deri në lëshimin e ardhshëm. Si një degë me mbështetje afatgjatë (LTS), duhet të përdoret Java SE 25, Java SE 21 ose Java SE 17, përditësimet e të cilave do të lëshohen deri në vitet 2033, 2031 dhe 2029 përkatësisht (të qasshme deri në shtator 2030, 2028 dhe 2026). Mbështetje e zgjeruar për degën LTS të Java SE 8 do të vazhdojë deri në vitin 2030, ndërsa Java SE 11 deri në vitin 2032.
Ndër ndryshimet në Java SE 26 (1, 2, 3, 4):
- Në implementim është një njoftim kur përdoren refleksionet e thella për të ndryshuar fushat e shënuara me fjalën kyçe "final". Në të ardhmen planifikohet që mundësitë e pasigurta të gjuhës të çaktivizohen si të parazgjedhura dhe, përveç të tjerash, të bëhen fushat e shënuara si final plotësisht të pandryshueshme, duke hequr rrugën anësore për ndërrimin e tyre përmes refleksionit të thellë (API Reflection).
- API Applet (java.applet.Applet*, javax.swing.JApplet) është hequr, i cili është përdorur për të nisur aplikacionet Java në shfletues. Ky API ka humbur aktualitetin pas ndërprerjes së mbështetjes për plugin-in Java për shfletuesit dhe është shpallur i vjetruar në vitin 2021.
- ĂshtĂ« zbatuar mundĂ«sia e pĂ«rdorimit tĂ« caches sĂ« formuar paraprakisht (AOT â ahead-of-time) me çdo thjeshtues plehĂ«rash, duke pĂ«rfshirĂ« ZGC (Z Garbage Collector). Ky ndryshim nĂ«nkupton mbĂ«shtetje pĂ«r ngarkimin e pĂ«rshirĂ« tĂ« objekteve Java tĂ« ruajtura nĂ« memorje, duke pĂ«rdorur njĂ« format universale dhe tĂ« pavarur nga thjeshtuesit e plehĂ«rave, nĂ« vend tĂ« hartimit tĂ« drejtpĂ«rdrejtĂ« nĂ« memorje tĂ« pĂ«rfaqĂ«simeve specifike tĂ« caches. PĂ«rdorimi i caches AOT zvogĂ«lon kohĂ«n e nisjes dhe pĂ«rshpejton aktualizimin (warmup) tĂ« makinerisĂ« virtuale HotSpot.
- Në API HTTP Client është shtuar mbështetje për protokollin HTTP/3, i cili lejon aplikacioneve dhe bibliotekave të lidhen me serverët përmes HTTP/3 pas ndryshimeve minimale në kod.
- ĂshtĂ« pĂ«rmirĂ«suar performanca e thjeshtuesit tĂ« plehĂ«rave G1, falĂ« zvogĂ«limit tĂ« bllokimeve pĂ«r sinkronizimin e proceseve tĂ« aplikacionit me proceset e thjeshtuesit tĂ« plehĂ«rave.
- ĂshtĂ« propozuar njĂ« variant i dytĂ« paraprak i API pĂ«r kodimin dhe dekodimin e objekteve me çelĂ«sa kriptografikĂ«, certifikata dhe lista tĂ« tĂ«rhequra certifikatash, duke pĂ«rdorur formatin PEM (Pivacy-Enhanced Mail).
- ĂshtĂ« propozuar pĂ«r testim njĂ« variant i gjashtĂ« paraprak i API pĂ«r paralelizmin e strukturuar (Structured Concurrency), i cili thjeshton zhvillimin e aplikacioneve me shumĂ« procese pĂ«rmes trajtimit tĂ« disa detyrave qĂ« ekzekutohen nĂ« procese tĂ« ndryshme si njĂ« njĂ«si tĂ« vetme.
- ĂshtĂ« shtuar njĂ« redaktim i dytĂ« paraprak i API pĂ«r Konstantet TĂ« Ngadalta pĂ«r tĂ« punuar me objekte qĂ« pĂ«rmbajnĂ« tĂ« dhĂ«na tĂ« pandryshueshme dhe qĂ« trajtohen nĂ« JVM si constante. Optimizimet e performancĂ«s qĂ« aplikohet pĂ«r kĂ«to objekte janĂ« tĂ« ngjashme me ato tĂ« fushave me fjalĂ«n kyçe «final». Ndryshe nga «final», API i ri ndan krijimin e vlerave tĂ« pĂ«rhershme dhe inicializimin e tyre, duke garantuar qĂ« vlera mund tĂ« inicializohet vetĂ«m njĂ« herĂ«, zvogĂ«lon kohĂ«n e nisjes sĂ« programeve dhe lejon aplikimin e optimizimeve tĂ« mbledhjes sĂ« konstantave nĂ« kodin e pĂ«rdoruesve, tĂ« cilat mĂ« parĂ« ishin pĂ«rdorur vetĂ«m nĂ« kodin e brendshĂ«m tĂ« JDK. class Application { // Ka qenĂ«: // static final UserService USERS = new UserService(); // Tani mund tĂ« jetĂ«: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- Në mekanizmin e përshtatjes për shembuj është propozuar një variant i katërt paraprak i mundësive për të përdorur tipet primitive (int, byte, char dhe tipe të tjera bazike që nuk janë objekte) në të gjitha llojet e shablloneve, në operatorin «instanceof» dhe në blloqet «switch». switch (x.getStatus()) { case 0 -> «mirë»; case 1 -> «kërcënim»; case 2 -> «gabim»; case int i -> «status i panjohur: » + i; } if (i instanceof byte b) { ⊠b ⊠}
- ĂshtĂ« propozuar njĂ« implementim i njĂ«mbĂ«dhjetĂ« testues i API Vector, i cili ofron funksione pĂ«r llogaritje vektoriale, tĂ« cilat realizohen duke pĂ«rdorur instruksionet vektoriale tĂ« procesorĂ«ve x86_64 dhe AArch64 dhe lejojnĂ« zbatimin e operacioneve njĂ«herazi pĂ«r disa vlera (SIMD). Ndryshe nga mundĂ«sitĂ« e ofruara nĂ« kompiluesin JIT HotSpot pĂ«r avtokompaktimin e operacioneve skalarĂ«, API i ri ofron mundĂ«sinĂ« pĂ«r tĂ« menaxhuar qartazi vektorizimin pĂ«r pĂ«rpunimin paralel tĂ« tĂ« dhĂ«nave.
Për më tepër, kompania Oracle njoftoi projektin Detroit, i cili do të zhvillohet si pjesë e OpenJDK dhe ka për qëllim të përmirësojë portimin midis Java, JavaScript dhe Python. Në kuadër të projektit, synohet të ofrohet mundësia e integrimit në procesin JVM runtime me motorin JavaScript V8 dhe interpretorin CPython. Më parë, kompania Oracle kishte zhvilluar motorin JavaScript Nashorn, që punonte sipër makinerisë virtuale JVM, por e ndërpreu projektin për shkak të problemeve në zhvillimin e një zbatimi të veçantë të JavaScript në kushte kur ekosistema kryesore ishte e lidhur me motorin V8.
Së bashku, mund të përmendim publikimin e përditësimit të platformës për krijimin e aplikacioneve me ndërfaqe grafike JavaFX 26. Në orët e ardhshme pritet gjithashtu publikimi i makinës univerzale GraalVM 26, e cila mbështet ekzekutimin e aplikacioneve në JavaScript (Node.js), Python, Ruby, R, çdo gjuhë për JVM (Java, Scala, Clojure, Kotlin) dhe gjuhët për të cilat mund të formohet bitkodi LLVM (C, C++, Rust).
Burimi: opennet.ru
