Rilascio di Java SE 20

Dopo sei mesi di sviluppo, Oracle ha rilasciato la piattaforma Java SE 20 (Java Platform, Standard Edition 20), utilizzando come implementazione di riferimento il progetto open source OpenJDK. Ad eccezione della rimozione di alcune funzionalità obsolete, Java SE 20 mantiene la compatibilità retroattiva con le versioni precedenti della piattaforma Java: la maggior parte dei progetti Java precedentemente sviluppati funzionerà senza modifiche con la nuova versione. Le build pronte per l'installazione di Java SE 20 (JDK, JRE e Server JRE) sono disponibili per Linux (x86_64, AArch64), Windows (x86_64) e macOS (x86_64, AArch64). L'implementazione di riferimento di Java 20 sviluppata nell'ambito del progetto OpenJDK è completamente aperta con licenza GPLv2, con eccezioni GNU ClassPath che consentono il collegamento dinamico a prodotti commerciali.

Java SE 20 è classificato come un rilascio con supporto normale, con aggiornamenti previsti fino al prossimo rilascio. Per le versioni a lungo termine (LTS), è consigliabile utilizzare Java SE 17, con aggiornamenti previsti fino al 2029. Ricordiamo che a partire dal rilascio di Java 10, il progetto ha adottato un nuovo processo di sviluppo, che prevede cicli più brevi nella creazione di nuovi rilasci. Le nuove funzionalità ora vengono sviluppate in un ramo master costantemente aggiornato, che include modifiche già pronte e da cui si diramano rami per la stabilizzazione di nuovi rilasci ogni sei mesi.

Tra le novità di Java 20, si possono notare:

  • È stato proposto un supporto preliminare per i valori scopi (Scoped Values), che consente la condivisione di dati immutabili nei thread e uno scambio efficiente di dati tra thread secondari (i valori vengono ereditati). I valori scopi si sviluppano per sostituire il meccanismo delle variabili locali al thread (thread-local variables) e sono più efficienti nell'uso di un numero molto elevato di thread virtuali (migliaia e milioni di thread). La principale differenza tra i valori scopi e le variabili locali al thread è che i primi vengono registrati una sola volta, non possono essere successivamente modificati e rimangono disponibili solo durante l'esecuzione del thread. 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(…); } }
  • È stata aggiunta una seconda implementazione preliminare dei modelli di registrazione (record pattern), che estende la già esistente funzionalità di Java 16 per il confronto dei modelli per l'analisi dei valori delle classi di tipo record. Ad esempio: 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); } }
  • È stata aggiunta una quarta implementazione preliminare del confronto dei modelli nelle espressioni 'switch', che consente di utilizzare nei casi 'case' non valori esatti, ma modelli flessibili che coprono una serie di valori, per i quali in precedenza era necessario utilizzare ingombranti catene di espressioni '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(); }; }
  • È 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 tramite la chiamata di funzioni da librerie esterne e l'accesso alla memoria al di fuori della JVM.
  • È stata aggiunta la seconda implementazione preliminare dei thread virtuali, che rappresentano thread leggeri e semplificano notevolmente la scrittura e la manutenzione di applicazioni multithread ad alte prestazioni.
  • È stata aggiunta la seconda versione dell'API sperimentale per il parallelismo strutturato, che semplifica lo sviluppo di applicazioni multithread grazie alla gestione di più attività eseguite in thread diversi come un'unica unità.
  • È stata aggiunta la quinta implementazione preliminare dell'API Vector, che fornisce funzioni per i calcoli vettoriali effettuati utilizzando le istruzioni vettoriali dei processori x86_64 e AArch64, permettendo di applicare operazioni a più valori contemporaneamente (SIMD). A differenza delle capacità di auto-vettorializzazione delle operazioni scalari fornite nel compilatore JIT HotSpot, la nuova API consente di gestire esplicitamente la vettorializzazione per l'elaborazione parallela dei dati.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster