Versione Java SE 20

Dopo sei mesi di sviluppo, Oracle ha rilasciato la piattaforma Java SE 20 (Java Platform, Standard Edition 20), che utilizza il progetto open source OpenJDK come implementazione di riferimento. Ad eccezione della rimozione di alcune funzionalità deprecate, Java SE 20 mantiene la retrocompatibilità con le versioni precedenti della piattaforma Java: la maggior parte dei progetti Java scritti in precedenza continuerà a funzionare senza modifiche quando viene eseguita con la nuova versione. Le build pronte per l'installazione di Java SE 20 (JDK, JRE e Server JRE) sono preparate per Linux (x86_64, AArch64), Windows (x86_64) e macOS (x86_64, AArch64). Sviluppata dal progetto OpenJDK, l'implementazione di riferimento Java 20 è completamente open source con licenza GPLv2 con eccezioni GNU ClassPath per consentire il collegamento dinamico a prodotti commerciali.

Java SE 20 è classificato come versione di supporto regolare, con aggiornamenti da rilasciare prima della versione successiva. Il ramo di supporto a lungo termine (LTS) dovrebbe essere Java SE 17, che riceverà aggiornamenti fino al 2029. Ricordiamo che a partire dal rilascio di Java 10, il progetto è passato a un nuovo processo di sviluppo, che implica un ciclo più breve per la formazione di nuove versioni. Nuove funzionalità sono ora in fase di sviluppo in un ramo principale costantemente aggiornato, che include modifiche già completate e da cui i rami vengono ramificati ogni sei mesi per stabilizzare le nuove versioni.

Le nuove funzionalità di Java 20 includono:

  • Esiste un supporto preliminare per i valori con ambito, che consente la condivisione di dati immutabili tra thread e lo scambio efficiente di dati tra thread secondari (i valori vengono ereditati). Gli Scoped Values ​​sono in fase di sviluppo per sostituire il meccanismo delle variabili locali del thread e sono più efficienti quando si utilizzano numeri molto grandi di thread virtuali (migliaia o milioni di thread). La differenza principale tra gli Scoped Values ​​e le variabili thread-local è che i primi vengono scritti una volta, non possono essere modificati in futuro e rimangono disponibili solo per la durata dell’esecuzione del thread. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Richiesta richiesta, Risposta risposta) { var level = (request. isAuthorized()? ADMIN: GUEST); var utente = nuovo Utente(livello); ScopedValue.where(CURRENT_USER, utente).run(() -> Application.handle(richiesta, risposta)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) lancia una nuova InvalidUserException(); restituisce nuova ConnessioneDB(...); } }
  • È stata aggiunta una seconda anteprima dei modelli di record, estendendo la funzionalità di corrispondenza dei modelli introdotta in Java 16 per analizzare i valori delle classi di record. Ad esempio: record Point(int x, int y) {} static void printSum(Object obj) { if (obj istanza di Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • È stata aggiunta una quarta implementazione preliminare del patternmatching nelle istruzioni “switch”, che consente alle etichette “case” di utilizzare non valori esatti, ma pattern flessibili che coprono una serie di valori contemporaneamente, per i quali in precedenza era necessario utilizzare scomodi catene di espressioni “if...else”. static String formatterPatternSwitch(Oggetto oggetto) { return switch (oggetto) { 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); predefinito -> o.toString(); }; }
  • È stata aggiunta una seconda implementazione preliminare dell'API FFM (Foreign Function & Memory) che consente di organizzare l'interazione dei programmi Java con codice e dati esterni attraverso la chiamata di funzioni da librerie esterne e l'accesso alla memoria esterna alla JVM.
  • È stata aggiunta una seconda anteprima dei thread virtuali, ovvero thread leggeri che semplificano notevolmente la scrittura e la manutenzione di applicazioni multi-thread ad alte prestazioni.
  • Aggiunta una seconda API sperimentale per il parallelismo strutturato, che semplifica lo sviluppo di applicazioni multi-thread trattando più attività in esecuzione in thread diversi come un unico blocco.
  • È stata aggiunta una quinta anteprima della Vector API che fornisce funzioni per i calcoli vettoriali che vengono eseguiti utilizzando istruzioni vettoriali sui processori x86_64 e AArch64 e consentono di applicare operazioni contemporaneamente a più valori (SIMD). A differenza delle funzionalità fornite nel compilatore JIT HotSpot per la vettorizzazione automatica delle operazioni scalari, la nuova API consente di controllare esplicitamente la vettorizzazione per l'elaborazione parallela dei dati.

Fonte: opennet.ru

Aggiungi un commento