Lançimi 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), me projektin e hapur OpenJDK si implementimin referencĂ«. PĂ«rveç largimit tĂ« disa funksionaliteteve tĂ« vjetra, Java SE 23 ruan kompaktibilitetin me lĂ«shimet e mĂ«parshme tĂ« platformĂ«s Java – shumica e projekteve tĂ« Java tĂ« shkruara mĂ« parĂ« do tĂ« funksionojnĂ« pa ndryshime nĂ«n versionin e ri. Paketat 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). Implementimi i referencĂ«s Java 23, i zhvilluar nĂ«n projektin OpenJDK, Ă«shtĂ« plotĂ«sisht i hapur nĂ«n licencĂ«n GPLv2 me pĂ«rjashtimet e GNU ClassPath, qĂ« lejojnĂ« lidhjen dinamike me produkte komerciale.

Java SE 23 është klasifikuar si një lëshim me jetëgjatësi mbështetjeje të zakonshme, për të cilin përditësimet do të lëshohen deri në lëshimin e ardhshëm. Si deg më të gjatë të mbështetjes (LTS), duhet të përdoret Java SE 21 ose Java SE 17, për të cilat përditësimet do të lëshohen deri në vitin 2031 dhe 2029 përkatësisht (të qasshme 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.

Ndër risitë e propozuara në Java SE 23 janë:

  • Gjeneratori i kolektorit tĂ« plehrave ZGC (Generational Z Garbage Collector) Ă«shtĂ« pĂ«rfshirĂ« me default, qĂ« pĂ«rdor pĂ«rpunim tĂ« ndarĂ« pĂ«r objektet "e vjetra" dhe "tĂ« reja", duke rritur efikasitetin e pastrimit tĂ« objekteve tĂ« sapo krijuara me jetĂ« tĂ« shkurtĂ«r. PĂ«rdorimi i Generational ZGC redukton rrezikun e ndalimeve gjatĂ« alokimit tĂ« burimeve, ul ngarkesĂ«n nĂ« CPU dhe konsumimin e memories gjatĂ« koleksionit tĂ« plehrave. Testimi i Generational ZGC me Apache Cassandra 4 tregoi njĂ« rritje tĂ« kapacitetit deri nĂ« 4 herĂ« me njĂ« madhĂ«si tĂ« fiksuar tĂ« heap-it dhe njĂ« ulje tĂ« madhĂ«sisĂ« sĂ« heap-it me njĂ« tĂ« katĂ«rt pa ndryshuar kapacitetin.
  • NĂ« JavaDoc Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r pĂ«rdorimin e shenjĂ«s Markdown pĂ«r dokumentimin e kodit nĂ« komente, e cila mund tĂ« pĂ«rdoret nĂ« vend tĂ« njĂ« pĂ«rzierjeje tĂ« HTML dhe @-labels tĂ« JavaDoc.
    Lançimi i Java SE 23 dhe OpenJDK 23
  • Mekanizmat pĂ«r pĂ«rputhje me modele janĂ« zgjeruar me mbĂ«shtetje tĂ« pĂ«rparuar pĂ«r pĂ«rdorimin e tipeve primarĂ« (int, byte, char dhe tipe tĂ« tjera themelore qĂ« nuk janĂ« objekte) nĂ« tĂ« gjitha llojet e shablloneve, 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 
 }
  • ËshtĂ« shtuar mbĂ«shtetje e pĂ«rparuar pĂ«r pĂ«rdorimin e njĂ« shprehjeje "import module M" pĂ«r tĂ« importuar menjĂ«herĂ« tĂ« gjitha paketat qĂ« eksportohen nga moduli i caktuar. Ky ndryshim e thjeshton ndjeshĂ«m ripĂ«rdorimin e biblioteka modulore, duke lejuar lidhjen e bibliotekave dhe klasave pa caktuar vendin e tyre nĂ« hierarkinĂ« e paketave. PĂ«r shembull, pĂ«rcaktimi i "import module java.base" do tĂ« importojĂ« tĂ« gjitha 54 paketat qĂ« pĂ«rfshihen nĂ« modul java.base, tĂ« cilat mĂ« parĂ« do tĂ« duhej tĂ« pĂ«rmendeshin veç e veç ("import java.io.*", "import java.util.*" etj.).

    Propozohet një implementim i dytë i përparuar i API Class-File për analizën, 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); } } });

  • Propozohet njĂ« implementim i tetĂ« i pĂ«rparuar i API Vector, qĂ« ofron funksione pĂ«r llogaritje vektoriale, tĂ« cilat realizohen duke pĂ«rdorur instruksionet vektoriale tĂ« procesorĂ«ve x86_64 dhe AArch64 dhe lejojnĂ« aplikimin e operacioneve njĂ«kohĂ«sisht mbi disa vlera (SIMD). NĂ« krahasim me mundĂ«sitĂ« e ofruara nĂ« kompilatorin JIT HotSpot pĂ«r avto-vektorimin e operacioneve skalarĂ«, API-i i ri ofron mundĂ«sinĂ« pĂ«r tĂ« menaxhuar drejtpĂ«rsĂ«drejti 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, shfaqjen dhe leximin e tekstit me pĂ«rmirĂ«simin e lokalizimit tĂ« zgjedhur. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date()) 2024-mai-16 enjte
  • NjĂ« implementim i dytĂ« i pĂ«rparuar i API Stream Ă«shtĂ« shtuar, qĂ« mbĂ«shtet pĂ«rcaktimin e operacioneve tĂ« pĂ«rkohshme tĂ« pĂ«rdoruesit, tĂ« cilat mund tĂ« jenĂ« tĂ« dobishme kur operacionet e ndĂ«rtuara tĂ« pĂ«rkohshme janĂ« tĂ« pamjaftueshme pĂ«r transformimin e dĂ«shiruara tĂ« tĂ« dhĂ«nave. ProcesorĂ«t e personalizuar lidhen pĂ«rmes njĂ« operacioni tĂ« ri tĂ« pĂ«rkohshĂ«m Stream::gather(Gatherer), i cili trajton elementĂ«t e rrjedhĂ«s dhe u aplikon atyre procesorin e specifikuar 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]]
  • I Ă«shtĂ« shtuar njĂ« realizim i tretĂ« i paracaktuar i klasave qĂ« nuk janĂ« shpallur shprehimisht dhe instancave pa emĂ«r tĂ« metodĂ«s «main», nĂ« tĂ« cilat mund tĂ« kaloni pa shpalljet public/static, kalimin e njĂ« array 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!»); }
  • I Ă«shtĂ« shtuar njĂ« variant i dytĂ« i mundĂ«sisĂ«, i cili lejon specifikimin nĂ« konstruktore tĂ« shprehjeve para thirrjes sĂ« super(
), e cila pĂ«rdoret pĂ«r tĂ« thirrur qartĂ« konstruktorin e klasĂ«s prind nga konstruktorja e klasĂ«s trashĂ«guese, nĂ«se kĂ«to shprehje nuk i referohen instancĂ«s sĂ« krijuar nga konstruktori. class Outer { void hello() { System.out.println(«Hello»); } class Inner { Inner() { hello(); super(); } } }
  • I Ă«shtĂ« shtuar njĂ« realizim i tretĂ« i vlerave tĂ« kufizuara (Scoped Values), tĂ« cilat lejojnĂ« ndarjen e tĂ« dhĂ«nave tĂ« pandryshueshme nĂ« rrjedha dhe transferimin efikas tĂ« tĂ« dhĂ«nave ndĂ«rmjet nĂ«n-rrjedhave (vlerat trashĂ«gohen). Vlerat e kufizuara po 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 tĂ« madh virtuel rrjedhash (mijĂ«ra dhe miliona rrjedha). Dallimi kryesor i Vlerave tĂ« Kufizuara nga variablat lokalĂ« tĂ« rrjedhĂ«s Ă«shtĂ« se ato shkruhen njĂ« herĂ«, nuk mund tĂ« ndryshohen mĂ« dhe mbeten tĂ« aksesueshme vetĂ«m gjatĂ« ekzekutimit tĂ« rrjedhĂ«s.
  • Ă«shtĂ« propozuar pĂ«r testim njĂ« variant i tretĂ« i API pĂ«r paralelizmin e strukturuar (Structured Concurrency), qĂ« thjeshton zhvillimin e aplikacioneve me shumĂ« rrjedha duke trajtuar disa detyra qĂ« ekzekutohen nĂ« rrjedha tĂ« ndryshme, si njĂ« bllok tĂ« vetĂ«m.
  • I janĂ« shpallur tĂ« vjetĂ«ruar dhe janĂ« planifikuar pĂ«r t'u hequr metodat aksesit nĂ« memorjen jashtĂ« (jashtĂ« JVM), tĂ« ofruara nga klasa sun.misc.Unsafe. PĂ«r qasjen nĂ« memorjen jashtĂ« grumbullit (off-heap) dhe bashkĂ«punimin me kodin e jashtĂ«m, rekomandohet pĂ«rdorimi i API VarHandle dhe API FFM (Foreign Function & Memory).

Gjithashtu, mund të përmendet publikimi i një azhurnimi të platformës për krijimin e aplikacioneve me ndërfaqe grafike JavaFX 23 dhe përfshirja në paketimin e Oracle JDK 23 të kompilatorit JIT GraalVM.

Po ashtu, është paraqitur një lëshim i ri të makinerisë virtuale universale GraalVM, 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ë për të cilat mund të formohet bitcode LLVM (C, C++, Rust). Përveç mbështetjes për JDK 23, në versionin e ri është optimizuar konsumimi i memories dhe madhësia e kodit ekzekutues, si dhe është realizuar mbështetje e plotë për mjetet për integrimin e Python dhe WebAssembly në kodin Java duke përdorur JIT-kompilimin.

Burimi: opennet.ru

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster