Rilascio di Java SE 26 e OpenJDK 26. Progetto per l'integrazione del supporto di JavaScript e Python nella JVM

Dopo sei mesi di sviluppo, Oracle ha reso disponibile la piattaforma Java SE 26 (Java Platform, Standard Edition 26), utilizzando il progetto OpenJDK come implementazione di riferimento. Ad eccezione della rimozione di alcune funzionalità obsolete, Java SE 26 mantiene la compatibilità con le versioni precedenti della piattaforma Java: la maggior parte dei progetti Java precedentemente scritti funzionerà senza modifiche con la nuova versione. Le build pronte per l'installazione di Java SE 26 (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 SE 26, sviluppata nel contesto del progetto OpenJDK, è completamente aperta sotto la licenza GPLv2 con eccezioni GNU ClassPath, che consentono il collegamento dinamico con prodotti commerciali.

Java SE 26 è classificato tra le versioni con supporto standard, con aggiornamenti in arrivo fino al prossimo rilascio. Per un ramo con supporto a lungo termine (LTS), si consiglia di utilizzare Java SE 25, Java SE 21 o Java SE 17, con aggiornamenti previsti fino al 2033, 2031 e 2029 rispettivamente (con supporto pubblico fino a settembre 2030, 2028 e 2026). Il supporto esteso per il ramo LTS di Java SE 8 durerà fino al 2030, mentre Java SE 11 sarà supportato fino al 2032.

Tra le novità in Java SE 26 (1, 2, 3, 4):

  • È stata implementata un'avvertenza quando si utilizza la riflessione profonda per modificare i campi contrassegnati con la parola chiave «final». In futuro, si prevede di disabilitare per impostazione predefinita le funzionalità non sicure del linguaggio e, tra l'altro, garantire che i campi marcati come final siano completamente immutabili, rimuovendo il modo per modificarli tramite la riflessione profonda (API Reflection).
  • È stata rimossa l'API Applet (java.applet.Applet*, javax.swing.JApplet), utilizzata per avviare applicazioni Java nel browser. Questa API è diventata obsoleta dopo l'interruzione del supporto per il plugin Java nei browser ed è stata dichiarata obsoleta nel 2021.
  • È stata implementata la possibilità di utilizzare la cache precompilata (AOT — ahead-of-time) con qualsiasi garbage collector, incluso ZGC (Z Garbage Collector). Questa modifica prevede il supporto per il caricamento sequenziale di oggetti Java memorizzati nella cache in memoria, utilizzando un formato universale e indipendente dai garbage collector, invece di un mappatura diretta in memoria delle rappresentazioni specifiche della cache. L'uso della cache AOT riduce il tempo di avvio e accelera il riscaldamento della macchina virtuale HotSpot.
  • Nell'API HTTP Client è stata aggiunta la supporto per il protocollo HTTP/3, consentendo ad applicazioni e librerie di interagire con i server tramite HTTP/3 dopo minime modifiche al codice.
  • Migliorata la performance del garbage collector G1, riducendo i blocchi per la sincronizzazione dei thread dell'applicazione con i thread del garbage collector.
  • Proposto un secondo preliminare dell'API per la codifica e la decodifica di oggetti con chiavi crittografiche, certificati e liste di revoca dei certificati, utilizzando il formato PEM (Privacy-Enhanced Mail).
  • Offerto per la fase di prova il sesto prototipo dell'API per la concorrenza strutturata (Structured Concurrency), che semplifica lo sviluppo di applicazioni multithreading gestendo più attività eseguite in thread diversi come un'unica unità.
  • Aggiunta la seconda revisione preliminare dell'API Lazy Constants per lavorare con oggetti contenenti dati immutabili, trattati nella JVM come costanti. A questi oggetti si applicano ottimizzazioni delle prestazioni simili a quelle degli attributi contrassegnati con la parola chiave «final». A differenza del «final», la nuova API separa la creazione di valori permanenti dalla loro inizializzazione, garantendo che il valore possa essere inizializzato solo una volta, riducendo i tempi di avvio delle applicazioni e permettendo l'applicazione nel codice utente di ottimizzazioni di folding delle costanti (constant-folding), utilizzate in precedenza solo nel codice interno di JDK. class Application { // Era: // static final UserService USERS = new UserService(); // Ora è possibile: static final StableValue<UserService> USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
  • Nel meccanismo di corrispondenza dei modelli è proposta una quarta opzione preliminare per l'uso di tipi primitivi (int, byte, char e altri tipi di base che non sono oggetti) in tutti i tipi di modelli, nell'operatore 'instanceof' e nei 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 … }
  • È stata proposta un'undicesima implementazione di test dell'API Vector, che fornisce funzioni per calcoli vettoriali eseguiti tramite istruzioni vettoriali dei processori x86_64 e AArch64, permettendo di applicare operazioni a più valori contemporaneamente (SIMD). A differenza delle funzionalità di autovettorizzazione delle operazioni scalari fornite dal compilatore JIT HotSpot, la nuova API consente un controllo esplicito della vettorizzazione per l'elaborazione parallela dei dati.

Inoltre, Oracle ha annunciato il progetto Detroit, che si svilupperà all'interno di OpenJDK e mira a migliorare la portabilità tra Java, JavaScript e Python. Il progetto prevede di offrire la possibilità di integrazione nel processo di runtime della JVM con il motore JavaScript V8 e l'interprete CPython. In precedenza, Oracle aveva già sviluppato il motore JavaScript Nashorn, funzionante sulla macchina virtuale JVM, ma ha interrotto il progetto a causa delle difficoltà nel sviluppare un'implementazione separata di JavaScript in un contesto in cui l'ecosistema principale è basato sul motore V8.

In aggiunta, è stata pubblicata la nuova versione della piattaforma per la creazione di applicazioni con interfaccia grafica JavaFX 26. Nelle prossime ore è attesa anche l'uscita della macchina virtuale universale GraalVM 26, che supporta l'esecuzione di applicazioni in JavaScript (Node.js), Python, Ruby, R, e in qualsiasi linguaggio per JVM (Java, Scala, Clojure, Kotlin) e in linguaggi per i quali può essere generato il bitcode LLVM (C, C++, Rust).

Fonte: opennet.ru

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