Lansarea Java SE 23 și OpenJDK 23

După șase luni de dezvoltare, compania Oracle a publicat platforma Java SE 23 (Java Platform, Standard Edition 23), pentru care se utilizează ca implementare de referință proiectul deschis OpenJDK. Cu excepția eliminării unor caracteristici învechite, Java SE 23 păstrează compatibilitatea înapoi cu versiunile anterioare ale platformei Java — majoritatea proiectelor Java scrise anterior vor funcționa fără modificări în noua versiune. Versiunile gata de instalare ale Java SE 22 (JDK, JRE și Server JRE) sunt disponibile pentru Linux (x86_64, AArch64), Windows (x86_64) și macOS (x86_64, AArch64). Implementarea de referință Java 23, 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 23 este clasificat ca o versiune cu un ciclu de suport standard, actualizările fiind planificate până la următoarea lansare. Pentru versiuni cu suport pe termen lung (LTS), se recomandă utilizarea Java SE 21 sau Java SE 17, actualizările fiind programate până în 2031 și 2029, respectiv (publice până în 2028 și 2026). Suportul extins pentru ramura LTS a Java SE 8 va dura până în 2030, iar pentru Java SE 11 până în 2032.

Printre noutățile propuse în Java SE 23 se numără:

  • Modul de generare a colectorului de gunoi ZGC (Generational Z Garbage Collector) este activat implicit, utilizând procesarea separată a obiectelor „vechi” și „mici”, ceea ce crește eficiența curățării obiectelor recent create cu o durată de viață scurtă. Folosirea Generational ZGC reduce riscurile întârzierilor în timpul alocării resurselor, scade încărcătura CPU și consumul de memorie în timpul colectării gunoiului. Testarea Generational ZGC cu Apache Cassandra 4 a arătat o creștere a capacității de procesare de 4 ori, menținând dimensiunea fixă a heap-ului și o reducere a dimensiunii heap-ului cu un sfert, menținând aceleași valori ale capacității de procesare.
  • În JavaDoc a fost adăugată suport pentru utilizarea markup-ului Markdown în documentarea codului din comentarii, care poate fi utilizat în locul amestecului dintre HTML și etichetele @ din JavaDoc.
    Lansarea Java SE 23 și OpenJDK 23
  • Mecanismele de potrivire a modelului au fost extinse prin suportul preliminar pentru utilizarea tipurilor primare (int, byte, char și alte tipuri de bază care nu sunt obiecte) în toate formele template-urilor, î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 adăugat suportul preliminar pentru utilizarea unei singure expresii „import module M” pentru a importa imediat toate pachetele exportate de modulul specificat. Schimbarea facilitează 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 duce la importul tuturor celor 54 de pachete incluse în modulul java.base, care anterior ar fi trebuit menționate separat („import java.io.*”, „import java.util.*” etc.).

    A fost propusă a doua implementare preliminară a API-ului Class-File pentru analiza, generarea și transformarea fișierelor cu clase Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().startsWith(„debug”))) { classBuilder.with(ce); } } });

  • A fost propusă a opta implementare preliminară a API-ului Vector, care oferă funcții pentru calculele 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 auto-vectorizare a operațiunilor scalare oferite de compilatorul JIT HotSpot, noul API permite gestionarea explicită a vectorizării pentru procesarea paralelă a datelor.
  • În clasa java.io.Console au fost adăugate metodele format, printf, readPassword și readLine pentru a formata, a afișa și a citi text având în vedere localele selectate. System.console().printf(Locale.FRANCE, „%1$tY-%1$tB-%1$te %1$tA”, new Date()) 2024-mai-16 joi
  • A fost adăugată a doua versiune preliminară a API-ului extins Stream, care suportă definirea propriilor operații intermediare, care pot fi utile în cazurile în care operațiile intermediare încorporate existente nu sunt suficiente pentru transformarea dorită a datelor. Handler-ele personalizate sunt conectate prin intermediul unei noi operații intermediare Stream::gather(Gatherer), care procesează elementele fluxului aplicându-le handler-ul specificat de utilizator. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • A fost adăugată a treia versiune preliminară a claselor declarate implicit și a instanțelor anonime ale metodei „main”, în care se poate renunța la declarațiile public/static, la transferul tabloului de argumente și la alte entități legate de declarația clasei. // era public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // acum se poate void main() { System.out.println("Hello, World!"); }
  • A fost adăugat a doua variantă preliminară a unei posibilități ce permite specificarea expresiilor în constructori înainte de apelul lui super(…), utilizat pentru apelul explicit al constructorului clasei părinte din constructorul clasei derivate, dacă aceste expresii nu se referă la instanța creată de constructor. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • A fost adăugată a treia versiune preliminară a valorilor limitate (Scoped Values), care permit partajarea datelor imuabile în fluxuri și schimbul eficient de date între firele copil (valorile sunt moștenite). Scoped Values sunt dezvoltate pentru a înlocui mecanismul variabilelor locale la fir (thread-local variables) și sunt mai eficiente atunci când se utilizează un număr foarte mare de fire virtuale (mii și milioane de fire). Principalul diferențial între Scoped Values și variabilele locale la fir este că primele sunt scrise o singură dată, nu pot fi modificate ulterior și rămân accesibile doar pe durata execuției firului.
  • A fost propusă pentru testare a treia variantă preliminară a API-ului pentru concurența structurată (Structured Concurrency), care simplifică dezvoltarea aplicațiilor multi-threaded prin gestionarea mai multor sarcini executate în fire diferite ca un singur bloc.
  • Metodele de acces la memoria externă (din afara JVM) oferite de clasa sun.misc.Unsafe au fost declarate învechite și programate pentru a fi eliminate. Pentru accesarea memoriei din afara heap-ului și interacțiunea cu codul extern, se recomandă utilizarea API-urilor VarHandle și FFM (Foreign Function & Memory).

De asemenea, merită menționată publicarea actualizării platformei pentru crearea de aplicații cu interfață grafică JavaFX 23 și includerea în pachetul principal a compilatorului JIT GraalVM din Oracle JDK 23.

A fost lansată o nouă versiune a mașinii virtuale universale GraalVM, care suportă rularea aplicațiilor pe JavaScript (Node.js), Python, Ruby, R, orice limbaj pentru JVM (Java, Scala, Clojure, Kotlin) și limbajele pentru care poate fi generat codul bit LLVM (C, C++, Rust). Pe lângă suportul pentru JDK 23, noua versiune a optimizat consumul de memorie și dimensiunea codului executabil, fiind implementat suport complet pentru integrarea Python și WebAssembly în codul Java folosind compilarea JIT.

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