După șase luni de dezvoltare, Oracle a lansat Java SE 27 (Java Platform, Standard Edition 27), care utilizează proiectul open source OpenJDK ca implementare de referință. Cu excepția eliminării unor caracteristici depreciate, Java SE 27 menține compatibilitatea retroactivă cu versiunile anterioare ale platformei Java - majoritatea proiectelor Java scrise anterior vor rula neschimbate în noua versiune. Versiunile gata de instalare ale Java SE 27 (JDK, JRE și Server JRE) sunt pregătite pentru Linux (x86_64, AArch64), Windows (x86_64) și macOS (x86_64, AArch64). Dezvoltată de proiectul OpenJDK, implementarea de referință Java SE 27 este complet open source sub licența GPLv2 cu excepția GNU ClassPath, care permite legătura dinamică cu produse comerciale.
Java SE 27 este clasificată ca o versiune cu suport regulat, actualizările fiind lansate până la următoarea versiune. Ramura de suport pe termen lung (LTS) ar trebui să fie Java SE 25, Java SE 21 sau Java SE 17, actualizările fiind lansate până în 2033, 2031 și respectiv 2029 (disponibilă în general până în septembrie 2030, 2028 și 2026). Suportul extins pentru ramura Java SE 8 LTS va continua până în 2030, iar pentru Java SE 11, până în 2032.
Modificările din Java SE 27 (1, 2, 3, 4) includ:
- În mod implicit, toate mediile utilizează colectorul de gunoi G1 (Garbage-First), utilizat anterior pentru sistemele de server. G1 este optimizat pentru utilizarea pe sisteme multiprocesor cu capacități mari de memorie și pentru echilibrarea latenței previzibile cu un debit ridicat. În timpul funcționării, G1 împarte memoria în mai multe regiuni mici și acordă prioritate acelor regiuni cu mai multe obiecte neutilizate și date mai puțin accesate activ.
- JVM HotSpot utilizează în mod implicit anteturi de obiect compacte. Pe sistemele pe 64 de biți, dimensiunea antetului a fost redusă de la 96 la 64 de biți, reducând consumul de memorie și crescând probabilitatea ca datele să ajungă în memoria cache a procesorului. În testele SPECjbb2015, consumul de memorie a scăzut cu 22%, încărcarea CPU a scăzut cu 8%, iar numărul de operațiuni de colectare a gunoiului a scăzut cu 15%. Timpii de testare pentru parserul JSON au fost reduși cu 10%.
- Implementarea TLS 1.3 adaugă suport pentru scheme hibride de acordare a cheilor care combină algoritmul ML-KEM (CRYSTALS-Kyber) rezistent la procese cuantice cu algoritmi clasici de curbă eliptică ECDHE: X25519MLKEM768 (ECDHE cu curba X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE cu curba secp256r1 + ML-KEM-768) și SecP384r1MLKEM1024 (ECDHE cu curba secp384r1 + ML-KEM-1024). În API-ul javax.net.ssl Aceste scheme sunt activate în mod implicit și nu necesită modificări ale aplicației pentru a fi utilizate.
- JDK Flight Recorder (JFR), un instrument utilizat pentru monitorizarea performanței, crearea de profiluri și diagnosticare, acceptă acum igienizarea argumentelor din linia de comandă, a valorilor inițiale ale variabilelor de mediu și a proprietăților sistemului din informațiile de diagnosticare salvate. Această modificare previne scurgerea datelor sensibile procesate de procesul profilat, cum ar fi token-urile de autorizare și cheile de acces API transmise prin variabile de mediu.
- A treia previzualizare a API-ului Lazy Constants a fost implementată pentru lucrul cu obiecte care conțin date imuabile și sunt tratate ca constante în JVM. Optimizări de performanță similare cu cele pentru câmpurile cu cuvântul cheie „final” sunt aplicate acestor obiecte. Spre deosebire de „final”, noul API separă crearea valorilor constante de inițializarea lor, garantează că o valoare poate fi inițializată o singură dată, reduce timpul de pornire a programului și permite utilizarea în codul utilizator a optimizărilor de tip „constant-folding”, utilizate anterior doar în codul intern JDK. class Application { // Anterior: // static final UserService USERS = new UserService(); // Acum: static final StableValue UTILIZATORI = StableValue.of(); public static UserService users() { return UTILIZATORI.orElseSet(UserService::new); } }
- Motorul de potrivire a șabloanelor introduce o a cincea versiune a capacității de a utiliza tipuri primitive (int, byte, char și alte tipuri de bază non-obiect) în tot felul de șabloane, în operatorul instanceof și în blocurile switch. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { … b … }
- A șaptea versiune a API-ului Structured Concurrency, care simplifică dezvoltarea aplicațiilor multithreaded prin tratarea mai multor sarcini care rulează pe fire de execuție diferite ca o singură unitate, a fost lansată pentru testare.
- A fost implementată a douăsprezecea implementare de test a API-ului Vector. Acest API oferă funcții pentru calcule vectoriale efectuate folosind instrucțiuni vectoriale ale procesorului x86_64 și AArch64 și permite operațiuni simultane pe valori multiple (SIMD). Spre deosebire de auto-vectorizarea operațiilor scalare de către compilatorul HotSpot JIT, noul API permite control explicit asupra vectorizării pentru procesarea paralelă a datelor.
- O a treia versiune a API-ului este acum disponibilă pentru codificarea și decodificarea obiectelor care conțin chei criptografice, certificate și liste de revocare a certificatelor utilizând formatul PEM (Privacy-Enhanced Mail).
În plus, suntem încântați să anunțăm lansarea unei actualizări a platformei JavaFX 27 pentru crearea de aplicații cu interfață grafică. Lansarea mașinii virtuale universale GraalVM 27, care suportă rularea aplicațiilor în JavaScript (Node.js), Python, Ruby, R, orice limbaj JVM (Java, Scala, Clojure, Kotlin) și limbaje pentru care se poate genera cod biți LLVM (C, C++, Rust), este, de asemenea, așteptată în următoarele ore.
Sursa: opennet.ru
