A Java SE 24 és az OpenJDK 24 kiadása.

Hat hónapnyi fejlesztés után az Oracle kiadta a Java SE 24 platformot (Java Platform, Standard Edition 24), amelynek referencia-implementációja az OpenJDK nyílt projekt. A Java SE 24 megőrzi a visszafelé kompatibilitást a platform korábbi verzióival, kivéve néhány elavult funkció eltávolítását – a korábban írt Java-projektek többsége változtatás nélkül működni fog az új verzió alatt. A telepítésre kész Java SE 24 csomagok (JDK, JRE és Server JRE) elérhetők Linuxra (x86_64, AArch64), Windowsra (x86_64) és macOS-re (x86_64, AArch64). Az OpenJDK keretében kifejlesztett referenciális Java SE 24 implementáció teljesen nyílt, a GPLv2 licensz alatt, a GNU ClassPath kivételeivel, amelyek lehetővé teszik a kereskedelmi termékekkel való dinamikus kapcsolódást.

A Java SE 24 a normál támogatási időtartamú kiadások közé tartozik, melyek frissítéseit a következő kiadásig fogják kiadni. Hosszú távú támogatási ágnak (LTS) a Java SE 21 vagy Java SE 17 használatát javasoljuk, amelyek frissítéseit 2031 és 2029 évre vonatkozóan fogják kiadni (nyilvános frissítések – 2028 és 2026 évre). A Java SE 8 LTS áganak kiterjesztett támogatása 2030-ig, míg a Java SE 11-é 2032-ig fog tartani. A következő LTS kiadás az őszi Java SE 25 lesz.

