Rilasciati Java SE 27 e OpenJDK 27

Dopo sei mesi di sviluppo, Oracle ha rilasciato la piattaforma Java SE 27 (Java Platform, Standard Edition 27), la cui implementazione di riferimento si basa sul progetto open source OpenJDK. A eccezione della rimozione di alcune funzionalità obsolete, Java SE 27 mantiene la retrocompatibilità con le versioni precedenti della piattaforma Java: la maggior parte dei progetti Java già esistenti continuerà a funzionare senza modifiche con la nuova versione. Sono disponibili pacchetti pronti all’installazione di Java SE 27 (JDK, JRE e Server JRE) per Linux (x86_64, AArch64), Windows (x86_64) e macOS (x86_64, AArch64). L’implementazione di riferimento di Java SE 27 sviluppata nell’ambito del progetto OpenJDK è completamente open source e distribuita con licenza GPLv2 con eccezioni GNU ClassPath, che consentono il collegamento dinamico con prodotti commerciali.

Java SE 27 rientra nella categoria delle release con ciclo di supporto standard, per cui gli aggiornamenti saranno pubblicati fino al rilascio successivo. Come ramo con supporto a lungo termine (LTS) si raccomanda invece l’uso di Java SE 25, Java SE 21 o Java SE 17, per i quali gli aggiornamenti saranno disponibili rispettivamente fino al 2033, 2031 e 2029 (quelli pubblici fino a settembre 2030, 2028 e 2026). Il supporto esteso per il ramo LTS di Java SE 8 proseguirà fino al 2030, mentre quello di Java SE 11 fino al 2032.

Tra le novità di Java SE 27 (1, 2, 3, 4):

  • Per impostazione predefinita, in tutti gli ambienti viene utilizzato il garbage collector G1 (Garbage-First), in precedenza impiegato nei sistemi server. G1 è ottimizzato per l’uso su sistemi multiprocessore con molta memoria e per bilanciare la prevedibilità della latenza con un’elevata capacità di elaborazione. Durante il funzionamento, G1 suddivide la memoria in numerose piccole regioni e pulisce per prime quelle in cui sono presenti più oggetti non più utilizzati e meno dati attivamente in uso.
  • Nella HotSpot JVM, per impostazione predefinita, sono attive intestazioni compatte degli oggetti. La dimensione delle intestazioni sui sistemi a 64 bit è stata ridotta da 96 a 64 bit, con una conseguente diminuzione del consumo di memoria e una maggiore probabilità che i dati rientrino nella cache del processore. Nei test SPECjbb2015, il consumo di memoria è diminuito del 22%, il carico sulla CPU si è ridotto dell’8% e il numero di operazioni di garbage collection è calato del 15%. Nei test del parser JSON, il tempo di esecuzione si è ridotto del 10%.
  • Nell’implementazione di TLS 1.3 è stato aggiunto il supporto per schemi ibridi di negoziazione delle chiavi, che combinano l’algoritmo ML-KEM (CRYSTALS-Kyber), resistente agli attacchi brute-force con computer quantistici, con i classici algoritmi ECDHE basati su curve ellittiche: X25519MLKEM768 (ECDHE con curva X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE con curva secp256r1 + ML-KEM-768) e SecP384r1MLKEM1024 (ECDHE con curva secp384r1 + ML-KEM-1024). Nell’API javax.net.ssl Questi schemi sono abilitati per impostazione predefinita e non richiedono modifiche alle applicazioni per essere utilizzati.
  • Nel toolkit JDK Flight Recorder (JFR), utilizzato per il monitoraggio, il profiling e la diagnostica delle prestazioni, è stato aggiunto il supporto per la pulizia, nelle informazioni diagnostiche salvate, degli argomenti della riga di comando, dei valori iniziali delle variabili d’ambiente e delle proprietà di sistema. La modifica consente di prevenire la perdita di dati riservati elaborati dal processo sottoposto a profiling, come i token di autorizzazione e le chiavi di accesso API trasmessi tramite variabili d’ambiente.
  • È stata implementata la terza versione preliminare dell’API Lazy Constants per lavorare con oggetti che contengono dati immutabili e che nella JVM vengono trattati come costanti. A questi oggetti si applicano ottimizzazioni delle prestazioni analoghe a quelle usate per i 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 dei programmi e consente di applicare nel codice utente le ottimizzazioni di constant-folding, in precedenza utilizzate solo nel codice interno del JDK. class Application { // Prima: // static final UserService USERS = new UserService(); // Ora è possibile: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
  • Nel meccanismo di pattern matching è stata proposta una quinta bozza preliminare della possibilità di utilizzare i tipi primitivi (int, byte, char e altri tipi di base che non sono oggetti) in tutti i tipi di pattern, nell'operatore «instanceof» e nei blocchi «switch». switch (x.getStatus()) { case 0 -> «okay»; case 1 -> «warning»; case 2 -> «error»; case int i -> «stato sconosciuto: » + i; } if (i instanceof byte b) { … b … }
  • È stata proposta per i test la settima anteprima dell'API Structured Concurrency, che semplifica lo sviluppo di applicazioni multithread trattando più attività eseguite in thread diversi come un unico blocco.
  • È stata realizzata la dodicesima implementazione di prova dell'API Vector, che offre funzioni per i calcoli vettoriali eseguiti tramite le istruzioni vettoriali dei processori x86_64 e AArch64 e consente di applicare simultaneamente operazioni a più valori (SIMD). A differenza delle funzionalità di autovettorizzazione delle operazioni scalari offerte dal compilatore JIT HotSpot, la nuova API permette di controllare esplicitamente la vettorizzazione per l'elaborazione parallela dei dati.
  • È disponibile la terza anteprima dell'API per la codifica e la decodifica di oggetti con chiavi crittografiche, certificati ed elenchi di certificati revocati, utilizzando il formato PEM (Pivacy-Enhanced Mail).

Inoltre, si può segnalare la pubblicazione di un aggiornamento della piattaforma JavaFX 27 per la creazione di applicazioni con interfaccia grafica. Nelle prossime ore è atteso anche il rilascio della macchina virtuale universale GraalVM 27, che supporta l'esecuzione di applicazioni in JavaScript (Node.js), Python, Ruby, R, in tutti i linguaggi per JVM (Java, Scala, Clojure, Kotlin) e nei linguaggi per cui può essere generato bytecode LLVM (C, C++, Rust).

Fonte: opennet.ru

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