Po šestih mesecih razvoja je Oracle izdal Java SE 26 (Java Platform, Standard Edition 26), ki kot referenčno implementacijo uporablja odprtokodni projekt OpenJDK. Z izjemo odstranitve nekaterih zastarelih funkcij Java SE 26 ohranja združljivost s prejšnjimi izdajami platforme Java – večina prej napisanih projektov Java se bo v novi različici izvajala nespremenjena. Pripravljene so za namestitev različice Java SE 26 (JDK, JRE in Server JRE). Linux (x86_64, AArch64), Windows (x86_64) in macOS (x86_64, AArch64). Referenčna implementacija Java SE 26, ki jo je razvil projekt OpenJDK, je v celoti odprtokodna pod licenco GPLv2 z izjemo GNU ClassPath, ki omogoča dinamično povezovanje s komercialnimi izdelki.
Java SE 26 je kategorizirana kot redna podporna izdaja, pri čemer se posodobitve izdajajo do naslednje izdaje. Veja z dolgoročno podporo (LTS) bi morala biti Java SE 25, Java SE 21 ali Java SE 17, pri čemer se posodobitve izdajajo do leta 2033, 2031 oziroma 2029 (na splošno na voljo do septembra 2030, 2028 in 2026). Razširjena podpora za vejo Java SE 8 LTS se bo nadaljevala do leta 2030, za Java SE 11 pa do leta 2032.
Spremembe v Javi SE 26 (1, 2, 3, 4) vključujejo:
- Pri uporabi globoke refleksije za spreminjanje polj, označenih s ključno besedo »final«, je bilo uvedeno opozorilo. Prihodnji načrti vključujejo privzeto onemogočanje nevarnih jezikovnih funkcij in med drugim popolno nespremenljivost polj, označenih kot final, ter odpravo rešitve za njihovo spreminjanje prek globoke refleksije (Reflection API).
- API za jabolka (java.applet.Applet*, javax.swing.JApplet), ki se je uporabljal za zagon aplikacij Java v brskalniku, je bil odstranjen. Ta API je postal zastarel, potem ko je bil vtičnik Java za brskalnik ukinjen in leta 2021 opuščen.
- Uvedena je bila možnost uporabe predpomnilnika AOT (ahead-of-time) s katerim koli zbiralnikom smeti, vključno z ZGC (Z Garbage Collector). Ta sprememba podpira zaporedno nalaganje predpomnjenih objektov Java v pomnilnik z uporabo univerzalne, od zbiralnika smeti neodvisne oblike, namesto neposrednega preslikavanja določenih predstavitev predpomnilnika v pomnilnik. Uporaba predpomnilnika AOT skrajša čas zagona in pospeši ogrevanje virtualnega stroja HotSpot.
- API odjemalca HTTP je bil posodobljen za podporo protokolu HTTP/3, kar aplikacijam in knjižnicam omogoča dostop do strežnikov prek HTTP/3 z minimalnimi spremembami kode.
- Izboljšana zmogljivost zbiralnika smeti G1 z zmanjšanjem števila zaklepov, potrebnih za sinhronizacijo niti aplikacije z nitmi zbiralnika smeti.
- Predlagan je drugi osnutek API-ja za kodiranje in dekodiranje objektov s kriptografskimi ključi, potrdili in seznami preklicanih potrdil z uporabo formata PEM (Privacy-Enhanced Mail).
- Šesti osnutek strukturiranega API-ja za sočasnost, ki poenostavlja razvoj večnitnih aplikacij tako, da več nalog, ki se izvajajo v različnih nitih, obravnava kot eno samo enoto, je bil izdan za testiranje.
- Dodan je bil drugi predogled API-ja za lenobne konstante za delo z objekti, ki vsebujejo nespremenljive podatke in se v JVM obravnavajo kot konstante. Za takšne objekte se uporabljajo optimizacije delovanja, podobne poljem s ključno besedo »final«. Za razliko od »final« novi API ločuje ustvarjanje konstantnih vrednosti od njihove inicializacije, zagotavlja, da je vrednost mogoče inicializirati samo enkrat, skrajša čas zagona programa in omogoča uporabo optimizacij zlaganja konstant, ki so se prej uporabljale le v notranji kodi JDK, v uporabniški kodi. class Application { // Prej: // static final UserService USERS = new UserService(); // Zdaj: static final StableValue UPORABNIKI = StabilnaVrednost.of(); javni statični uporabniki UporabniškeStoritve() { vrni UPORABNIKE.orElseSet(UporabniškaStoritev::novo); } }
- Mehanizem za ujemanje vzorcev uvaja četrti osnutek možnosti uporabe primitivnih tipov (int, byte, char in drugih neobjektivnih osnovnih tipov) v vseh tipih predlog, operatorju instanceof in blokih switch. switch (x.getStatus()) { case 0 -> "v redu"; case 1 -> "opozorilo"; case 2 -> "napaka"; case int i -> "neznano stanje: " + i; } if (i instanceof byte b) { … b … }
- Predlagana je enajsta testna implementacija vektorskega API-ja. Zagotavlja funkcije za vektorske izračune, ki se izvajajo z uporabo vektorskih ukazov procesorjev x86_64 in AArch64, ter omogoča sočasno delovanje z več vrednostmi (SIMD). Za razliko od samodejne vektorizacije skalarnih operacij prevajalnika HotSpot JIT, novi API omogoča ekspliciten nadzor nad vektorizacijo za vzporedno obdelavo podatkov.
Oracle je prav tako napovedal projekt Detroit, ki bo razvit kot del OpenJDK in si prizadeva izboljšati prenosljivost med Javo, JavaScriptom in Pythonom. Namen projekta je omogočiti integracijo JavaScript mehanizma V8 in interpreterja CPython v proces JVM. Oracle je že prej razvil JavaScript mehanizem Nashorn, ki deluje na JVM, vendar je projekt prekinil zaradi težav pri razvoju ločene implementacije JavaScripta, ko je primarni ekosistem vezan na mehanizem V8.
Poleg tega z veseljem naznanjamo izdajo posodobitve platforme JavaFX 26 za ustvarjanje aplikacij z grafičnim uporabniškim vmesnikom. V prihodnjih urah se pričakuje tudi izdaja univerzalnega virtualnega stroja GraalVM 26, ki podpira izvajanje aplikacij v JavaScriptu (Node.js), Pythonu, Rubyju, R, katerem koli jeziku JVM (Java, Scala, Clojure, Kotlin) in jezikih, za katere je mogoče generirati bitno kodo LLVM (C, C++, Rust).
Vir: opennet.ru