A Java SE 24-ben bemutatott újdonságok közül:

  • Kísérleti generatív módot javasoltak a Shenandoah szemétgyűjtő számára, amelyben a régi és az újonnan létrehozott objektumokat külön kezelik a rövid élettartamú objektumok tisztításának hatékonyságának növelésére. Az új mód előre jelezhetőbb áteresztőképességet, terhelésváltozásokkal szembeni ellenállást és a memóriafogyasztás csökkentését biztosítja a szemétgyűjtés során. A Shenandoah ütemező célja a szemétgyűjtés alatti megállások idejének csökkentése a Java-alkalmazások futása mellett párhuzamosan végzett több munka révén.
  • A HotSpot JVM-ben kísérleti támogatást valósítottak meg a kompakt objektumfejlécekhez, amelyek mérete 64 bites rendszerek alatt 96-bitről 64 bitre (12 bájtról 8 bájtra) csökkent. A fejlécek méretének csökkentése lehetővé teszi a verem méretének lecsökkentését és a gyorsítótár hatékonyságának növelését.
  • A G1 szemétgyűjtőben egyszerűsítették a memória hozzáférésének nyomon követésére szolgáló korlátok megvalósítását. Az új verzióban a korlátok kibővítésének műveleteit a C2 JIT fordítás későbbi szakaszára helyezték át. A végzett tesztek azt mutatják, hogy ez az áthelyezés 10-20%-kal csökkentheti a C2 JIT fordítóra nehezedő költségeket az alkalmazástól függően.
  • Hozzáadtunk egy API-t a kulcsformáló kriptográfiai funkciók (KDF, key derivation function) használatához, amely lehetővé teszi kiegészítő kulcsok létrehozását a szükséges hosszúságban titkos kulcs (például jelszó) és egy tetszőleges adatcsoport alapján. A KDF API jelenleg előzetes (preview) státuszú.
  • Hozzáadva a preemptív (Ahead-of-Time) osztályok betöltésének és összeszerelésének lehetősége. Ez a változtatás felgyorsítja a HotSpot JVM indítását azáltal, hogy az alkalmazásban használt osztályok már betöltött és összeszerelt állapotban állnak rendelkezésre. Az alkalmazás első indításakor az összes osztály állapos állapotát a gyorsítótárba mentik, és a következő indítások során felgyorsítják a betöltést.
  • Hozzáadva a Class-File API 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); } } });

  • Hozzáadott egy kibővített Stream API-t, amely lehetővé teszi a saját közbenső műveletek meghatározását, amelyek hasznosak lehetnek olyan helyzetekben, amikor a meglévő beépített közbenső műveletek nem elegendőek a kívánt adatátalakításhoz. A saját feldolgozók egy új közbenső művelet, a Stream::gather(Gatherer) segítségével kapcsolódnak, amely feldolgozza a folyamat elemeit, alkalmazva a felhasználó által meghatározott feldolgozót. 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]]
  • Javasz a negyedik előzetes megvalósítása a környezettudatos értékeknek (Scoped Values), amelyek lehetővé teszik a változatlan adatok közös használatát szálakban és hatékony adatok cseréjét gyermek szálak között (az értékek öröklődnek). A Scoped Values a szálhoz lokális változók mechanizmusának helyettesítésére fejlődnek, és hatékonyabbak, ha nagyon nagy számú virtuális szálat használnak (ezer vagy millió szál). A fő különbség a Scoped Values és a szálhoz lokális változók között az, hogy az előbbieket egyszer írják, később nem lehet őket megváltoztatni, és csak a szál végrehajtása alatt érhetők el.
  • A mintázatos illesztési mechanizmusokhoz hozzáadták az alapvető típusok (int, byte, char és más alapvető típusok, amelyek nem objektumok) előzetes támogatását minden sablon típusban, az "instanceof" operátorban és a "switch" blokkban. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { … b … }
  • Javasz a kilencedik előzetes megvalósítása az API Vector-nak, amely funkciókat biztosít vektoros számításokhoz, amelyeket az x86_64 és AArch64 processzorok vektoros utasításainak felhasználásával hajtanak végre, lehetővé téve több értékre egyszerre alkalmazni a műveleteket (SIMD). A HotSpot JIT-kompilátorban biztosított autovektorozási lehetőségektől eltérően a új API lehetőséget ad a vektorozás kifejezett szabályozására párhuzamos adatok feldolgozásához.
  • Megvalósult a szálak nélküli virtuális szálak szinkronizálásának támogatása, nem csatlakoztatva őket a platformhoz kapcsolódó szálakhoz. A szinkronizált módszerben vagy kifejezésben lévő virtuális szálak most felszabadítják a platform szálat, lehetővé téve más virtuális szálak számára a használatát, jelentősen növelve a rendelkezésre álló virtuális szálak számát és javítva a több szálat alkalmazó alkalmazásokskálázhatóságát.
  • Harmadik előzetes változat került hozzáadásra, amely lehetővé teszi kifejezések megadását az ősosztály super(...) hívása előtt, ami az ősosztály konstruktorának egyértelmű hívásához szükséges az örökölt osztály konstruktorából, ha ezek a kifejezések nem utalnak a konstruktor által létrehozott példányra. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • A jlink eszköz támogatást kínál futási idő képek létrehozásához anélkül, hogy JMOD fájlokat használnánk, ami körülbelül 25%-kal csökkenti a JDK méretét.
  • Hozzáadásra került a második előzetes változat a "import module M" kifejezés egyes használatára, amely lehetővé teszi az összes exportált csomag azonnali importálását a megadott modulból. A változás jelentősen egyszerűsíti a modul könyvtárak újrafelhasználását, lehetővé téve a könyvtárak és osztályok csatlakoztatását anélkül, hogy meg kellene határozni a helyüket a csomag hierarchiájában. Például a "import module java.base" megadásával importálni fog minden 54 csomagot, amelyek a java.base modulba tartoznak, amelyeket korábban külön kellett volna említeni ("import java.io.*", "import java.util.*" stb.).
  • Hozzáadásra került a negyedik előzetes megvalósítás az implicit módon deklarált osztályokhoz és a fő metódus névtelen példányaihoz, ahol elkerülhetők a public/static deklarációk, az argumentumok tömbjének átadása és egyéb, az osztály deklarálásához kapcsolódó entitások. // régen 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!"); }
  • Tesztelésre javasolták a negyedik előzetes API változatot a strukturált párhuzamosság (Structured Concurrency) számára, amely megkönnyíti a több szálú alkalmazások fejlesztését azáltal, hogy több feladatot kezel, amelyek különböző szálakon futnak, mint egyetlen egység.
  • A KeyPairGenerator, Signature és KeyFactory API-ba hozzáadták az ML-KEM (CRYSTALS-Kyber) és ML-DSA (CRYSTALS-Dilithium) algoritmusok támogatását, amelyeket az Egyesült Államok Nemzeti Szabványügyi és Technológiai Intézete (NIST) standardizált, és ellenállóak a kvantumszámítógépre történő bruttó kereséssel szemben. Ezek az algoritmusok a rácsteória problémáinak megoldásán alapuló kriptográfiai módszereket alkalmaznak, amelyek megoldási ideje nem különbözik a hagyományos és kvantumszámítógépek között.
  • A ZGC szemétgyűjtőnél eltávolították a nem generatív üzemmód támogatását, amely nem választja szét a "régi" és "fiatal" objektumok kezelését. A Java SE 23-tól a ZGC generatív üzemmód alapértelmezés szerint alkalmazandó.
  • Figyelmeztetések hozzáadva a JNI (Java Native Interface) és az FFM (Foreign Function & Memory) API használatára vonatkozóan, hogy felkészítsék a fejlesztőket ezen API-khoz való hozzáférés korlátozására, ami a közeljövő egyik kiadásában az integritás biztosításának üzemmódjának bevezetésével fog megtörténni, amely alapértelmezés szerint megtiltja a natív kóddal való interakciót.
  • Figyelmeztetés engedélyezve van a JVM-en kívüli külső memória hozzáférésére szolgáló módszerek használatakor, amelyeket a sun.misc.Unsafe osztály nyújt. Off-heap memória elérésére és külső kóddal való interakcióra a VarHandle API használatát ajánljuk. Az előző kiadásban a sun.misc.Unsafe támogatása elavultként lett nyilvántartva.
  • A Security Manager letiltva, amely régóta elavultnak számít, és nem volt szükséges a böngésző plugin támogatásának megszűnését követően. A Security Manager az Java 17-ben elavultnak lett nyilvánítva. Egyik következő kiadásában teljesen eltávolítják a Security Manager kódot.
  • A 32 bites Windows OS platform támogatására szolgáló kód eltávolítva az x86 rendszereken. A 32 bites x86 rendszerek Java portját elavultként nyilvánították és eltávolításra került (a Linux 32 bites x86 rendszereken való támogatása megszűnik).

Továbbá megemlíthető a JavaFX 24 felhasználói felület-generáló platform frissítésének közzététele, valamint az univerzális GraalVM virtuális gép új kiadása, amely támogatja a JavaScript (Node.js), Python, Ruby, R, bármely JVM nyelvek (Java, Scala, Clojure, Kotlin) és az LLVM bitkódot generáló nyelvek (C, C++, Rust) alkalmazások futtatását. A JDK 24 támogatásán kívül a GraalVM új verziójában optimalizációk is történtek gépi tanulásra vonatkozó feladatokhoz, javították a Java bytecode gépi kóddá történő fordításának támogatását, valamint hozzáadták a SkipFlow mechanizmust az végrehajtható fájlok méretének csökkentésére és a fordítási idő lerövidítésére.

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