Lëshimi i Java SE 23 dhe OpenJDK 23

Pas pas gjasht muajsh zhvillimi, kompania Oracle publikoi platformën Java SE 23 (Java Platform, Standard Edition 23), si një realizim referimi për të cilën përdoret projekti i hapur OpenJDK. Përveç eliminimit të disa mundësive të vjetruara, Java SE 23 mban përputhshmërinë e pasme 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. Ndërtimet e gatshme për instalim të Java SE 22 (JDK, JRE dhe Server JRE) janë përgatitur për Linux (x86_64, AArch64), Windows (x86_64) dhe macOS (x86_64, AArch64). Realizimi referencial i Java 23, i zhvilluar në kuadër të 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 23 i përket kategorisë së lëshimeve me një periudhë të zakonshme mbështetje, përditësimet e të cilit do të lëshohen deri në lëshimin e ardhshëm. Si një degë me një periudhë të gjatë mbështetjeje (LTS), duhet të përdoret Java SE 21 ose Java SE 17, përditësimet e të cilave do të lëshohen deri në vitet 2031 dhe 2029 përkatësisht (publike deri në vitet 2028 dhe 2026). Mbështetje e zgjeruar për degën LTS të Java SE 8 do të zgjasë deri në vitin 2030, ndërsa Java SE 11 deri në vitin 2032.

