Lansarea Java SE 26 și OpenJDK 26. Proiectul pentru integrarea suportului JavaScript și Python în JVM

După șase luni de dezvoltare, compania Oracle a lansat platforma Java SE 26 (Java Platform, Standard Edition 26), al cărei proiect de referință este OpenJDK. Cu excepția eliminării unor funcționalități învechite, Java SE 26 păstrează compatibilitatea retroactivă cu versiunile anterioare ale platformei Java — cele mai multe proiecte Java scrise anterior vor funcționa fără modificări pe noua versiune. Pachetele pregătite pentru instalare Java SE 26 (JDK, JRE și Server JRE) sunt disponibile pentru Linux (x86_64, AArch64), Windows (x86_64) și macOS (x86_64, AArch64). Implementarea de referință a Java SE 26, dezvoltată în cadrul proiectului OpenJDK, este complet deschisă sub licența GPLv2 cu excepții GNU ClassPath care permit legarea dinamică cu produsele comerciale.

Java SE 26 este clasificat drept o versiune cu termen de suport obișnuit, actualizările fiind lansate până la următoarea versiune. Pentru o ramură cu termen lung de suport (LTS), ar trebui să se utilizeze Java SE 25, Java SE 21 sau Java SE 17, actualizările fiind disponibile până în 2033, 2031 și 2029, respectiv (publique până în septembrie 2030, 2028 și 2026). Suportul extins pentru ramura LTS Java SE 8 va continua până în 2030, iar pentru Java SE 11 până în 2032.

Printre schimbările din Java SE 26 (1, 2, 3, 4):

  • A fost implementat un avertisment la utilizarea reflexiei adânci pentru modificarea câmpurilor marcate cu cuvântul cheie „final”. În viitor, se intenționează dezactivarea, în mod implicit, a funcționalităților nesigure ale limbajului și, printre altele, transformarea câmpurilor marcate ca final în totalitate nemodificabile, eliminându-se căile de ocolire pentru modificarea acestora prin reflexie adâncă (API Reflection).
  • API-ul Applet (java.applet.Applet*, javax.swing.JApplet), folosit pentru a rula aplicații Java în browser, a fost eliminat. Acest API a devenit neglijabil după ce suportul pentru pluginul Java în browsere a fost oprit și a fost declarat învechit în 2021.
  • A fost implementată capacitatea de a utiliza cache-ul preformatat (AOT — ahead-of-time) cu orice colector de gunoi, inclusiv ZGC (Z Garbage Collector). Modificarea implică suport pentru încărcarea secvențială a obiectelor Java în memorie, folosind un format universal și independent de colectorii de gunoi în loc de mapping direct în memorie a reprezentărilor specifice ale cache-ului. Utilizarea cache-ului AOT reduce timpul de pornire și accelerează actualizarea (warmup) mașinii virtuale HotSpot.
  • În API-ul Clientului HTTP a fost adăugat suport pentru protocolul HTTP/3, permițând aplicațiilor și bibliotecilor să acceseze serverele prin HTTP/3 după modificări minime ale codului.
  • Performanța colectorului de gunoi G1 a fost îmbunătățită, datorită reducerii blocajelor pentru sincronizarea firelor de aplicație cu firele colectorului de gunoi.
  • A fost propus un al doilea variant preliminar al API-ului pentru codificarea și decodificarea obiectelor cu chei criptografice, certificate și liste de certificate revocate, folosind formatul PEM (Pivacy-Enhanced Mail).
  • A fost propus pentru testare al șaselea variant preliminar al API-ului pentru concurența structurată (Structured Concurrency), care simplifică dezvoltarea aplicațiilor multi-thread prin gestionarea mai multor sarcini care rulează în fire diferite ca un singur bloc.
  • A fost adăugat al doilea variant preliminar al API-ului Lazy Constants pentru a lucra cu obiecte ce conțin date immutable și care sunt tratate în JVM ca constante. Aceste obiecte beneficiază de optimizări de performanță, similare câmpurilor cu cuvântul cheie „final”. Spre deosebire de „final”, noul API 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 aplicarea optimizărilor de eliminare a constantelor (constant-folding) în codul utilizatorului, utilizate anterior doar în codul intern JDK. class Application { // A fost: // static final UserService USERS = new UserService(); // Acum poate fi: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
  • În mecanismul de potrivire cu modelul a fost propusă a patra variantă preliminară de utilizare a tipurilor primitive (int, byte, char și alte tipuri bazice care nu sunt obiecte) în toate tipurile 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 fost propusă a unsprezecea implementare de test a API-ului Vector, care oferă funcții pentru calcule vectoriale, care sunt efectuate folosind instrucțiuni vectoriale ale procesoarelor x86_64 și AArch64 și permit aplicarea simultană a operațiunilor asupra mai multor valori (SIMD). Spre deosebire de capacitățile de avectorizare automată a operațiunilor scalare oferite în compilatorul JIT HotSpot, noul API oferă posibilitatea de a controla explicit avectorizarea pentru procesarea paralelă a datelor.

În plus, compania Oracle a anunțat proiectul Detroit, care se va dezvolta în cadrul OpenJDK și este destinat îmbunătățirii portabilității între Java, JavaScript și Python. În cadrul proiectului se intentionează disponibilitatea integrării în procesul runtime al JVM cu motorul JavaScript V8 și interpretul CPython. Previamente, compania Oracle a dezvoltat motorul JavaScript Nashorn, care funcționează pe deasupra mașinii virtuale JVM, dar a suspendat proiectul din cauza dificultății de a dezvolta o implementare separată JavaScript în condițiile în care întreaga ecosistemă este legată de motorul V8.

De asemenea, se poate menționa publicarea actualizării platformei pentru dezvoltarea aplicațiilor cu interfață grafică JavaFX 26. În următoarele ore, de asemenea, se așteaptă lansarea mașinii virtuale universale GraalVM 26, care suportă rularea aplicațiilor scrise în JavaScript (Node.js), Python, Ruby, R, orice limbaje pentru JVM (Java, Scala, Clojure, Kotlin) și limbaje pentru care poate fi generat cod LLVM (C, C++, Rust).

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