Lansarea Java SE 25 LTS și OpenJDK 25

După șase luni de dezvoltare, compania Oracle a publicat platforma Java SE 25 (Java Platform, Standard Edition 24), a cărei implementare de referință este proiectul deschis OpenJDK. Cu excepția eliminării unor funcționalități depășite, Java SE 25 păstrează compatibilitatea înapoi cu versiunile anterioare ale platformei Java — majoritatea proiectelor Java scrise anterior vor fi funcționale fără modificări atunci când vor fi rulate pe noua versiune. Versiunile gata de instalare pentru Java SE 25 (JDK, JRE și Server JRE) sunt disponibile pentru Linux (x86_64, AArch64), Windows (x86_64) și macOS (x86_64, AArch64). Implementarea de referință Java SE 25, dezvoltată în cadrul proiectului OpenJDK, este complet deschisă sub licența GPLv2 cu excepții GNU ClassPath, care permit legarea dinamică cu produse comerciale.

Java SE 25 este considerată o versiune cu termen extins de suport, actualizările pentru aceasta vor fi emise până în anul 2033 (actualizările publice vor fi disponibile până în septembrie 2030). Versiunile Java SE 17 și 21 continuă, de asemenea, să fie susținute ca ramuri cu termen lung de suport (LTS), actualizările pentru acestea vor fi emise până în 2029 și 2031, respectiv (actualizările publice — până în 2026 și 2028). Suportul extins pentru ramurile LTS ale Java SE 8 și 11 va continua până în 2030 și 2032.

Printre noutățile propuse în Java SE 25 (1, 2, 3, 4):

  • A fost adăugat un API experimental StableValue pentru a lucra cu obiecte care conțin date imuabile și care sunt procesate în JVM ca constante. Acestor obiecte li se aplică optimizări de performanță similare cu cele ale câmpurilor cu cuvântul cheie „final”. API-ul StableValue separă crearea valorilor constante de inițializarea acestora, garantând că valoarea poate fi inițializată o singură dată, reduce timpul de pornire al programelor și permite utilizarea în codul utilizatorului a optimizărilor de reducere a constantelor (constant-folding), care au fost folosite anterior doar în codul intern al JDK. class Application { // A fost: // static final UserService USERS = new UserService(); // A devenit: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
  • A fost adăugat un API experimental pentru codificarea și decodificarea obiectelor cu chei criptografice, certificate și liste de certificate revocate, folosind formatul PEM (Pivacy-Enhanced Mail).
  • A fost adăugată suport pentru valori limitate (Scoped Values), care permit partajarea eficientă a datelor nemodificabile în fire și schimbul eficient de date între firele secundare (valorile sunt moștenite). Scoped Values se dezvoltă pentru a înlocui mecanismul variabilelor locale pentru fire (thread-local variables) și sunt mai eficiente atunci când sunt folosite un număr foarte mare de fire virtuale (mii și milioane de fire). Principala diferență între Scoped Values și variabilele locale pentru fire este că primele sunt scrise o dată, ulterior nu pot fi modificate și rămân accesibile doar pe durata execuției firelor.
  • A fost adăugat un API pentru utilizarea funcțiilor criptografice de derivare a cheii (KDF, key derivation function), care permit generarea de chei suplimentare de lungimea necesară pe baza unei chei secrete (de exemplu, a unei parole) și a unui set de date arbitrare.
  • A fost eliminat codul și scripturile de compilare pentru suportul sistemelor pe 32 de biți x86. Încetarea suportului pentru sistemele pe 32 de biți x86 a permis simplificarea infrastructurii pentru compilarea și testarea JDK-ului, precum și implementarea funcționalităților legate de platformă, fără a crea manipulatoare de fallback pentru sistemele x86 pe 32 de biți.
  • A fost adăugată posibilitatea de a folosi o singură expresie „import module M” pentru a importa toate pachetele exportate de modulul specificat. Această modificare simplifică semnificativ reutilizarea bibliotecilor modulare, permițând conectarea bibliotecilor și claselor fără a defini locul lor în ierarhia pachetelor. De exemplu, specificarea „import module java.base” va conduce la importarea tuturor celor 54 de pachete incluse în modulul java.base, care anterior ar fi trebuit menționate separate („import java.io.*”, „import java.util.*” etc.).
  • A fost propusă o variantă compactă de organizare a programelor, care poate fi utilă pentru învățare și în dezvoltarea aplicațiilor mici. În forma compactă nu este necesară definiția claselor redundante, API-urile tipice sunt importate automat și metodele simplificate de intrare/ieșire sunt disponibile. De exemplu, aplicația „Hello, World!” poate fi redusă la: void main() { IO.println("Hello, World!"); }
  • Este permis să specifici în constructorii de expresii înainte de apelul super(…), utilizat pentru a apela explicit constructorul clasei părinte din constructorul clasei derivate, atâta timp cât acele expresii nu fac referire la instanța creată de constructor. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • A fost adăugat modul generativ de funcționare a colectorului de gunoi Shenandoah, în care obiectele vechi și cele recent create sunt procesate separat pentru a îmbunătăți eficiența curățării obiectelor cu o durată de viață scurtă. Noul mod asigură o lățime de bandă mai predictibilă, rezistență la schimbarea sarcinii și o reducere a consumului de memorie în timpul colectării gunoiului. Planificatorul Shenandoah vizează reducerea timpilor de oprire în timpul colectării gunoiului prin desfășurarea unui volum mai mare de muncă în paralel cu execuția aplicațiilor Java.
  • A fost simplificată crearea unui cache pentru încărcarea și compunerea anticipată (Ahead-of-Time), care permite accelerarea timpului de pornire al HotSpot JVM prin implicarea claselor într-o stare deja încărcată și compusă. La inițiere, nu mai este necesară operațiuni separate pentru înregistrarea activității și crearea cache-ului, ci este suficient un singur comanda: java -XX:AOTCacheOutput=app.aot -cp app.jar com.example.App …
  • La pornirea HotSpot Java VM a fost implementată capacitatea de a utiliza profiluri de execuție a metodelor obținute la ultima rulare a aplicației. Această modificare permite compilatorului JIT să evite acumularea de statistici și să înceapă imediat generarea de cod nativ fără a aștepta formarea profilului.
  • În HotSpot JVM a fost implementat suportul pentru anteturile compacte ale obiectelor, a căror dimensiune pe sistemele de 64 de biți a fost redusă de la 96 la 64 de biți (de la 12 la 8 octeți). Reducerea dimensiunii anteturilor permite o micșorare a dimensiunii heap-ului și îmbunătățește eficiența funcționării cache-ului.
  • A fost propusă o implementare de test a API-ului Vector, care oferă funcții pentru calculul vectorial ce se desfășoară folosind instrucțiuni vectoriale ale procesoarelor x86_64 și AArch64, permițând aplicarea simultană a operațiunilor asupra mai multor valori (SIMD). Spre deosebire de capacitățile de autotipare ale operațiunilor scalare oferite de compilatorul JIT HotSpot, noul API oferă posibilitatea de a controla explicit vectorizarea pentru procesarea paralelă a datelor.
  • A fost propus pentru testare al cincilea variantă preliminară a API-ului pentru concurență structurată (Structured Concurrency), care simplifică dezvoltarea aplicațiilor multithreading prin tratarea mai multor sarcini care se desfășoară în fire diferite ca un singur bloc.
  • În mecanismul de potrivire cu șablonul, a fost propusă a treia versiune preliminară a capacității de a folosi tipuri primitive (int, byte, char și alte tipuri de bază care nu sunt obiecte) în toate tipurile de șabloane, în operatorul „instanceof” și în blocurile „switch”. switch (x.getStatus()) { case 0 -> „bine”; case 1 -> „avertizare”; case 2 -> „eroare”; case int i -> „status necunoscut: ” + i; } if (i instanceof byte b) { … b … }
  • În JDK Flight Recorder (JFR) a fost adăugată suport experimental pentru profilarea cu o urmărire mai precisă a consumului de resurse CPU pe platforma Linux. Informațiile despre timpul de execuție al diferitelor construcții pot fi vizualizate clar prin utilizarea diagramelor colorate „FlameGraph”.
  • Stabilitatea funcționării JDK Flight Recorder (JFR) a fost îmbunătățită prin eșantionarea asincronă a stivelor thread-urilor Java, prin ocolirea stivei de apeluri doar pe „punctele sigure” (safepoints).
  • În JDK Flight Recorder (JFR) au fost adăugate instrumente de urmărire și evaluare a timpului de execuție al metodelor. Se susține urmărirea stivei de apeluri pentru metode specifice și înregistrarea statisticilor exacte despre apelurile de metode, acoperind metrici precum timpul de execuție și numărul de apeluri.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster