Le novità di Java 21 SDK

Le novità di Java 21 SDK. Oracle ha di recente annunciato la disponibilità generale di JDK 21. Questa release è la dodicesima feature release consegnata puntualmente attraverso la cadenza di rilascio semestrale. Questo livello di prevedibilità consente agli sviluppatori di gestire facilmente l’adozione di innovazioni grazie a un flusso costante di miglioramenti previsti.

La capacità di Java di aumentare le prestazioni, la stabilità e la sicurezza continua a renderlo il linguaggio di programmazione più diffuso al mondo.

JDK 21 è ora disponibile (Le novità di Java 21 SDK)!

Oracle offre il JDK 21 a sviluppatori, utenti finali e aziende. In questo articolo racconteremo brevemente Le novità di Java 21 SDK.

Oracle offrirà un supporto a lungo termine con Le novità di Java 21 SDK per almeno otto anni. Questo periodo di supporto prolungato offre alle aziende la flessibilità di mantenere le applicazioni in produzione più a lungo con una manutenzione minima e di effettuare la migrazione alle proprie condizioni. Sulla base del feedback dei clienti e dell’utilizzo nell’ecosistema Java, Oracle ha anche annunciato che il supporto a lungo termine per Java 11 è stato esteso almeno fino a Gennaio 2032, garantendo almeno altri otto anni di supporto e aggiornamenti da parte di Oracle.

La community per le Le novità di Java 21 SDK

Come per le versioni precedenti, Java 21 celebra i contributi di molti individui e organizzazioni della comunità OpenJDK: si costruisce Java insieme alla community.

Rapporto di correzione del JDK 21

Il tasso di cambiamento nel tempo delle release del JDK è rimasto sostanzialmente costante per anni, ma con la cadenza semestrale il ritmo con cui vengono fornite funzionalità e miglioramenti pronti per la produzione è aumentato notevolmente.

Invece di apportare decine di migliaia di correzioni e consegnare quasi un centinaio di JEP (JDK Enhancement Proposals) ogni pochi anni, come avveniva con le Major Release di un tempo, i miglioramenti vengono consegnati in Feature Release più snelle, con una cadenza semestrale più gestibile e prevedibile. Le modifiche vanno da nuove funzionalità significative a piccoli miglioramenti, fino alla manutenzione ordinaria, alla correzione di bug e al miglioramento della documentazione. Ogni modifica è rappresentata da un singolo commit per un singolo problema nel JDK Bug System.

Dei 24.196 problemi JIRA contrassegnati come corretti in Java 11 fino a Java 21 al momento della loro GA, 17.288 sono stati completati da persone che lavorano per Oracle, mentre 6.908 sono stati apportati da singoli sviluppatori e sviluppatori che lavorano per altre organizzazioni.

In Java 21, dei 2.585 problemi JIRA contrassegnati come risolti, 1.868 sono stati completati da Oracle, mentre 717 hanno contribuito da altri membri della comunità Java.

Oracle ringrazia gli sviluppatori che lavorano per organizzazioni come Amazon, ARM, Azul, Google, Huawei, IBM, Intel , ISCAS, Red Hat, Rivos, SAP e Tencent per i loro notevoli contributi. Oracle è grata per i contributi di organizzazioni più piccole, come Bellsoft e Loongson, e di sviluppatori indipendenti che hanno contribuito collettivamente all’8% delle correzioni apportate a Java 21.

Inoltre, attraverso il programma OpenJDK Quality Outreach, ringrazia i seguenti progetti FOSS che hanno fornito un eccellente feedback sul test delle build di accesso anticipato di Java 21 per contribuire a migliorare la qualità della release:

  • Apache Commons
  • Apache ZooKeeper
  • AssertJ
  • BNYM Codice Katas
  • JUnit5
  • Karate
  • MyBatis
  • Novità in Java 21

Oltre a migliaia di aggiornamenti per le prestazioni, la stabilità e la sicurezza, Le novità di Java 21 SDK includono decine di nuove funzionalità e miglioramenti, 15 dei quali sono abbastanza significativi da giustificare le proprie proposte di miglioramento del JDK (JEP), che riguardano sei funzionalità di anteprima e una funzionalità di incubazione.

Le caratteristiche di anteprima JEP sono caratteristiche del linguaggio o della macchina virtuale della piattaforma Java SE completamente specificate e completamente implementate, ma impermanenti. Vengono rese disponibili nei rilasci di funzionalità del JDK per consentire agli sviluppatori di avere un feedback basato su usi reali, prima che diventino permanenti in un rilascio futuro. In questo modo si offre anche ai fornitori di strumenti l’opportunità di lavorare per supportare le funzionalità prima che vengano finalizzate nello standard Java SE.

I moduli JEP Incubator consentono di mettere API non definitive e strumenti non definitivi nelle mani di sviluppatori e utenti per raccogliere feedback che miglioreranno la qualità della piattaforma Java.

I 15 JEP forniti con Java 21 sono raggruppati in sei categorie che corrispondono ai principali progetti tecnologici Java a lungo termine e al supporto hardware.

Progetto Ambra

JEP 430: Modelli di stringhe (Anteprima)

Obiettivi JEP:
Semplifica la scrittura di programmi Java facilitando l’espressione di stringhe che includono valori calcolati a tempo di esecuzione.
Migliora la leggibilità delle espressioni che mescolano testo ed espressioni, sia che il testo si adatti a una sola riga di origine (come i letterali di stringa) sia che si estenda su più righe di origine (come i blocchi di testo).
Migliora la sicurezza dei programmi Java che compongono stringhe a partire da valori forniti dall’utente e li passano ad altri sistemi (ad esempio, la creazione di query per i database), supportando la convalida e la trasformazione sia del modello che dei valori delle espressioni incorporate.
Mantiene la flessibilità consentendo alle librerie Java di definire la sintassi di formattazione utilizzata nei modelli di stringa.
Semplifica l’uso di API che accettano stringhe scritte in linguaggi non Java (ad esempio, SQL, XML e JSON).
Consente la creazione di valori non stringa calcolati da testo letterale ed espressioni incorporate senza dover passare attraverso una rappresentazione intermedia della stringa.
Valore:
Seguendo gli obiettivi del Progetto Amber, String Templates mira a rendere il linguaggio di programmazione Java più leggibile, scrivibile e manutenibile.


JEP 440: Modelli di record

Obiettivi JEP:
Migliora il linguaggio di programmazione Java estendendo la corrispondenza dei pattern alla destrutturazione di istanze di classi di record, consentendo query di dati più sofisticate.
Aggiungere pattern annidati, per consentire query di dati più composte.
Correlato a:
[JDK 19] JEP 405: Modelli di record (Anteprima)
[JDK 20] JEP 432: Modelli di record (seconda anteprima)
Valore:
Rende il linguaggio di programmazione Java più produttivo estendendo la corrispondenza dei pattern per esprimere query di dati più sofisticate e componibili.


JEP 441: Pattern Matching per switch

Obiettivi JEP:
Espande l’espressività e l’applicabilità delle espressioni e delle dichiarazioni switch consentendo ai pattern di apparire nelle etichette dei casi.
Permette di allentare la storica ostilità di switch quando lo si desidera.
Aumenta la sicurezza delle dichiarazioni switch, richiedendo che le dichiarazioni switch dei pattern coprano tutti i possibili valori di input.
Assicura che tutte le espressioni e le dichiarazioni switch esistenti continuino a essere compilate senza modifiche e vengano eseguite con una semantica identica.
Correlato a:
[JDK 17] JEP 406: Pattern Matching per switch (Anteprima)
[JDK 18] JEP 420: Pattern Matching per switch (seconda anteprima)
[JDK 19] JEP 427: Pattern Matching per switch (3a Anteprima)
[JDK 20] JEP 433: Pattern Matching per switch (4a Anteprima)
Valore:
Migliora la produttività del linguaggio di programmazione Java rendendolo più semantico, in modo che le complesse query orientate ai dati possano essere espresse in modo conciso e sicuro.


JEP 443: Pattern e variabili senza nome (Anteprima)

Obiettivi JEP:
Migliora il linguaggio Java con i modelli senza nome, che corrispondono a un componente del record senza indicarne il nome o il tipo, e con le variabili senza nome, che possono essere inizializzate ma non utilizzate. Entrambe sono indicate da un carattere di sottolineatura, _.
Valore:
Migliora la leggibilità dei modelli di record eliminando i modelli annidati non necessari.
Migliora la manutenibilità di tutto il codice, identificando le variabili che devono essere dichiarate (ad esempio, in una clausola catch) ma che non saranno utilizzate.

JEP 445: classi senza nome e metodi principali delle istanze (anteprima)

Obiettivi:
Offre un approccio agevole a Java in modo che gli insegnanti possano introdurre i concetti di programmazione in modo graduale.
Aiuta gli studenti a scrivere programmi di base in modo conciso e ad ampliare il proprio codice con garbo man mano che le loro competenze crescono.
Riduce la cerimonia di scrittura di programmi semplici come script e utilità della riga di comando.
Non introduce un dialetto Java separato per principianti.
Non introduce una toolchain separata per principianti; i programmi degli studenti dovrebbero essere compilati ed eseguiti con gli stessi strumenti che compilano ed eseguono qualsiasi programma Java.
Valore:
Evolve il linguaggio Java riducendone gli schemi e le cerimonie in modo che gli studenti possano scrivere i loro primi programmi senza la necessità di comprendere le funzionalità del linguaggio progettate per programmi di grandi dimensioni.


Progetto Loom

JEP 444: thread virtuali

Obiettivi:
Consente alle applicazioni server scritte nel semplice stile thread per richiesta di scalare con un utilizzo dell’hardware quasi ottimale.
Abilita il codice esistente che utilizza l’API java.lang.Thread per adottare thread virtuali con modifiche minime.
Consente una facile risoluzione dei problemi, debug e profilazione dei thread virtuali con gli strumenti JDK esistenti.
Inerente a:
[JDK 20] JEP 436: Thread virtuali (2a anteprima)
[JDK 19] JEP 425: Thread virtuali (Anteprima)
Valore:
Accelera la produttività dello sviluppo di applicazioni come le app destinate agli ambienti cloud introducendo thread virtuali, ovvero thread leggeri che riducono drasticamente lo sforzo di scrittura, manutenzione e osservazione di applicazioni simultanee ad alto throughput.


JEP 446: Valori con ambito (anteprima) – Le novità di Java 21 SDK

Obiettivi:
Abilita la condivisione di dati immutabili all’interno e tra thread.
Relativo a:
[JDK 20] JEP 429: Valori di ambito (incubatore)
Valore:
Facilità d’uso — Fornisce un modello di programmazione per condividere i dati sia all’interno di un thread che con i thread figli, in modo da semplificare il ragionamento sul flusso di dati.
Comprensibilità: rende visibile la durata dei dati condivisi dalla struttura sintattica del codice.
Robustezza: garantisce che i dati condivisi da un chiamante possano essere recuperati solo dai chiamati legittimi.
Prestazioni: tratta i dati condivisi come immutabili in modo da consentire la condivisione da parte di un numero elevato di thread e per abilitare le ottimizzazioni del runtime.


JEP 453: Concorrenza strutturata (anteprima)

Obiettivi:
Semplifica la programmazione simultanea introducendo un’API per la concorrenza strutturata.
Promuove uno stile di programmazione simultanea in grado di eliminare i rischi comuni derivanti dall’annullamento e dall’arresto, come perdite di thread e ritardi di annullamento.
Migliora l’osservabilità del codice simultaneo.
Relativo a:
[JDK 19] JEP 428: Concorrenza strutturata (incubatore)
[JDK 20] JEP 437: Concorrenza strutturata (2° incubatore)
Valore:
Semplifica la programmazione simultanea introducendo un’API per la concorrenza strutturata. che semplifica la gestione e la cancellazione degli errori, migliora l’affidabilità e l’osservabilità.

Progetto Panama

JEP 442: API di funzioni e memoria esterne (terza anteprima)

Obiettivi del PEC:
Introduce un’API mediante la quale i programmi Java possono interagire con codice e dati al di fuori del runtime Java. Richiamando in modo efficiente funzioni esterne (ovvero codice esterno alla JVM) e accedendo in modo sicuro alla memoria esterna (ovvero memoria non gestita dalla JVM), l’API consente ai programmi Java di richiamare librerie native ed elaborare dati nativi senza la fragilità e il pericolo di JNI. Questa è un’API di anteprima.
Relativo a:
[JDK 19] JEP 424: API di funzioni e memoria esterne (anteprima)
[JDK 20] JEP 434: API di funzioni e memoria esterne (2a anteprima)
Valore:
Facilità d’uso: sostituisce Java Native Interface (JNI) con un modello di sviluppo puramente Java superiore.
Prestazioni: fornisce prestazioni paragonabili, se non migliori, alle API esistenti come JNI e sun.misc.Unsafe.
Generalità: fornisce modi per operare su diversi tipi di memoria esterna (ad esempio, memoria nativa, memoria persistente e memoria heap gestita) e, nel tempo, per ospitare altre piattaforme (ad esempio, x86 a 32 bit) e funzioni esterne scritte in linguaggi diversi rispetto a C (ad esempio C++, Fortran).
Sicurezza: consente ai programmi di eseguire operazioni non sicure su memoria esterna ma avvisa gli utenti di tali operazioni per impostazione predefinita.


JEP 448: API vettoriale (6° incubatore)

Obiettivi:
Introduce un’API per esprimere calcoli vettoriali che vengono compilati in modo affidabile in fase di runtime in istruzioni vettoriali ottimali su architetture CPU supportate, ottenendo così prestazioni superiori ai calcoli scalari equivalenti.
Sono incluse le seguenti modifiche degne di nota:
Aggiunge l’operazione esclusiva o (xor) alle maschere vettoriali.
Migliora le prestazioni dei mescolamenti vettoriali, soprattutto se utilizzati per riorganizzare gli elementi di un vettore e durante la conversione tra vettori.
Relativo a:
[JDK 16] JEP 338: API vettoriale (incubatrice)
[JDK 17] JEP 414: API vettoriale (2° incubatore)
[JDK 18] JEP 417: API vettoriale (3° incubatore)
[JDK 19] JEP 426: API vettoriale (4° incubatore)
[JDK 20] JEP 438: API vettoriale (quinto incubatore)
Valore:
Offre un’API chiara e concisa in grado di esprimere in modo chiaro e conciso un’ampia gamma di calcoli vettoriali costituiti da sequenze di operazioni vettoriali composte all’interno di loop e possibilmente con flusso di controllo
L’API dovrebbe essere indipendente dall’architettura della CPU, consentendo implementazioni su più architetture che supportano istruzioni vettoriali.
Offre una compilazione runtime affidabile e prestazioni su architetture x64 e AArch64.
Si allinea con il Progetto Valhalla.


Librerie principali

JEP 431: Sequenced Collections

Obiettivi:
Introduce nuove interfacce per rappresentare raccolte con un ordine di incontro definito. Ciascuna di queste raccolte ha un primo elemento ben definito, un secondo elemento e così via, fino all’ultimo elemento.
Fornisce API uniformi per accedere al primo e all’ultimo elemento e per elaborarne gli elementi in ordine inverso.
Valore:
Migliora la produttività degli sviluppatori offrendo un insieme uniforme di operazioni che si applicano a un tipo di raccolta che rappresenta una sequenza di elementi con un ordine di incontro definito.


Aggiornamenti sulle prestazioni

JEP 439: ZGC generazionale

Obiettivi:
Migliora le prestazioni dell’applicazione estendendo Z Garbage Collector (ZGC) per mantenere generazioni separate per oggetti vecchi e nuovi.
Valore:
Le applicazioni eseguite con Generational ZGC dovrebbero godere di:

  • Minori rischi di stallo nelle allocazioni.
  • Riduzione del sovraccarico della memoria heap richiesta.
  • Riduzione del sovraccarico della CPU per la raccolta dei rifiuti.


Questi vantaggi dovrebbero arrivare senza una significativa riduzione della produttività rispetto allo ZGC non generazionale. Le proprietà essenziali dello ZGC non generazionale dovrebbero essere preservate:
I tempi di pausa non devono superare 1 millisecondo.
Dovrebbero essere supportate dimensioni heap da poche centinaia di megabyte fino a molti terabyte.
Dovrebbe essere necessaria una configurazione manuale minima.


JEP 452: API del meccanismo di incapsulamento delle chiavi

Obiettivi:
Introdurre un’API per i meccanismi di incapsulamento delle chiavi (KEM), una tecnica di crittografia per proteggere le chiavi simmetriche utilizzando la crittografia a chiave pubblica.
Valore:
Consente alle applicazioni di utilizzare algoritmi KEM come RSA Key Encapsulation Mechanism (RSA-KEM), Elliptic Curve Integrated Encryption Scheme (ECIES) e algoritmi KEM candidati per il processo di standardizzazione della crittografia post-quantistica del National Institute of Standards and Technology (NIST) .
Consente l’uso di KEM in protocolli di livello superiore come Transport Level Security (TLS) e in schemi crittografici come Hybrid Public Key Encryption (HPKE, RFC 9180).
Consente ai fornitori di sicurezza di implementare algoritmi KEM nel codice Java o nel codice nativo.
Include un’implementazione del Diffie-Hellman KEM (DHKEM) definito nel §4.1 della RFC 9180.


Manutenzione e deprecazione

JEP 449: depreca la porta x86 a 32 bit per la rimozione

Obiettivi:
Depreca il port x86 di Windows a 32 bit, con l’intento di rimuoverlo in una versione futura.
Valore:
Aggiorna il sistema di build per emettere un messaggio di errore quando si tenta di configurare una build per Windows x86 a 32 bit (x86-32). Il messaggio di errore potrà essere soppresso tramite una nuova opzione di configurazione.

-funzionalità specifiche, in quanto deprecate per la rimozione nella documentazione pertinente.


JEP 451: prepararsi a non consentire il caricamento dinamico degli agenti

Obiettivi:
Emette avvisi quando gli agenti vengono caricati dinamicamente in una JVM in esecuzione. Questi avvisi mirano a preparare gli utenti a una versione futura che non consente il caricamento dinamico degli agenti per impostazione predefinita al fine di migliorare l’integrità per impostazione predefinita. Gli strumenti di funzionalità che caricano gli agenti all’avvio non causeranno l’emissione di avvisi in nessuna versione.
Valore:
Si prepara per una versione futura del JDK che, per impostazione predefinita, non consentirà il caricamento degli agenti in una JVM in esecuzione.
Rivaluta l’equilibrio tra funzionalità, che implica modifiche ad hoc al codice in esecuzione, e integrità, che presuppone che il codice in esecuzione non venga modificato arbitrariamente.
Garantisce che la maggior parte degli strumenti, che non necessitano del caricamento dinamico degli agenti, non siano interessati.
Allinea la capacità di caricare gli agenti in modo dinamico con altre funzionalità cosiddette “superpoteri”, come la riflessione profonda.

(fonte)

Innovaformazione, scuola informatica specialistica promuove le tecnologie Java per lo sviluppo software.

Nell’offerta formativa trovate l’elenco corsi Java navigando sul nostro sito, in particolare con questo LINK.

INFO: info@innovaformazione.net – tel. 3471012275 (Dario Carrassi)

Ti potrebbe interessare

Articoli correlati