Në mesin e risive të propozuara në Java SE 23:

  • Modi gjenerues i mbledhĂ«sit tĂ« mbetjeve ZGC (Generational Z Garbage Collector) Ă«shtĂ« pĂ«rfshirĂ« si paraprakisht, duke pĂ«rdorur pĂ«rpunim tĂ« ndarĂ« tĂ« objekteve "tĂ« vjetra" dhe "tĂ« reja", duke rritur efikasitetin e pastrimit tĂ« objekteve tĂ« sapo krijuara me njĂ« jetĂ«gjatĂ«si tĂ« shkurtĂ«r. PĂ«rdorimi i Generational ZGC zvogĂ«lon rreziqet gjatĂ« ndarjes sĂ« burimeve, ul ngarkesĂ«n nĂ« CPU dhe konsumin e memories gjatĂ« mbledhjes sĂ« mbetjeve. Testimi i Generational ZGC me Apache Cassandra 4 tregoi njĂ« rritje tĂ« kapacitetit prej 4 herĂ« me njĂ« madhĂ«si tĂ« caktuar tĂ« heap-it dhe njĂ« zvogĂ«lim tĂ« madhĂ«sisĂ« sĂ« heap-it me njĂ« tĂ« katĂ«rt, duke mbajtur tĂ« pandryshuar kapacitetin.
  • JavaDoc ka shtuar mbĂ«shtetje pĂ«r pĂ«rdorimin e markueseve Markdown pĂ«r dokumentimin e kodit nĂ« komentet, tĂ« cilat mund tĂ« pĂ«rdoren nĂ« vend tĂ« njĂ« pĂ«rzierjeje tĂ« HTML dhe @-etiketave tĂ« JavaDoc.
    Lëshimi i Java SE 23 dhe OpenJDK 23
  • Mekanizmat e pĂ«rputhjes janĂ« zgjeruar me mbĂ«shtetje tĂ« pĂ«rparuar pĂ«r pĂ«rdorimin e tipeve primitive (int, byte, char dhe tipe tĂ« tjera themelore qĂ« nuk janĂ« objekte) nĂ« tĂ« gjitha format e shablloneve, nĂ« operatorin «instanceof» dhe nĂ« blloqet «switch». switch (x.getStatus()) { case 0 -> «mirë»; case 1 -> «kĂ«rkesë»; case 2 -> «gabim»; case int i -> «status i panjohur: » + i; } if (i instanceof byte b) { 
 b 
 }
  • Shtuar mbĂ«shtetje tĂ« pĂ«rparuar pĂ«r pĂ«rdorimin e njĂ« shprehjeje «import module M» pĂ«r tĂ« importuar menjĂ«herĂ« tĂ« gjithĂ« paketat qĂ« eksportohen nga moduli i caktuar. Ky ndryshim e thjeshton ndjeshĂ«m ri-pĂ«rdorimin e bibliotekave modulare, duke lejuar lidhjen e bibliotekave dhe klasave pa pĂ«rcaktimin e vendit tĂ« tyre nĂ« hierarkinĂ« e paketave. PĂ«r shembull, pĂ«rcaktimi «import module java.base» do tĂ« çojĂ« nĂ« importimin e tĂ« 54 paketeve qĂ« pĂ«rfshihen nĂ« modul java.base, tĂ« cilat dikur do tĂ« duheshin pĂ«rmendur veç e veç («import java.io.*», «import java.util.*» etj.).

    Propozuar një implementim të dytë të përparuar të API Class-File për analizimin, gjenerimin dhe transformimin e skedarëve me klasa Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().startsWith(«debug»))) { classBuilder.with(ce); } } });

  • Propozuar njĂ« implementim tĂ« tetĂ« tĂ« pĂ«rparuar tĂ« API Vector, qĂ« ofron funksione pĂ«r llogaritjet vektoriale, tĂ« cilat ekzekutohen duke pĂ«rdorur instrukcionet vektoriale tĂ« procesorĂ«ve x86_64 dhe AArch64 dhe lejojnĂ« aplikimin e operacioneve menjĂ«herĂ« nĂ« disa vlera (SIMD). NĂ« krahasim me mundĂ«sitĂ« e ofruara nga kompaktori JIT HotSpot pĂ«r avtokompleksifikimin e operacioneve skalar, API i ri ofron mundĂ«sinĂ« pĂ«r tĂ« menaxhuar qartĂ« vektorizimin pĂ«r pĂ«rpunimin paralel tĂ« tĂ« dhĂ«nave.
  • NĂ« klasĂ«n java.io.Console janĂ« shtuar metodat format, printf, readPassword dhe readLine pĂ«r formatimin, daljen dhe leximin e tekstit nĂ« pĂ«rputhje me lokalitetin e zgjedhur. System.console().printf(Locale.FRANCE, «%1$tY-%1$tB-%1$te %1$tA», new Date()) 2024-mai-16 e enjte
  • Shtuar njĂ« implementim tĂ« dytĂ« paraprak tĂ« API-sĂ« sĂ« zgjeruar Stream, qĂ« mbĂ«shtet pĂ«rcaktimin e operacioneve tĂ« ndĂ«rmjetme tĂ« personalizuara, tĂ« cilat mund tĂ« jenĂ« tĂ« dobishme nĂ« raste kur operacionet e ndĂ«rmjetme tĂ« ndĂ«rtuara nuk janĂ« tĂ« mjaftueshme pĂ«r transformimin e dĂ«shiruar tĂ« tĂ« dhĂ«nave. PjesĂ«tarĂ«t e personalizuar lidhen pĂ«rmes njĂ« operacioni tĂ« ri tĂ« ndĂ«rmjetĂ«m Stream::gather(Gatherer), i cili pĂ«rpunon elementĂ«t e rrjedhĂ«s duke u aplikuar atyre njĂ« trajtim tĂ« pĂ«rcaktuar nga pĂ«rdoruesi. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==>{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
  • Shtuar njĂ« implementim tĂ« tretĂ« paraprak tĂ« klasave tĂ« shpallura implicit dhe instancave anonim tĂ« metodĂ«s "main", nĂ« tĂ« cilat mund tĂ« kaloni pa shpalljet public/static, kalimin e njĂ« vargu argumentesh dhe entitete tĂ« tjera tĂ« lidhura me shpalljen e klasĂ«s. // ishte public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // tani mund tĂ« jetĂ« void main() { System.out.println("Hello, World!"); }
  • Shtuar njĂ« variant tĂ« dytĂ« paraprak tĂ« mundĂ«sive qĂ« lejojnĂ« pĂ«rcaktimin nĂ« konstruktorĂ« tĂ« shprehjeve para thirrjes super(...), e cila pĂ«rdoret pĂ«r thirrjen eksplicite tĂ« konstruktorit tĂ« klasĂ«s prind nga konstruktor i klasĂ«s trashĂ«guese, nĂ«se kĂ«to shprehje nuk referohen nĂ« instancĂ«n e krijuar nga konstruktor. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • Shtuar njĂ« implementim tĂ« tretĂ« paraprak tĂ« vlerave tĂ« kufizuara (Scoped Values), qĂ« lejojnĂ« ndarjen e tĂ« dhĂ«nave tĂ« pa ndryshueshme nĂ« RRJEDHA dhe kĂ«mbimin efikas tĂ« tĂ« dhĂ«nave midis rrjedhave fĂ«mijĂ« (vlerat trashĂ«gohen). Vlerat e Kufizuara po zhvillohen pĂ«r tĂ« zĂ«vendĂ«suar mekanizmin e variablave lokale pĂ«r rrjedhĂ«n (thread-local variables) dhe janĂ« mĂ« efikase nĂ« pĂ«rdorimin e njĂ« numri shumĂ« tĂ« madh tĂ« rrjedhave virtuale (mijĂ«ra dhe miliona rrjedha). Diferenca kryesore midis Vlerave tĂ« Kufizuara dhe variablave lokalĂ« pĂ«r rrjedhĂ«n Ă«shtĂ« se tĂ« parat shkruhen njĂ« herĂ«, mĂ« pas nuk mund tĂ« ndryshohen dhe mbeten tĂ« disponueshme vetĂ«m gjatĂ« ekzekutimit tĂ« rrjedhĂ«s.
  • Propozuar pĂ«r testim Ă«shtĂ« varianti i tretĂ« paraprak i API pĂ«r paralelizmin e strukturuar (Structured Concurrency), i cili thjeshton zhvillimin e aplikacioneve me shumĂ« thread-e duke trajtuar disa detyra qĂ« realizohen nĂ« thread-e tĂ« ndryshme si njĂ« njĂ«si tĂ« vetme.
  • Metodat pĂ«r qasje nĂ« memorien e jashtme (jashtĂ« JVM) tĂ« ofruara nga klasa sun.misc.Unsafe janĂ« shpallur tĂ« vjetra dhe planifikuar pĂ«r t'u fshirĂ«. PĂ«r tĂ« adresuar memorien jashtĂ« heap-it dhe pĂ«r tĂ« bashkĂ«punuar me kodin e jashtĂ«m, rekomandohet tĂ« pĂ«rdoret API VarHandle dhe API FFM (Foreign Function & Memory).

Gjithashtu mund të theksohet publikimi i update-it të platformës për krijimin e aplikacioneve me ndërfaqe grafike JavaFX 23 dhe përfshirja e një ekipi të plotë të Oracle JDK 23 JIT-kompilatorit GraalVM.

Po ashtu është prezantuar një version i ri i makinerisë universale GraalVM, që mbështet ekzekutimin e aplikacioneve në JavaScript (Node.js), Python, Ruby, R, të gjitha gjuhët për JVM (Java, Scala, Clojure, Kotlin) dhe gjuhët për të cilat mund të formohet bitcode LLVM (C, C++, Rust). Përveç mbështetjes për JDK 23, në këtë version është optimizuar konsumi i memorjes dhe përmasat e kodit ekzekutues, ndërsa është realizuar një mbështetje e plotë për mjete për integrimin e Python dhe WebAssembly në kodin Java duke përdorur JIT-kompilimin.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster