Lansare Java SE 20

După șase luni de dezvoltare, compania Oracle a lansat platforma Java SE 20 (Java Platform, Standard Edition 20), pentru care utilizarea unei implementări de referință este OpenJDK, un proiect deschis. Cu excepția eliminării unor funcționalități învechite, Java SE 20 păstrează compatibilitatea înapoi cu versiunile anterioare ale platformei Java - majoritatea proiectelor Java scrise anterior vor funcționa fără modificări pe noua versiune. Versiunile gata de instalat ale Java SE 20 (JDK, JRE și Server JRE) sunt pregătite pentru Linux (x86_64, AArch64), Windows (x86_64) și macOS (x86_64, AArch64). Implementarea de referință a Java 20, dezvoltată în cadrul proiectului OpenJDK, este complet deschisă sub licența GPLv2 cu excepțiile GNU ClassPath, care permit legarea dinamică cu produsele comerciale.

Java SE 20 este clasificat ca un release cu termen de suport obișnuit, actualizările urmând să fie lansate până la următorul release. Ca ramură cu termen lung de suport (LTS), ar trebui să folosiți Java SE 17, pentru care actualizările vor continua până în 2029. Reamintim că, începând cu lansarea Java 10, proiectul s-a mutat la un nou proces de dezvoltare, presupunând un ciclu mai scurt de creare a noilor release-uri. Funcționalitățile noi sunt acum dezvoltate într-o ramură master care este actualizată continuu, în care sunt incluse modificările gata de utilizare și din care se ramifică, o dată la șase luni, ramurile pentru stabilizarea noilor release-uri.

Printre noutățile Java 20 se numără:

  • A fost propus suportul preliminar pentru valori de domeniu (Scoped Values), care permit partajarea de date imuabile în fire și schimbul eficient de date între firele secundare (valorile sunt moștenite). Scoped Values evoluează pentru a înlocui mecanismul variabilelor locale pentru 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țiat între Scoped Values și variabilele locale pentru fir este că primele sunt scrise o singură dată, ulterior nu pot fi schimbate și rămân disponibile doar pe durata de executare a firului. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request.isAuthorized() ? ADMIN : GUEST); var user = new User(level); ScopedValue.where(CURRENT_USER, user) .run(() -> Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) throw new InvalidUserException(); return new DBConnection(…); } }
  • A fost adăugată a doua implementare preliminară a șabloanelor de înregistrare (record pattern), extinzând posibilitatea de potrivire cu modelul apărut în Java 16, metodele pentru analiza valorilor claselor de tip record. De exemplu: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = p.x(); int y = p.y(); System.out.println(x + y); } }
  • A fost adăugată a patra implementare preliminară a potrivirii cu modelul în expresiile „switch”, permițând utilizarea de modele flexibile în etichetele „case” care acoperă o serie de valori, pentru care anterior era necesară utilizarea unor lanțuri voluminoase de expresii „if…else”. static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); }; }
  • A fost adăugată a doua implementare preliminară a API-ului FFM (Foreign Function & Memory), care permite organizarea interacțiunii programelor Java cu cod și date externe prin apelarea funcțiilor din biblioteci externe și accesul la memorie în afara JVM.
  • A fost adăugată a doua implementare preliminară a fluxurilor virtuale, care reprezintă fluxuri ușoare, simplificând semnificativ scrierea și întreținerea aplicațiilor multithreading de înaltă performanță.
  • A fost adăugat a doua variantă a API-ului experimental pentru paralelismul structurat, care simplifică dezvoltarea aplicațiilor multithreading prin tratarea mai multor sarcini care rulează în diferite fluxuri ca un singur bloc.
  • A fost adăugată a cincea implementare preliminară a API-ului Vector, care oferă funcții pentru calcule vectoriale ce sunt efectuate 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 capabilitățile de auto-vectorizare a operațiunilor scalare oferite de compilatorul JIT HotSpot, noul API oferă posibilitatea de a controla explicit vectorizarea pentru procesarea paralelă a datelor.

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