A Java SE 23 és az OpenJDK 23 kiadása

Hat hónapnyi fejlesztés után az Oracle közzétette a Java SE 23 (Java Platform, Standard Edition 23) platformot, amelynek referencia-implementációja az OpenJDK nyílt projekt. Kivéve néhány elavult funkció eltávolítását, a Java SE 23 megőrzi a visszafelé kompatibilitást a korábbi Java platform verziókkal — a korábban írt Java-projektek többsége módosítás nélkül működni fog az új verzióval. Telepítésre kész Java SE 22 (JDK, JRE és Server JRE) kiadások érhetők el Linuxhoz (x86_64, AArch64), Windowshoz (x86_64) és macOS-hoz (x86_64, AArch64). Az OpenJDK projekt keretében kifejlesztett referencia-implementáció teljes mértékben nyitott a GPLv2 licensz alatt, GNU ClassPath kivételekkel, amelyek megengedik a dinamikus kapcsolódást kereskedelmi termékekkel.

A Java SE 23 a normál támogatási cyklus alatt álló kiadások kategóriájába tartozik, frissítések fognak megjelenni a következő kiadásig. Hosszú távú támogatásra (LTS) a Java SE 21 vagy a Java SE 17 javasolt, amelyekhez 2031 és 2029 évén át fognak frissítések érkezni (nyilvános — 2028-ig és 2026-ig). A Java SE 8 LTS ágának meghosszabbított támogatása 2030-ig, míg a Java SE 11-é 2032-ig tart.

