Lëshimi i Java SE 24 dhe OpenJDK 24

Pas pas gjashtĂ« muaj zhvillimi, kompania Oracle publikoi platformĂ«n Java SE 24 (Java Platform, Standard Edition 24), e cila pĂ«rdor projektin e hapur OpenJDK si njĂ« implementim referimi. PĂ«rveç heqjes sĂ« disa aftĂ«sive tĂ« vjetra, Java SE 24 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 kur ekzekutohen nĂ« versionin e ri. NdĂ«rtimet e gatshme pĂ«r instalim tĂ« Java SE 24 (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 SE 24, i zhvilluar brenda 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 24 i përket kategorisë së lëshimeve me mbështetje të zakonshme, përditësimet e të cilit do të lëshohen deri në lëshimin e ardhshëm. Si degë me mbështetje afatgjatë (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ë vazhdojë deri në vitin 2030, ndërsa Java SE 11 deri në vitin 2032. Lëshimi i ardhshëm LTS do të jetë lëshimi i vjeshtës Java SE 25.

Disa nga novitetet e propozuara në Java SE 24 janë:

  • NjĂ« mod i ri eksperimental i gjenerimit nĂ« mbledhĂ«sin e plehrave Shenandoah Ă«shtĂ« propozuar, nĂ« tĂ« cilin trajtohen veçmas objektet e vjetra dhe ato tĂ« sapokrijuara pĂ«r tĂ« rritur efikasitetin e pastrimit tĂ« objekteve me kohĂ« tĂ« shkurtĂ«r jetese. Ky mod i ri ofron kapacitete mĂ« tĂ« parashikueshme, qĂ«ndrim mĂ« tĂ« mirĂ« ndaj ndryshimit tĂ« ngarkesĂ«s dhe ulje tĂ« konsumit tĂ« memories gjatĂ« mbledhjes sĂ« plehrave. Planifikuesi Shenandoah synon tĂ« reduktojĂ« kohĂ«n e ndalesave gjatĂ« mbledhjes sĂ« plehrave, duke realizuar njĂ« sasi mĂ« tĂ« madhe pune paralelisht me ekzekutimin e aplikacioneve Java.
  • NĂ« JVM HotSpot Ă«shtĂ« implementuar mbĂ«shtetje eksperimentale pĂ«r titujt e kompaktĂ« tĂ« objekteve, tĂ« cilĂ«t nĂ« sisteme 64-bit kanĂ« reduktuar madhĂ«sinĂ« nga 96 nĂ« 64 bite (nga 12 nĂ« 8 byte). Reduktimi i madhĂ«sisĂ« sĂ« titujve lejon tkurrjen e madhĂ«sisĂ« sĂ« grumbullit dhe pĂ«rmirĂ«simin e efikasitetit tĂ« punĂ«s sĂ« caches.
  • NĂ« mbledhĂ«sin e mbeturinave G1, implementimi i barrierave pĂ«r ndjekjen e qasjes sĂ« aplikacionit nĂ« memorie Ă«shtĂ« thjeshtuar. NĂ« versionin e ri, operacionet e zgjerimit tĂ« barrierave janĂ« kaluar nĂ« njĂ« etapĂ« mĂ« tĂ« vonshme tĂ« kompajlimit nĂ« C2 JIT. Testet e kryera tregojnĂ« se njĂ« kalim i tillĂ« lejon uljen e kostove tĂ« mbĂ«shtetjes nĂ« JIT-kompiluesin C2 me 10-20% nĂ« varĂ«si tĂ« aplikacionit.
  • Shtuar API pĂ«r pĂ«rdorimin e funksioneve kriptografike pĂ«r formimin e çelĂ«save (KDF, funksioni i nxjerrjes sĂ« çelĂ«sit), tĂ« cilat lejojnĂ« formimin e çelĂ«save tĂ« tjerĂ« me gjatĂ«si tĂ« nevojshme mbi bazĂ«n e çelĂ«sit sekret (p.sh., fjalĂ«kalimi) dhe njĂ« grup tĂ« njĂ«kohshĂ«m tĂ« dhĂ«nash. API KDF aktualisht ka statusin e paraqitjes (preview).
  • Shtuar mundĂ«sia pĂ«r ngarkimin dhe grupimin e klasave nĂ« parazgjedhje (Ahead-of-Time). Ky ndryshim lejon pĂ«rshpejtimin e startit tĂ« HotSpot JVM duke ofruar klasat e zakonshme nĂ« gjendjen e ngarkuar dhe tĂ« grupuar tashmĂ«. GjatĂ« startit tĂ« parĂ« tĂ« aplikacionit, gjendja e tĂ« gjitha klasave ruhet nĂ« cache dhe nĂ« startet e mĂ«passhme pĂ«rdoret pĂ«r pĂ«rshpejtimin e ngarkimit.
  • Shtuar API Class-File pĂ«r analizimin, gjenerimin dhe konvertimin e skedarĂ«ve tĂ« klasave 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); } } });

  • Shtuar API tĂ« avancuar Stream, qĂ« mbĂ«shtet definimin e operacioneve tĂ« ndĂ«rmjetme tĂ« personalizuara, tĂ« cilat mund tĂ« jenĂ« tĂ« dobishme nĂ« raste kur operacionet e ndĂ«rmjetme tĂ« integruara ekzistuese nuk mjaftojnĂ« pĂ«r transformimin e dĂ«shiruar tĂ« tĂ« dhĂ«nave. Trajtuesit e personalizuar lidhen pĂ«rmes njĂ« operacioni tĂ« ri tĂ« ndĂ«rmjetĂ«m Stream::gather(Gatherer), i cili pĂ«rpunon elementet e stream-it, duke u aplikuar atyre trajtuesin e caktuar 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]]
  • ËshtĂ« propozuar njĂ« zbatim i katĂ«rt preliminar i Vlerave tĂ« Kufizuara (Scoped Values), qĂ« lejojnĂ« ndarjen e tĂ« dhĂ«nave tĂ« pandryshueshme nĂ« fluksia dhe shkĂ«mbimin efektiv tĂ« tĂ« dhĂ«nave midis flukseve fĂ«mijĂ« (vlerat trashĂ«gohen). Vlerat e Kufizuara janĂ« duke u zhvilluar pĂ«r tĂ« zĂ«vendĂ«suar mekanizmin e variablave tĂ« brendshĂ«m tĂ« fluksit (thread-local variables) dhe janĂ« mĂ« efikase kur pĂ«rdoren shumĂ« flukse virtuale (mijĂ«ra dhe miliona flukse). Dallimi kryesor mes Vlerave tĂ« Kufizuara dhe variablave tĂ« brendshĂ«m tĂ« fluksit Ă«shtĂ« se tĂ« parat shkruhen njĂ« herĂ«, nuk mund tĂ« ndryshohen mĂ« dhe mbeten tĂ« aksesueshme vetĂ«m pĂ«r kohĂ«n e ekzekutimit tĂ« fluksit.
  • NĂ« mekanizmat e pĂ«rputhjes me modelin Ă«shtĂ« shtuar mbĂ«shtetje preliminare pĂ«r pĂ«rdorimin e tipeve primitive (int, byte, char dhe tipe tĂ« tjera tĂ« bazuar, 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 -> "status i panjohur: " + i; } if (i instanceof byte b) { 
 b 
 }
  • ËshtĂ« propozuar njĂ« zbatim i nĂ«ntĂ« preliminar i API Vector, qĂ« ofron funksione pĂ«r llogaritjet vektorike, tĂ« cilat realizohen duke pĂ«rdorur instrukcionet vektoriale tĂ« procesorĂ«ve x86_64 dhe AArch64 dhe lejojnĂ« kryerjen e operacioneve nĂ« tĂ« njĂ«jtĂ«n kohĂ« pĂ«r disa vlera (SIMD). NĂ« dallim nga mundĂ«sitĂ« e ofruara nga kompilatori JIT HotSpot pĂ«r automatizimin e vektorizimit tĂ« operacioneve skalarĂ«, API i ri ofron mundĂ«sinĂ« pĂ«r tĂ« menaxhuar mĂ« qartĂ« vektorizimin pĂ«r pĂ«rpunimin paralel tĂ« tĂ« dhĂ«nave.
  • ËshtĂ« realizuar mbĂ«shtetje pĂ«r sinkronizimin e flukseveVirtuale pa i lidhur ato (pinning) me flukset e lidhura me platformĂ«n. Flukset virtuale nĂ« metodĂ«n apo shprehjen e sinkronizuar nĂ« gjendje bllokimi tani çlirojnĂ« fluksin e tyre tĂ« platformĂ«s, duke lejuar qĂ« flukset e tjera virtuale ta pĂ«rdorin atĂ«, duke rritur ndjeshĂ«m numrin e flukseve virtuale tĂ« disponueshĂ«m dhe duke pĂ«rmirĂ«suar shkallĂ«zimin e aplikacioneve qĂ« pĂ«rdorin multithread.
  • A third preliminary option has been added for the capability that allows specifying expressions in constructors before calling super(
), used for explicitly invoking the parent class constructor from the inherited class constructor, provided these expressions do not refer to the instance being created by the constructor. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • The jlink utility has implemented support for creating run-time images without using JMOD files, allowing a reduction in JDK size by approximately 25%.
  • A second preliminary option for using a single expression "import module M" has been added to import all packages exported by the specified module at once. This change significantly simplifies the reuse of module libraries, allowing libraries and classes to be included without specifying their location in the package hierarchy. For example, specifying "import module java.base" will import all 54 packages contained in the java.base module, which would previously need to be mentioned separately ("import java.io.*", "import java.util.*", etc.).
  • A fourth preliminary implementation of implicitly declared classes and anonymous instances of the method "main" has been added, where it is possible to do without public/static declarations, passing an array of arguments, and other entities associated with class declaration. // was public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // now it's possible void main() { System.out.println("Hello, World!"); }
  • A fourth preliminary version of the API for structured concurrency has been proposed for testing, simplifying the development of multi-threaded applications by handling multiple tasks performed in different threads as a single block.
  • Support for the ML-KEM (CRYSTALS-Kyber) and ML-DSA (CRYSTALS-Dilithium) algorithms has been added to the KeyPairGenerator, Signature, and KeyFactory APIs, standardized by the U.S. National Institute of Standards and Technology (NIST) and resistant to quantum computer attacks. These algorithms use cryptography techniques based on solving lattice theory problems, the resolution time of which does not differ between classical and quantum computers.
  • NĂ« mbledhĂ«sin e mbeturinave ZGC Ă«shtĂ« eliminuar mbĂ«shtetje pĂ«r modin jo-generativ tĂ« punĂ«s, qĂ« nuk ndan procesimin e objekteve "tĂ« vjetra" dhe "tĂ« reja". Duke filluar nga Java SE 23, moda generative e ZGC aplikohet si parazgjedhje.
  • ËshtĂ« shtuar njĂ« mesazh paralajmĂ«rues pĂ«r pĂ«rdorimin e API-sĂ« JNI (Java Native Interface) dhe FFM (Foreign Function & Memory) me qĂ«llim pĂ«rgatitjen e zhvilluesve pĂ«r kufizimin e aksesit nĂ« kĂ«to API pĂ«r shkak tĂ« pĂ«rfshirjes nĂ« njĂ« nga lĂ«shimet e ardhshme tĂ« njĂ« modeli qĂ« garanton integritetin, i cili ndalon njĂ«herĂ« e pĂ«rgjithmonĂ« ndĂ«rveprimin me kodin natyror.
  • ËshtĂ« aktivizuar njĂ« mesazh paralajmĂ«rues kur pĂ«rdoren metodat pĂ«r qasje nĂ« kujtesĂ«n jashtĂ« (jashtĂ« JVM), tĂ« ofruara nga klasa sun.misc.Unsafe. PĂ«r tĂ« accesuar kujtesĂ«n jashtĂ« heap-it dhe pĂ«r t'u ndĂ«rvepruar me kodin e jashtĂ«m, rekomandohet tĂ« pĂ«rdoret API VarHandle. NĂ« lĂ«shimin e kaluar, mbĂ«shtetja pĂ«r sun.misc.Unsafe u shpall e skaduar.
  • Menaxheri i Sigurimit Ă«shtĂ« çaktivizuar, i cili ka humbur rĂ«ndĂ«sinĂ« e tij dhe Ă«shtĂ« bĂ«rĂ« i papĂ«rdorshĂ«m pas ndalimit tĂ« mbĂ«shtetjes pĂ«r plug-in-e tĂ« shfletuesit. Menaxheri i Sigurimit u klasifikua si i skaduar nĂ« Java 17. NĂ« njĂ« nga lĂ«shimet e ardhshme, planifikohet tĂ« hiqet plotĂ«sisht kodi i Menaxherit tĂ« Sigurimit.
  • Kodi pĂ«r mbĂ«shtetje tĂ« platformĂ«s 32-bit tĂ« sistemit operativ Windows nĂ« sistemet x86 Ă«shtĂ« hequr. Porti i Java pĂ«r sistemet 32-bit Ă«shtĂ« shpallur i skaduar dhe Ă«shtĂ« planifikuar pĂ«r heqje (do tĂ« ndalojĂ« mbĂ«shtetjen pĂ«r Linux nĂ« sistemet 32-bit x86).

Gjithashtu, mund të theksohet publikimi i përditësimit të platformës për krijimin e aplikacioneve me ndërfaqe grafike JavaFX 24 dhe lëshimi i ri i makinerisë 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 24, në versionin e ri të GraalVM janë bërë optimizime për detyra të lidhura me mësimin makinerik, është përmirësuar mbështetja për kompilimin e kodit Java byte në kod makinerik, është shtuar mekanizmi SkipFlow për të reduktuar madhësinë e skedarëve ekzekutivë dhe për të zvogëluar kohën e kompilimit.

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