Po šestih mesecih razvoja je podjetje Oracle objavilo platformo Java SE 26 (Java Platform, Standard Edition 26), za katerega je referenčna implementacija odprti projekt OpenJDK. Razen odstranitve nekaterih zastaranih funkcionalnosti je Java SE 26 ohranila nazaj kompatibilnost s prejšnjimi različicami platforme Java — večina prej napisanih Java projektov bo delovala brez sprememb pod novo različico. Pripravljene za namestitev različice Java SE 26 (JDK, JRE in Server JRE) so na voljo za Linux (x86_64, AArch64), Windows (x86_64) in macOS (x86_64, AArch64). Referenčna implementacija Java SE 26, razvito v okviru projekta OpenJDK, je popolnoma odprta pod licenco GPLv2 z izjemo GNU ClassPath, ki omogoča dinamično vezavo s komercialnimi izdelki.
Java SE 26 spada v kategorijo različic z rednim obdobjem podpore, za katere se bodo posodobitve izdajale do naslednje različice. Za dolgotrajno podporo (LTS) je priporočljivo uporabiti Java SE 25, Java SE 21 ali Java SE 17, za katere se bodo posodobitve izdajale do leta 2033, 2031 in 2029 (javne posodobitve do septembra 2030, 2028 in 2026). Podaljšana podpora za LTS vejo Java SE 8 bo trajala do leta 2030, Java SE 11 pa do leta 2032.
Med spremembami v Java SE 26 (1, 2, 3, 4):
- Opravljena je bila implementacija opozorilnega izhoda pri uporabi globoke refleksije za spreminjanje polj, označenih z besedo 'final'. V prihodnosti se načrtuje, da se bodo privzeto onemogočile nevarne možnosti jezika in med drugim, da se polja, označena kot final, popolnoma nepokretna, z odstranitvijo obvodne poti za njihovo spreminjanje preko globoke refleksije (API Reflection).
- API Applet (java.applet.Applet*, javax.swing.JApplet) je bil odstranjen; ta je bil uporabljen za zagon Java aplikacij v brskalniku. Ta API je izgubil relevanco po prenehanju podpore za Java vtičnik za brskalnike in je bil razglašen za zastarelo v letu 2021.
- Bila je omogućena upotreba unapred formiranog keša (AOT — ahead-of-time) sa svim sakupljačima smeća, uključujući ZGC (Z Garbage Collector). Promena podrazumeva podršku za sekvencijalno učitavanje keširanih Java objekata u memoriju, koristeći univerzalni i nezavistan od sakupljača smeća format umesto direktnog mapiranja u memoriju specifičnih predstava keša. Korišćenje AOT keša skraćuje vreme pokretanja i ubrzava aktuelizaciju (warmup) virtuelne mašine HotSpot.
- U HTTP Client API dodatna je podrška za HTTP/3 protokol, što omogućava aplikacijama i bibliotekama da se obraćaju serverima putem HTTP/3 uz minimalne izmene koda.
- Povećana je efikasnost G1 sakupljača smeća, zahvaljujući smanjenju blokada za sinhronizaciju aplikativnih niti sa nitima sakupljača smeća.
- Predložena je druga preliminarna verzija API-ja za kodiranje i dekodiranje objekata sa kriptografskim ključevima, sertifikatima i listama opozvanih sertifikata, koristeći PEM format (Pivacy-Enhanced Mail).
- Predložena je šesta preliminarna verzija API-ja za strukturirani paralelizam (Structured Concurrency), koja pojednostavljuje razvoj višedretvenih aplikacija obradom više zadataka izvršenih u različitim nitima kao jedinstvene jedinice.
- Dodata je druga preliminarna verzija API-ja Lazy Constants za rad sa objektima koji sadrže nepromenljive podatke i obrađuju se u JVM-u kao konstante. Ovakvim objektima primenjuju se optimizacije performansi, slične onima za polja sa ključnom rečju "final". Za razliku od "final", novi API razdvaja kreiranje konstantnih vrednosti i njihovu inicijalizaciju, garantuje da se vrednost može inicijalizovati samo jednom, skraćuje vreme pokretanja programa i omogućava primenu optimizacija smanjenja konstanti (constant-folding) u korisničkom kodu, koje su ranije korišćene samo u unutrašnjem kodu JDK. class Application { // Pre: // static final UserService USERS = new UserService(); // Sada je moguće: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- V mehanizmu ujemanja je predlagana četrta preliminarna možnost za uporabo primitivnih tipov (int, byte, char in drugi osnovni tipi, ki niso objekti) v vseh vrstah predlog, v operatorju "instanceof" in v blokih "switch". switch (x.getStatus()) { case 0 -> "v redu"; case 1 -> "opozorilo"; case 2 -> "napaka"; case int i -> "neznan status: " + i; } if (i instanceof byte b) { … b … }
- Predlagana je enajsta testna izvedba API Vector, ki nudi funkcije za vektorske izračune, ki se izvajajo z uporabo vektorskih ukazov procesorjev x86_64 in AArch64 ter omogočajo hkratno izvajanje operacij na več vrednostih (SIMD). V nasprotju z avtoklasičnimi zmožnostmi JIT prevajalnika HotSpot za skalarne operacije, nov API omogoča eksplicitno upravljanje z vektorizacijo za paralelno obdelavo podatkov.
Poleg tega je podjetje Oracle napovedalo projekt Detroit, ki se bo razvijal kot del OpenJDK in je usmerjen v izboljšanje prenosljivosti med Java, JavaScript in Python. V okviru projekta nameravajo omogočiti vgradnjo v proces JVM runtime z JavaScript motorjem V8 in interpreterjem CPython. Prej je podjetje Oracle že razvijalo JavaScript motor Nashorn, ki je deloval nad JVM, vendar je projekt zastavil zaradi težav z razvojem ločene implementacije JavaScript, ko je bila glavna ekosistema vezana na motor V8.
Dodatno lahko omenimo objavo posodobitve platforme za razvoj aplikacij z grafičnim vmesnikom JavaFX 26. V naslednjih urah pričakujemo tudi izdajo univerzalne virtualne naprave GraalVM 26, ki podpira zagon aplikacij v JavaScript (Node.js), Python, Ruby, R, vseh jezikih za JVM (Java, Scala, Clojure, Kotlin) in jezikih, za katere se lahko oblikuje bitna koda LLVM (C, C++, Rust).
Izvor: opennet.ru