A Java SE 23 újításaiból kiemelendő:

  • Alapértelmezés szerint aktiválva van a ZGC (Generational Z Garbage Collector) generatív működési módja, amely a „régi” és a „fiatal” objektumok elkülönített feldolgozását használja, így növelve a frissen létrehozott, rövid életű objektumok tisztításának hatékonyságát. A Generational ZGC használata csökkenti a forrásallokációk során fellépő megszakítások kockázatát, és csökkenti a CPU terhelést és a memóriafogyasztást a szemétgyűjtésnél. A Generational ZGC Apache Cassandra 4-gyel végzett tesztelése során négyszeres kapacitásnövekedést mutatott fix halomméret (heap) mellett, míg a halomméret a négyzetfelével csökkentek a változatlan teljesítmény mellett.
  • A JavaDoc támogatja a Markdown jelölés használatát a kód dokumentálásához a megjegyzésekben, amelyet HTML és @-tagok JavaDoc keveréke helyett lehet használni.
    A Java SE 23 és az OpenJDK 23 kiadása
  • A mintázati egyeztető mechanizmus kibővült a primitív típusok (int, byte, char és más nem objektum alapú típusok) előzetes támogatásával minden típusú minta esetében, az «instanceof» operátorban és a «switch» blokkokban. switch (x.getStatus()) { case 0 -> «rendben»; case 1 -> «figyelmeztetés»; case 2 -> «hiba»; case int i -> «ismeretlen állapot: » + i; } if (i instanceof byte b) { … b … }
  • Új előzetes támogatás került bevezetésre egyetlen «import module M» kifejezés használatához, amellyel az adott modul által exportált összes csomag egyidejű importálása lehetséges. Ez a változás jelentősen leegyszerűsíti a moduláris könyvtárak újbóli használatát, lehetővé téve a könyvtárak és osztályok bevonását anélkül, hogy meg kellene határozni a csomagok hierarchiáját. Például az «import module java.base» megadása 54 csomag importálásához vezet, amelyek a java.base modulba tartoznak, amelyeket korábban külön kellett volna említeni («import java.io.*», «import java.util.*» stb.).

    A Class-File API második előzetes megvalósítása javasolt a Java osztályfájlok elemzésére, generálására és átalakítására. 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); } } });

  • A Vector API nyolcadik előzetes megvalósítása javasolt, amely vektoralapú számításokhoz nyújt funkciókat, amelyeket az x86_64 és AArch64 processzorok vektoros utasításaival végeznek, lehetővé téve több érték (SIMD) egyidejű kezelését. A HotSpot JIT fordító által elérhető automatikus vektorizálási képességekkel ellentétben az új API lehetővé teszi a vektorizálás kifejezett vezérlését az adatok párhuzamos feldolgozásához.
  • Az java.io.Console osztályhoz új format, printf, readPassword és readLine metódusok kerültek bevezetésre, amelyek a kiválasztott lokáció figyelembevételével formázzák, jelenítik meg és olvassák el a szöveget. System.console().printf(Locale.FRANCE, «%1$tY-%1$tB-%1$te %1$tA», new Date()) 2024-mai-16 csütörtök
  • Hozzáadva a második előzetes megvalósítása a kibővített API Stream-nek, amely támogatja a felhasználói köztes műveletek meghatározását, amelyek hasznosak lehetnek, ha a meglévő beépített köztes műveletek nem elegendőek a kívánt adatátalakításhoz. A felhasználói kezelők a Stream::gather(Gatherer) új köztes műveletének segítségével csatlakoztathatók, amely feldolgozza a folyamat elemeit az adott felhasználói kezelő alkalmazásával. 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]]
  • Hozzáadva a harmadik előzetes megvalósítása az implicit módon deklarált osztályoknak és névtelen példányoknak a main metódusban, ahol meg lehet úszni a public/static deklarációkat, az argumentum tömb átadását és egyéb, az osztály deklarálásához kapcsolódó entitásokat. // korábban public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // most már lehet void main() { System.out.println("Hello, World!"); }
  • Hozzáadva a második előzetes variáció a képességre, amely lehetővé teszi kifejezések megadását a szuper(…) hívása előtt a konstruktőrökben, amely a szülőosztály konstruktőrének explicit hívására szolgál az örökölt osztály konstruktőrén belül, ha ezek a kifejezések nem utalnak a konstruktőr által létrehozott példányra. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • Hozzáadva a harmadik előzetes megvalósítása a korlátozott értékeknek (Scoped Values), amelyek lehetővé teszik, hogy megosztott, változatlan adatokat használjunk a szálakban és hatékonyan cseréljünk adatokat a gyermek szálak között (az értékek öröklődnek). A Scoped Values a szál-specifikus változók mechanizmusának helyettesítésére fejlődnek, és hatékonyabbak nagy számú virtuális szál használata esetén (ezrek és milliók). A Scoped Values legfőbb különbsége a szál-specifikus változóktól, hogy azokat egyszer írják, később nem módosíthatók, és csak a szál végrehajtása alatt állnak rendelkezésre.
  • A harmadik előzetes verzió API-ja a strukturált párhuzamossághoz (Structured Concurrency) került tesztelésre, amely megkönnyíti a több szálon futó alkalmazások fejlesztését azáltal, hogy a különböző szálakban végrehajtott feladatokat egyetlen blokként kezeli.
  • Elavultnak nyilvánították és törlésre kerülnek a külső memória (JVM-en kívüli) elérésére szolgáló metódusok, amelyeket a sun.misc.Unsafe osztály biztosít. A külső memóriához (off-heap) való hozzáférés és a külső kóddal való interakció során a VarHandle API és a FFM (Foreign Function & Memory) API használatát javasolják.

További érdekesség, hogy megjelent a JavaFX 23 felhasználói felületű alkalmazások létrehozására szolgáló platform frissítése, és az Oracle JDK 23 alapcsomagjába bekerült a GraalVM JIT fordító.

Ezen kívül bemutatásra került a GraalVM univerzális virtuális gép új kiadása, amely támogatja a JavaScript (Node.js), Python, Ruby, R és bárminemű JVM-nyelven (Java, Scala, Clojure, Kotlin) és LLVM bitkód létrehozására alkalmas nyelveken (C, C++, Rust) futó alkalmazások indítását. Az új verzióban a JDK 23 támogatása mellett a memóriafogyasztás és a végrehajtható kód méretének optimalizálása is megvalósult, valamint teljeskörű támogatást nyújtanak a Python és a WebAssembly Java kódba történő beágyazásához JIT fordítással.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster