Oracle ha annunciato, in occasione della conferenza Java One che si è tenuta nei giorni scorsi a Redwood Shores (California) negli Stati Uniti, la disponibilità di Java 24, l’ultima versione del linguaggio di programmazione e della piattaforma di sviluppo numero uno al mondo.
Java 24 (Oracle JDK 24) offre migliaia di miglioramenti che aiutano gli sviluppatori a massimizzare la produttività e promuovere l’innovazione. Inoltre, le maggiori prestazioni, stabilità e sicurezza della piattaforma aiutano le organizzazioni a crescere più rapidamente.
Le nuove funzionalità del linguaggio di Java 24
- JEP 488: Primitive Types in Patterns, instanceof, and switch (seconda anteprima): aiuta gli sviluppatori ad aumentare la produttività della programmazione Java rendendo il linguaggio più uniforme ed espressivo. Questa funzione di Java 24 consente agli sviluppatori di migliorare la corrispondenza dei pattern rimuovendo le restrizioni relative ai tipi primitivi che incontrano quando utilizzano la corrispondenza dei pattern, instanceof e switch. Consente inoltre di utilizzare pattern di tipo primitivo in tutti i contesti di pattern ed estende instanceof e switch a tutti i tipi primitivi. Gli sviluppatori di applicazioni che integrano l’inferenza AI troveranno particolarmente utile il supporto dei tipi primitivi.
- JEP 492: Flexible Constructor Bodies (terza anteprima): aiuta gli sviluppatori a migliorare l’affidabilità del codice attraverso l’introduzione di due fasi di prologo ed epilogo distinte in un constructor body. In questo modo gli sviluppatori hanno la possibilità di inserire in modo più naturale la logica che attualmente devono inserire nei metodi statici ausiliari, nei costruttori intermedi ausiliari o negli argomenti dei costruttori. Inoltre, continua a garantire che il codice contenuto in un costruttore di sottoclassi non possa interferire con la creazione delle istanze di superclassi, aumentando l’affidabilità delle classi in caso di ovverride dei metodi.
- JEP 494: Module Import Declarations (seconda anteprima): questa funzionalità di Java 24 aiuta gli sviluppatori a migliorare la produttività consentendo loro di importare in modo facile e veloce tutti i pacchetti esportati da un modulo, senza richiedere che anche il codice di importazione si trovi in un modulo. Questo semplifica il riutilizzo delle librerie modulari da parte di tutti gli sviluppatori e consente ai principianti di utilizzare più facilmente librerie di terze parti e classi Java fondamentali, senza preoccuparsi del punto in cui si trovano nella gerarchia di pacchetti. Questa funzione offre inoltre diversi vantaggi agli sviluppatori che desiderano integrare rapidamente la business logic con le chiamate all’inferenza AI nativa, alle librerie o ai servizi.
- JEP 495: Simple Source Files and Instance Main Methods (quarta anteprima): aiuta gli studenti che stanno imparando a programmare in Java a scrivere i loro primi programmi, anche se non comprendono le funzioni del linguaggio di vasta portata, per aiutarli ad apprendere. Questo permette ai loro docenti e istruttori di introdurre i concetti gradualmente; gli studenti possono scrivere dichiarazioni semplificate per i programmi a classe singola ed espandere senza problemi i loro programmi con funzionalità più avanzate a mano a mano che sviluppano nuove competenze. Inoltre, con questo strumento anche gli sviluppatori Java esperti possono scrivere piccoli programmi in modo sintetico ed efficiente, senza dover utilizzare strumenti destinati a progetti di maggiori dimensioni.
Librerie
- JEP 485: Stream Gatherers: aiuta gli sviluppatori a leggere, scrivere e gestire il codice Java in modo più efficiente, migliorando lo Stream API per supportare operazioni intermedie personalizzate. In questo modo le pipeline di streaming possono trasformare i dati in modi che sarebbero difficili da implementare con le operazioni intermedie integrate preesistenti.
- JEP 484: Class-File API: questa libreria di Java 24 aiuta gli sviluppatori a migliorare la produttività, fornendo un’API standard per l’analisi, la generazione e la trasformazione dei file di classe Java e tracciando il formato dei file di classe Java definito dalla specifica Java Virtual Machine.
- JEP 487: Scoped Values (quarta anteprima): aiuta gli sviluppatori ad aumentare la facilità d’uso, la comprensibilità, le prestazioni e l’affidabilità dei loro progetti, consentendo la condivisione di dati immutabili all’interno dei thread e fra thread diversi.
- JEP 489: Vector API (nona versione incubator): aiuta gli sviluppatori a migliorare la produttività, introducendo un’API per esprimere calcoli vettoriali che si compilano in modo affidabile in fase di esecuzione per le istruzioni vettoriali sulle architetture di CPU supportate. Di conseguenza, con Java 24, gli sviluppatori possono ottenere prestazioni superiori a quelle dei calcoli scalari equivalenti, spesso utilizzati negli scenari di inferenza e calcolo dell’intelligenza artificiale.
- JEP 499: Structured Concurrency (quarta anteprima): aiuta gli sviluppatori a migliorare la manutenzione, l’affidabilità e l’osservabilità del codice multithread, semplificando la programmazione concorrente tramite una nuova API per la concorrenza strutturata. Gestendo come una singola unità di lavoro i gruppi di attività correlate eseguiti all’interno di thread diversi, la concorrenza strutturata contribuisce a eliminare i rischi più comuni derivanti da operazioni di annullamento e chiusura, come le perdite di thread e i ritardi di annullamento.
Librerie di security
- JEP 478: Key Derivation Function API (anteprima): con Java 24 adesso gli sviluppatori a prepararsi per gli ambienti di elaborazione quantistica emergenti, offrendo la sicurezza della crittografia per i dati in transito, per migliorare la riservatezza e l’integrità della comunicazione.
- JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism: contribuisce ad aumentare la sicurezza delle applicazioni Java, fornendo un’implementazione del meccanismo quantum-resistant Module-Lattice-Based-Key-Encapsulation Mechanism (ML-KEM). Questa funzione di Java 24 è un passo importante per la preparazione e la successiva fornitura del supporto per la crittografia post-quantum (PQC) nella piattaforma Java, poiché utilizza meccanismi di incapsulamento delle chiavi per proteggere le chiavi simmetriche sui canali di comunicazione non sicuri che utilizzano la crittografia a chiave pubblica.
- JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm: contribuisce ad aumentare la sicurezza delle applicazioni Java, fornendo un’implementazione del meccanismo Module-Lattice-Based Digital Signature Algorithm (ML-DSA) resistente agli attacchi dei computer quantistici. Come JEP 496, questa funzione di Java 24 costituisce un passo importante per la preparazione e la successiva eventuale fornitura del supporto di PQC nella piattaforma Java, poiché utilizza le firme digitali per rilevare le modifiche non autorizzate ai dati e per autenticare l’identità dei firmatari. Il meccanismo ML-DSA è stato progettato per fornire una protezione dagli attacchi informatici futuri in ambito quantum computing ed è stato standardizzato dal NIST (National Institute of Standards and Technology) statunitense, nello standard FIPS 204.
Gli strumenti di Java 24
JEP 493: Linking Run-Time Images without JMODs: aiuta gli sviluppatori ad aumentare l’efficienza, consentendo allo strumento jlink di creare immagini di runtime personalizzate senza utilizzare i file JMOD del JDK, con la possibilità di ridurre le dimensioni del JDK del 25% circa. Di conseguenza, un’immagine di runtime può essere collegata dai moduli indipendentemente dal fatto che tali moduli siano file JMOD standalone, file JAR modulari o parte di un’immagine di runtime collegata in precedenza. Questa funzione di Java 24 deve essere abilitata durante la creazione del JDK. Non viene abilitata per impostazione predefinita e alcuni fornitori di JDK potrebbero scegliere di non abilitarla.
Aggiornamenti di prestazioni e runtime in Java 24
- JEP 450: Compact Object Headers (sperimentale): aiuta gli sviluppatori ad aumentare la produttività, riducendo da 96-128 bit a 64 bit la dimensione delle intestazioni degli oggetti nella JVM HotSpot nelle architetture a 64 bit. Ciò consente di ridurre le dimensioni dell’heap, migliorare la densità di distribuzione e aumentare la località dei dati.
- JEP 475: Late Barrier Extension for G1: aiuta gli sviluppatori ad aumentare l’efficienza, posticipando l’espansione delle barriere del garbage collector G1, rispetto all’inizio della pipeline di compilazione di C2 JIT. Questo offre la possibilità di ridurre l’overhead, se si verifica dopo le ottimizzazioni indipendenti dalla piattaforma e l’allocazione dei registri. Semplificando l’implementazione delle barriere del garbage collector G1, questa funzione di Java 24consente di aumentare l’efficienza, la comprensibilità, la resilienza e la qualità del codice generato da C2.
- JEP 483: Ahead-of-Time Class Loading & Linking: aiuta gli sviluppatori ad aumentare la produttività e a migliorare i tempi di avvio, rendendo immediatamente disponibili le classi di un’applicazione, in uno stato caricato e collegato, all’avvio della Java Virtual Machine HotSpot. Questa funzione non richiede l’uso dello strumento jlink o jpackage, né la modifica della modalità di avvio delle applicazioni dalla riga di comando, o qualsiasi modifica al codice di applicazioni, librerie o framework. Di conseguenza, aiuta a gettare le basi per il miglioramento continuo dei tempi di avvio e warm up.
- JEP 490: ZGC: Remove the Non-Generational Mode: aiuta gli sviluppatori a ridurre i costi di manutenzione legati al supporto di due modalità diverse, rimuovendo la modalità non generazionale di Z Garbage Collector (ZGC).
- JEP 491: Synchronize Virtual Threads without Pinning: aiuta gli sviluppatori ad aumentare la produttività, estendendo la scalabilità del codice Java e delle librerie che utilizzano metodi e istruzioni sincronizzati. Consentendo ai thread virtuali di rilasciare i thread della piattaforma di base, questa funzione di Java 24 permette agli sviluppatori di accedere a più thread virtuali per gestire i carichi di lavoro applicativi.
Codice sorgente
- JEP 404: Generational Shenandoah (sperimentale): aiuta gli sviluppatori ad aumentare la produttività, ottimizzando il garbage collector Shenandoah con funzionalità sperimentali di raccolta generazionale che migliorano il throughput sostenibile, la resilienza del carico e l’utilizzo della memoria.
- JEP 479: Remove the Windows 32-bit x86 Port: aiuta gli sviluppatori ad aumentare l’efficienza, rimuovendo il codice sorgente e creando il supporto per la porta x86 a 32 bit di Windows, in modo da semplificare l’infrastruttura di generazione e test del JDK.
- JEP 501: Deprecate the 32-bit x86 Port for Removal: aiuta gli sviluppatori ad aumentare la produttività, deprecando la porta x86 a 32 bit in vista della sua rimozione nelle release successive. In questo modo gli sviluppatori possono accedere a nuove funzionalità che richiedono un supporto specifico della piattaforma, senza essere costretti a implementare i fallback a 32 bit di x86.
Inoltre, con l’introduzione di funzionalità moderne e sicure in Java 24, e con la graduale eliminazione di funzionalità obsolete e quelle non sicure, Oracle ribadisce il suo impegno per l’integrità di Java e il suo allineamento alle best practice di sviluppo del software. Oracle ha previsto la rimozione di tre funzioni in una delle prossime versioni di Java: JEP 472: Prepare to Restrict the Use of JNI, JEP 486: Permanently Disable the Security Manager e JEP 498: Warn upon Use of Memory-Access Methods in sun.misc.Unsafe.
Le funzioni della release Java 24 sono frutto di una collaborazione stretta e continua fra Oracle e altri membri della community globale di sviluppatori Java, tramite OpenJDK e Java Community Process (JCP).
Il sostegno alla community globale di Java con l’innovazione in cloud
Implementando Java su Oracle Cloud Infrastructure (OCI), uno dei primi hyperscaler a supportare Java 24, è possibile ottenere livelli superiori di prestazioni, efficienza, innovazione e risparmio sui costi. OCI offre infatti Oracle Java SE, Oracle GraalVM e il Java SE Subscription Enterprise Performance Pack senza alcun costo aggiuntivo, e grazie a ciò Java 24 consente agli sviluppatori di creare e implementare applicazioni che possono eseguite più velocemente, più efficacemente e con un rapporto prezzo/prestazioni ottimizzato.
La Oracle Java Universal SE Subscription offre ai clienti un supporto di qualità eccellente. Include il Java SE Subscription Enterprise Performance Pack, il supporto per tutto il portafoglio Java, il diritto di utilizzare Oracle GraalVM, l’accesso alle funzioni avanzate di Java Management Service e la flessibilità necessaria per eseguire l’upgrade in funzione delle esigenze di business dei clienti. Ciò consente alle organizzazioni IT di gestire la complessità, ridurre i rischi per la sicurezza e contenere i costi.
Dichiarazioni
“A fine anno Java celebrerà il suo trentesimo anniversario e continua a espandersi, per rispondere alle esigenze in continua evoluzione degli sviluppatori con nuove funzionalità che supportano lo sviluppo di applicazioni basate sull’intelligenza artificiale“, ha dichiarato Arnal Dayaratna, Research Vice President, Software Development di IDC. “L’ampia gamma di funzionalità della nuova versione contribuirà a una maggiore produttività: gli sviluppatori potranno creare applicazioni ricche di funzionalità per le loro organizzazioni e clienti, in modo più rapido ed efficiente. Java 24 evidenzia come questo linguaggio non tema rivali quando si tratta di sviluppare applicazioni mission-critical di livello enterprise su vasta scala“.
“Negli ultimi 30 anni, Java ha offerto agli sviluppatori una piattaforma completa per creare e distribuire applicazioni destinate a moltissimi scenari di utilizzo diversi“, ha dichiarato Georges Saab, Senior Vice President, Oracle Java Platform e Chair del Board di OpenJDK. “Java 24 offre più di 20 nuove funzionalità che coprono ogni aspetto di Java, come l’intelligenza artificiale e la crittografia post-quantum, così da offrire agli sviluppatori tutti gli strumenti di cui hanno bisogno per creare applicazioni innovative e basate su AI. Siamo entusiasti di lavorare con la community globale di Java per continuare a fornire un flusso costante di nuove funzionalità da rilasciare a cadenza regolare ogni sei mesi”.