PĂ€rast kuue kuu arendust avaldas Oracle Java SE 26 (Java Platform, Standard Edition 26) platvormi, mille referentsrealisatsiooniks on avatud projekt OpenJDK. V.a mĂ”ningate aegunud vĂ”imaluste eemaldamine, on Java SE 26 tagasiminekukaemuslik varasemate Java versioonide suhtes â enamik varasemalt kirjutatud Java-projekte töötab ilma muudatusteta uue versiooni all. Valmis installimiseks mĂ”eldud Java SE 26 kogud (JDK, JRE ja Server JRE) on valmistatud Linuxile (x86_64, AArch64), Windowsile (x86_64) ja macOS-ile (x86_64, AArch64). OpenJDK projekti raames loodud Java SE 26 referentsrealisatsioon on tĂ€ielikult avatud GPLv2 litsentsi jĂ€rgi koos GNU ClassPath eranditega, mis lubavad dĂŒnaamilist sidumist kommertstootedega.
Java SE 26 kuulub tavapÀrase toega vÀljalaskete kategooriasse, mille uuendusi vÀljastatakse kuni jÀrgmise versiooni ilmumiseni. Pikaajalise toe haruna (LTS) tuleb kasutada Java SE 25, Java SE 21 vÔi Java SE 17, mille uuendused ilmuvad vastavalt 2033, 2031 ja 2029. aastani (avaliku toe viimane kuupÀev on vastavalt september 2030, 2028 ja 2026). Java SE 8 LTS haru laiendatud tugi kestab kuni 2030. aastani, Java SE 11 kuni 2032. aastani.
Java SE 26 muudatuste seas (1, 2, 3, 4):
- Tehtud on teavituse vĂ€ljastamine sĂŒgava refleksiooni kasutamise kohta, et muuta âfinalâ mĂ€rgistega vĂ€lju. Tulevikus on plaanis vaikimisi keelata keele mitteturvalised vĂ”imalused ning muu hulgas muuta âfinalâ mĂ€rgistega vĂ€ljad tĂ€ielikult muutumatuks, eemaldades nende muutmise vĂ”imaluse sĂŒgava refleksiooni (API Reflection) kaudu.
- Eemaldatud on Applet API (java.applet.Applet*, javax.swing.JApplet), mida kasutati Java rakenduste kÀivitamiseks brauseris. See API on kaotanud oma asjakohasuse pÀrast Java plugina toe lÔpetamist brauserites ja kuulutati 2021. aastal aegunuks.
- Rakendatud on vĂ”imalus kasutada ettevalmistatud vahemĂ€lu (AOT â ahead-of-time) kĂ”igi prĂŒgi kogumise sĂŒsteemide, sealhulgas ZGC (Z Garbage Collector) puhul. See muudatus hĂ”lmab vahemĂ€lu Java-objektide jĂ€rjekindlat laadimist mĂ€llu, kasutades universaalset ja prĂŒgikogujatest sĂ”ltumatut vormingut otsemappingu asemel spetsiifiliste vahemĂ€lu esitlemiseks. AOT-vahemĂ€lu kasutamine vĂ€hendab kĂ€ivitusaega ja kiirendab HotSpot virtuaalmasina soojenemist.
- HTTP Client API-sse on lisatud HTTP/3 protokolli tugi, mis vÔimaldab rakendustel ja raamatukogudel serverite poole pöörduda HTTP/3 kaudu minimaalse koodimuudatusega.
- G1 prĂŒgi kogumise sĂŒsteemi jĂ”udlust on parendatud, vĂ€hendades blokeeringute arvu rakendusteadete sĂŒnkroniseerimisel prĂŒgi kogumise niididega.
- Testi jaoks on ette nĂ€htud teisene API eelvariant krĂŒptograafiliste vĂ”tmete, sertifikaatide ja tagasivĂ”etud sertifikaatide loendite kodeerimiseks ja dekodeerimiseks, kasutades PEM (Pivacy-Enhanced Mail) formaati.
- Testi jaoks on ette nĂ€htud kuues eelvariant struktuurse paralleelsuse (Structured Concurrency) API-le, mis lihtsustab mitme lĂ”ime rakenduste arendamist, kĂ€sitledes erinevates lĂ”imedes tĂ€idetavaid ĂŒlesandeid kui ĂŒhtset plokki.
- Lisatud on teine eelvariantLazy Constants API-le, mis kĂ€sitleb muutumatute andmete ja JVM-s konstandina töödeldavate objektide töötlemist. Sellistele objektidele rakendatakse jĂ”udluse optimeerimisi, mis on sarnased âfinalâ mĂ€rgistega vĂ€ljadele. Erinevalt âfinalâ-ist eraldab uus API konstantsete vÀÀrtuste loomise ja nende initsialiseerimise, tagades, et vÀÀrtus saab initsialiseeritud ainult ĂŒks kord, vĂ€hendab programmide kĂ€ivitusaega ja vĂ”imaldab kasutada kasutajakoodis konstantide kĂ€rpimise optimeerimisi (constant-folding), mis olid varem saadaval ainult JDK sisekoodis. class Application { // Oli: // static final UserService USERS = new UserService(); // NĂŒĂŒd vĂ”ib: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- Mustrite sobitamise mehhanismis on ette nĂ€htud neljas eelvariant primitiivsete tĂŒĂŒpide (int, byte, char ja muud pĂ”hityped, mis ei ole objektid) kasutamiseks kĂ”igis mustris, âinstanceofâ operaatoris ja âswitchâ plokkides. switch (x.getStatus()) { case 0 -> âokeiâ; case 1 -> âhoiatusâ; case 2 -> âvigaâ; case int i -> âtundmatu staatus: â + i; } if (i instanceof byte b) { ⊠b ⊠}
- Esitatud on ĂŒksteist katsetuse API Vector, mis pakub funktsioone vektorite arvutamiseks, mis tehakse x86_64 ja AArch64 protsessorite vektorite juhiste abil ning vĂ”imaldab samaaegselt rakendada tehteid mitmele vÀÀrtusele (SIMD). Erinevalt HotSpot JIT-kompilaatori poolt pakutavast skalaari operatsioonide automaatvektoriseerimise vĂ”imalustest annab uus API vĂ”imaluse selgelt hallata vektoriseerimist andmete paralleelseks töötlemiseks.
Lisaks teatas Oracle projektist Detroit, mis areneb OpenJDK raames ja mille eesmĂ€rk on parandada ĂŒhilduvust Java, JavaScripti ja Pythoniga. Projekti raames plaanitakse vĂ”imaldada JVM runtime'i integreerimist JavaScripti mootoriga V8 ja CPython'i tĂ”lgiga. Varem arendas Oracle JavaScripti mootori Nashorn, mis jooksis JVM-i virtuaalmasina peal, kuid projekt lĂ”petati, kuna oli keeruline vĂ€lja töötada eraldi JavaScripti rakendus V8 mootori pĂ”hises ökosĂŒsteemis.
Lisaks vÔib mÀrkida JavaFX 26 rakenduste loomise platvormi uuenduse avaldamist. LÀhemate tundide jooksul oodatakse ka universaalse GraalVM 26 virtuaalmasina vÀljalaskmist, mis toetab rakenduste kÀivitamist JavaScriptis (Node.js), Pythonis, Ruby's, R-is, mistahes keeles JVM-is (Java, Scala, Clojure, Kotlin) ja keeltes, mille jaoks saab genereerida LLVM bitkoodi (C, C++, Rust).
Allikas: opennet.ru
