Hat hónapos fejlesztés után az Oracle közzétette a Java SE 26 platformot (Java Platform, Standard Edition 26), amelynek referenciakivitelezése az OpenJDK nyílt projekt. Kivéve, hogy néhány elavult funkció eltávolításra került, a Java SE 26 megőrzi a visszafelé kompatibilitást az előző Java platform verziókkal — a legtöbb korábban írt Java-projekt változtatások nélkül működni fog az új verzió alatt. A Java SE 26 telepíthető csomagjai (JDK, JRE és Server JRE) elérhetők Linuxhoz (x86_64, AArch64), Windowshoz (x86_64) és macOS-hez (x86_64, AArch64). Az OpenJDK projekt keretében kifejlesztett Java SE 26 referenciakivitelezése teljesen nyitott a GPLv2 licenc alatt, a GNU ClassPath kivételekkel, amely lehetővé teszi a kereskedelmi termékekkel való dinamikus összekapcsolást.
A Java SE 26 a normál támogatási időszakkal rendelkező kiadások közé tartozik, amelyhez a frissítések a következő kiadásig lesznek elérhetők. Hosszú távú támogatási ágnak (LTS) a Java SE 25, Java SE 21 vagy Java SE 17 használata javasolt, amelyekhez a frissítések 2033, 2031 és 2029 éves határidővel lesznek elérhetők (nyilvános elérhetőség — 2030, 2028 és 2026 szeptemberéig). A Java SE 8 LTS ágának kiterjesztett támogatása 2030-ig, a Java SE 11-nek pedig 2032-ig fog tartani.
A Java SE 26-ban végrehajtott változások (1, 2, 3, 4):
- Figyelmeztetés jelenik meg, ha mély reflexióval próbálunk megváltoztatni a 'final' kulcsszóval megjelölt mezőket. A jövőben tervezzük, hogy alapértelmezés szerint letiltjuk a nyelv nem biztonságos képességeit, és egyebek mellett a final-ként megjelölt mezőket teljesen módosíthatatlanná tesszük, eltávolítva a mély reflexión keresztüli megváltoztatásuk kiskapuát (API Reflection).
- Eltávolításra került az Applet API (java.applet.Applet*, javax.swing.JApplet), amelyet Java-alkalmazások böngészőben történő futtatására használtak. Ez az API elavultnak számít, mivel a Java plugin böngészők támogatása megszűnt, és 2021-ben elavultnak hívták.
- A AOT (ahead-of-time) előre létrehozott gyorsítótár használatának lehetősége megvalósult bármilyen szemétgyűjtővel, beleértve a ZGC-t (Z Garbage Collector). A változtatás lehetővé teszi a párhuzamosan betöltött gyorsítótárazott Java-objektumok memóriába való beolvasását, egy univerzális, a szemétgyűjtőktől független formátumot használva, a gyorsítótár specifikus ábrázolásának közvetlen memóriaképzése helyett. Az AOT-gyorsítótár használata csökkenti a program indítási idejét és felgyorsítja a HotSpot virtuális gép bemelegítését.
- A HTTP Client API-hoz hozzáadódott a HTTP/3 protokoll támogatása, amely lehetővé teszi az alkalmazások és könyvtárak számára, hogy HTTP/3-on keresztül hívják meg a szervereket minimális kódmódosítással.
- A G1 szemétgyűjtő teljesítménye javult, köszönhetően a kezdő és a szemétgyűjtő szálak szinkronizálásához szükséges blokkolások csökkentésének.
- Javasolták a második előzetes API változatot, amely lehetővé teszi a kriptográfiai kulcsok, tanúsítványok és visszavont tanúsítványok listáinak kódolását és dekódolását PEM (Privacy-Enhanced Mail) formátumban.
- A strukturált párhuzamosság (Structured Concurrency) hatodik előzetes API változata került tesztelésre, amely leegyszerűsíti a több szálon futó alkalmazások fejlesztését, lehetővé téve több feladat párhuzamos kezelését egyetlen egységként.
- A Lazy Constants API második előzetes kiadása került hozzáadásra, amely olyan objektumokkal dolgozik, amelyek változhatatlan adatokat tartalmaznak, és a JVM a konstansokként kezeli őket. Az ilyen objektumok esetében teljesítményoptimalizálások alkalmazhatók, hasonlóan a "final" kulcsszóval rendelkező mezőkhöz. A "final"-tól eltérően az új API különválasztja az állandó értékek létrehozását és inicializálását, biztosítva, hogy az érték csak egyszer legyen inicializálva, csökkenti a programok indítási idejét és lehetővé teszi a felhasználói kód optimalizálásait, mint a konstansok összevonása (constant-folding), amelyet korábban csak a JDK belső kódjában használtak.
class Application {
// Volt:
// static final UserService USERS = new UserService();
// Mostantól:
static final StableValue<UserService> USERS = StableValue.of();
public static UserService users() {
return USERS.orElseSet(UserService::new);
}
} - A mintaillesztési mechanizmusban javasolták a primitív típusok (int, byte, char és más alapvető típusok, amelyek nem objektumok) használatának negyedik előzetes lehetőségét mindenféle sablonban, 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 … }
- Javasolták a Vector API tizenegyedik tesztelési megvalósítását, amely vektoriális számítási funkciókat nyújt, amelyeket x86_64 és AArch64 processzorok vektoriális utasításaival hajtanak végre, lehetővé téve, hogy műveleteket végezzenek egyszerre több értéken (SIMD). A HotSpot JIT fordítónál elérhető automatikus vektorizálási lehetőségektől eltérően, az új API lehetőséget ad a vektorizáció kifejezett kezelésére párhuzamos adatfeldolgozás céljából.
Ezen kívül az Oracle bejelentette a Detroit projektet, amely az OpenJDK részeként fog fejlődni, célja pedig a Java, JavaScript és Python közötti hordozhatóság javítása. A projekt keretében lehetőséget kívánnak biztosítani a JVM runtime JavaScript motorral, V8 és CPython értelmező beágyazására. Az Oracle korábban már fejlesztette a Nashorn JavaScript motort, amely a JVM virtuális gép fölött működött, de leállította a projektet, mert problémás volt különálló JavaScript megvalósítást fejleszteni, amikor a fő ökoszisztéma a V8 motorra támaszkodott.
További megjegyzés, hogy közzétették a JavaFX 26-os verzióját, a grafikus felhasználói alkalmazások fejlesztésének platformját. A közeljövőben várhatóan kiadják a GraalVM 26-os univerzális virtuális gépet is, amely támogatja a JavaScript (Node.js), Python, Ruby, R, JVM-en futó nyelvek (Java, Scala, Clojure, Kotlin) és olyan nyelvek alkalmazásainak futtatását, amelyekből LLVM bitkód generálható (C, C++, Rust).
Forrás: opennet.ru
