Dopo sei mesi di sviluppo, Oracle ha rilasciato Java SE 26 (Java Platform, Standard Edition 26), che utilizza il progetto open source OpenJDK come implementazione di riferimento. Ad eccezione della rimozione di alcune funzionalità deprecate, Java SE 26 mantiene la retrocompatibilità con le versioni precedenti della piattaforma Java: la maggior parte dei progetti Java scritti in precedenza continuerà a funzionare senza modifiche nella nuova versione. Sono disponibili build di Java SE 26 (JDK, JRE e Server JRE) pronte per l'installazione per Linux (x86_64, AArch64), Windows (x86_64) e macOS (x86_64, AArch64). Sviluppata dal progetto OpenJDK, l'implementazione di riferimento Java SE 26 è completamente open source con licenza GPLv2, con le eccezioni GNU ClassPath che consentono il collegamento dinamico con prodotti commerciali.
Java SE 26 è classificato come release con supporto regolare, con aggiornamenti rilasciati fino alla release successiva. Il ramo di supporto a lungo termine (LTS) dovrebbe essere Java SE 25, Java SE 21 o Java SE 17, con aggiornamenti rilasciati rispettivamente fino al 2033, 2031 e 2029 (generalmente disponibili fino a settembre 2030, 2028 e 2026). Il supporto esteso per il ramo LTS Java SE 8 continuerà fino al 2030 e per Java SE 11 fino al 2032.
Le modifiche in Java SE 26 (1, 2, 3, 4) includono:
- È stato implementato un avviso quando si utilizza la riflessione profonda per modificare i campi contrassegnati con la parola chiave "final". I piani futuri includono la disabilitazione per impostazione predefinita delle funzionalità del linguaggio non sicure e, tra le altre cose, la messa completamente immutabile dei campi contrassegnati come final, eliminando la soluzione alternativa per modificarli tramite riflessione profonda (l'API Reflection).
- L'API Applet (java.applet.Applet*, javax.swing.JApplet), utilizzata per eseguire applicazioni Java nel browser, è stata rimossa. Questa API è diventata obsoleta dopo l'interruzione del supporto per il plugin Java per browser ed è stata dichiarata deprecata nel 2021.
- È stata implementata la possibilità di utilizzare una cache ahead-of-time (AOT) con qualsiasi garbage collector, incluso ZGC (Z Garbage Collector). Questa modifica supporta il caricamento sequenziale degli oggetti Java memorizzati nella cache utilizzando un formato universale e indipendente dal garbage collector, anziché mappare direttamente in memoria specifiche rappresentazioni della cache. L'utilizzo di una cache AOT riduce i tempi di avvio e velocizza il riscaldamento della macchina virtuale HotSpot.
- L'API client HTTP è stata aggiornata per supportare il protocollo HTTP/3, consentendo ad applicazioni e librerie di accedere ai server tramite HTTP/3 con modifiche minime al codice.
- Prestazioni migliorate del garbage collector G1 grazie alla riduzione dei blocchi necessari per sincronizzare i thread dell'applicazione con i thread del garbage collector.
- Viene proposta una seconda bozza dell'API per la codifica e la decodifica di oggetti con chiavi crittografiche, certificati ed elenchi di revoca dei certificati utilizzando il formato PEM (Pivacy-Enhanced Mail).
- È stata rilasciata per la fase di test la sesta bozza dell'API Structured Concurrency, che semplifica lo sviluppo di applicazioni multithread trattando più attività in esecuzione su thread diversi come un'unica unità.
- È stata aggiunta la seconda anteprima dell'API Lazy Constants per lavorare con oggetti contenenti dati immutabili e trattati come costanti nella JVM. A tali oggetti vengono applicate ottimizzazioni delle prestazioni simili a quelle dei campi con la parola chiave "final". A differenza di "final", la nuova API separa la creazione dei valori costanti dalla loro inizializzazione, garantisce che un valore possa essere inizializzato una sola volta, riduce il tempo di avvio del programma e consente di utilizzare nel codice utente le ottimizzazioni di riduzione delle costanti, precedentemente utilizzate solo nel codice interno del JDK. class Application { // Precedentemente: // static final UserService USERS = new UserService(); // Ora: static final StableValue UTENTI = ValoreStable.of(); pubblico statico UserService utenti() { restituisci UTENTI.orElseSet(UserService::new); } }
- Il motore di corrispondenza dei modelli introduce una quarta bozza della possibilità di utilizzare tipi primitivi (int, byte, char e altri tipi base non oggetto) in tutti i tipi di modello, l'operatore instanceof e i blocchi 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 … }
- Viene proposta l'undicesima implementazione di prova dell'API Vector. Essa fornisce funzioni per i calcoli vettoriali eseguiti utilizzando le istruzioni vettoriali dei processori x86_64 e AArch64 e consente l'operazione simultanea su più valori (SIMD). A differenza dell'autovettorizzazione delle operazioni scalari del compilatore JIT HotSpot, la nuova API consente un controllo esplicito sulla vettorizzazione per l'elaborazione parallela dei dati.
Oracle ha inoltre annunciato Project Detroit, che verrà sviluppato nell'ambito di OpenJDK e mira a migliorare la portabilità tra Java, JavaScript e Python. Il progetto si propone di consentire l'integrazione del motore JavaScript V8 e dell'interprete CPython nel processo JVM. Oracle aveva precedentemente sviluppato il motore JavaScript Nashorn, che gira sopra la JVM, ma ha interrotto il progetto a causa della difficoltà di sviluppare un'implementazione JavaScript separata quando l'ecosistema principale è legato al motore V8.
Inoltre, siamo lieti di annunciare il rilascio di un aggiornamento della piattaforma JavaFX 26 per la creazione di applicazioni con interfaccia utente grafica. Nelle prossime ore è previsto anche il rilascio della macchina virtuale universale GraalVM 26, che supporta l'esecuzione di applicazioni in JavaScript (Node.js), Python, Ruby, R, qualsiasi linguaggio JVM (Java, Scala, Clojure, Kotlin) e linguaggi per i quali è possibile generare bitcode LLVM (C, C++, Rust).
Fonte: opennet.ru
