Arriva Java 23

Arriva Java 23

Arriva Java 23 con JDK 23 che è ora disponibile!

Oracle è orgogliosa di annunciare la disponibilità generale di JDK 23 per sviluppatori, aziende e utenti finali.

Novità con Arriva Java 23

JDK 23 offre dodici miglioramenti che sono abbastanza significativi da giustificare le proprie JDK Enhancement Proposals – JEP , tra cui otto funzionalità di anteprima e una funzionalità di incubazione. Riguardano miglioramenti al linguaggio Java, alle API, alle prestazioni e agli strumenti inclusi in JDK. Oltre al lavoro sulla piattaforma Java, con Oracle JDK 23 il compilatore Oracle GraalVM JIT (Graal JIT) è ora incluso tra i JIT disponibili come parte di Oracle JDK.

Miglioramenti nel linguaggio – Arriva Java 23:

Tipi primitivi nei pattern, instanceof e switch (anteprima) – JEP 455

Questa modifica eliminerà diverse restrizioni esistenti quando si utilizzano tipi primitivi nel pattern matching. Il codice che gestisce tipi primitivi e tipi di oggetto può essere semplificato quando non sono necessarie tolleranze speciali ed entrambi i tipi possono essere gestiti allo stesso modo. Si può consentire a instanceof di accettare primitivi riduce ulteriormente il codice per i casi comuni poiché ora può gestire automaticamente i cast condizionali, in cui il valore deve essere verificato per assicurarsi che sia valido per il tipo di destinazione.

Dichiarazioni di importazione del modulo (anteprima) – JEP 476

Consente agli sviluppatori di importare tutti i pacchetti esportati da un modulo con una singola istruzione. Ciò semplifica il riutilizzo delle librerie modulari senza richiedere che il codice di importazione sia in un modulo stesso. Con questa funzionalità i principianti sono in grado di utilizzare librerie di terze parti e classi Java fondamentali senza dover imparare dove si trovano in una gerarchia di pacchetti.

Classi dichiarate implicitamente e metodi principali di istanza (terza anteprima) – JEP 477

Ciò consentirà ai principianti di scrivere i loro primi programmi Java senza dover prima comprendere le funzionalità pensate per programmi più grandi e complessi. I programmi semplici possono utilizzare dichiarazioni semplificate e, quando necessario, espandersi senza problemi per utilizzare funzionalità più avanzate, a seconda delle necessità. Anche gli sviluppatori esperti possono divertirsi a scrivere piccoli programmi in modo succinto.

Corpi Costruttori Flessibili (Seconda Anteprima) – JEP 482

Consentendo ad alcune istruzioni nei costruttori di apparire prima di un’invocazione esplicita del costruttore, ovvero, super(..)gli this(..)sviluppatori ottengono la libertà di esprimere meglio il comportamento dei costruttori. Il posizionamento più naturale della logica che questa funzionalità consente, elimina la necessità di fattorizzare parte della logica di controllo e inizializzazione in metodi statici ausiliari e costruttori intermedi ausiliari. Ad esempio, se un costruttore può convalidare gli argomenti che riceve prima di invocare il costruttore della superclasse, fallirebbe rapidamente ed eviterebbe un’istanziazione non necessaria della superclasse, quando gli argomenti non sono validi.

Librerie

API Class-File (seconda anteprima) – JEP 466

Questo JEP propone un’API per l’analisi, la generazione e la trasformazione di file di classe Java che traccia il formato definito dalla Java Virtual Machine Specification . Avere questa API fornita come parte di ogni release di Feature allevierà la tensione introdotta quando Java ha adottato un ciclo di sei mesi tra le release e ha forzato i framework che manipolano i file di classe, che vengono aggiornati con ogni release, in una rapida adozione di nuove versioni. Quando questa feature sarà finalizzata, dovrebbe liberare lo stesso JDK dalla sua dipendenza dalla libreria ASM di terze parti.

API vettoriale (ottavo incubatore) – JEP 469

Consente agli sviluppatori Java di esprimere calcoli vettoriali che si compilano in modo affidabile in fase di esecuzione in istruzioni vettoriali ottimali su architetture CPU supportate, ottenendo così prestazioni superiori ai calcoli scalari equivalenti. Non ci sono differenze rispetto alla settima incubazione di questa funzionalità in JDK 22. Si prevede che questa API continuerà a tornare come incubazione, con solo piccole modifiche al massimo, finché non saranno disponibili le funzionalità necessarie di Project Valhalla.

Stream Gatherers (seconda anteprima) – JEP 473

Migliora la Stream API per supportare operazioni intermedie personalizzate. Ciò consentirà alle pipeline di streaming di trasformare i dati in modi non facilmente realizzabili con le operazioni intermedie integrate esistenti. Gli Stream gatherer forniscono altrettanta flessibilità alle operazioni intermedie quanta i collector consentono alle operazioni terminali. Questo miglioramento introduce cinque gatherer integrati.

Concorrenza strutturata (terza anteprima) – JEP 480

La concorrenza strutturata consente agli sviluppatori di trattare gruppi di attività correlate in esecuzione in thread diversi come un’unica unità di lavoro, semplificando così la gestione e l’annullamento degli errori, migliorando l’affidabilità e potenziando l’osservabilità. Questa API promuove uno stile di programmazione concorrente che può eliminare i rischi comuni derivanti dall’annullamento e dall’arresto, come perdite di thread e ritardi di annullamento.

Valori con ambito (terza anteprima) – JEP 481

Questo JEP consentirà a un metodo di condividere dati immutabili sia con i suoi chiamanti all’interno di un thread, sia con thread figlio. I valori con ambito sono più facili da ragionare rispetto alle variabili thread-local. Hanno anche costi di spazio e tempo inferiori, specialmente se usati insieme a thread virtuali ( JEP 444 ) e concorrenza strutturata ( JEP 480 ).

PrestazioniArriva Java 23

ZGC: Modalità generazionale di default – JEP 474

Passa dalla modalità predefinita di Z Garbage Collector (ZGC) alla modalità generazionale. Il feedback dall’uso di ZGC di generazione, introdotto in JDK 21, così come i test interni, hanno confermato che funziona significativamente meglio di ZGC non-gen nella maggior parte dei casi d’uso. Questo JEP depreca anche la modalità ZGC non generazionale, con l’intento di rimuoverla in una futura release di JDK.

Utilities – Arriva Java 23

Commenti del documento Markdown – JEP 467

Consente di usare Markdown anziché solo un mix di @tag HTML e Javadoc per scrivere commenti di documentazione Javadoc. Il nuovo formato rende la documentazione in formato sorgente più facile da leggere e comprendere.

AdministrationArriva Java 23

Deprecare i metodi di accesso alla memoria in sun.misc.unsafe per la rimozione – JEP 471

Quando l’accesso alla maggior parte delle API interne è stato ridotto in JDK 9 (JEP 260) e ulteriormente limitato con JDK 16 (JEP 396) e JDK 17 (JEP 403), una manciata di API interne non supportate è rimasta disponibile poiché erano ampiamente utilizzate per attività per le quali non erano disponibili API supportate. Il nostro obiettivo dichiarato era di fornire alla fine API supportate per tali attività e quindi limitare l’accesso a tali API interne non supportate. Con l’introduzione della Foreign Function and Memory API (JEP 454) in JDK 22 è stata fornita un’API supportata per accedere in modo efficiente alla memoria off-heap (esterna). Pertanto viene annunciata la futura rimozione dei metodi in sun.misc.unsafe utilizzati per l’accesso alla memoria esterna.

Un promemoria sulle funzionalità di Anteprima e Incubatore

Le funzionalità di anteprima sono funzionalità di linguaggio o VM completamente specificate e completamente implementate della piattaforma Java SE; e tuttavia non permanenti. Sono rese disponibili nelle release delle funzionalità JDK per consentire il feedback degli sviluppatori in base agli utilizzi nel mondo reale, prima di diventare permanenti in una versione futura. Ciò offre inoltre ai fornitori di strumenti l’opportunità di lavorare per supportare le funzionalità prima che vengano finalizzate nello standard Java SE.

Le API nei moduli Incubator mettono API e strumenti non definitivi nelle mani di sviluppatori e utenti, in modo da poter raccogliere feedback che in ultima analisi miglioreranno la qualità della piattaforma Java.

Altri cambiamentiArriva Java 23

Oltre alle modifiche descritte nei JEP, ci sono molte modifiche minori elencate nelle note di rilascio che saranno di interesse per molti sviluppatori di applicazioni e amministratori di sistema. Queste includono la deprecazione di API obsolete e la rimozione di quelle precedentemente deprecate.

Alcuni degli aggiornamenti principali delle note di rilascio di Java 23:

Metodi della console con impostazioni locali esplicite ( JDK-8330276 )

Sono stati aggiunti i seguenti metodi alla classe java.io.Console che accettano un argomento java.util.Locale :

  • formato console pubblico(impostazioni locali, formato stringa, oggetto … argomenti)
  • Console pubblica printf(Locale locale, String format, Object … args)
  • String pubblico readLine(Impostazioni locali, Formato stringa, Oggetto … argomenti)
  • pubblico char[] readPassword(Impostazioni locali, Formato stringa, Oggetto … argomenti)


Gli utenti possono ora emettere la stringa o visualizzare il testo del prompt formattato con le impostazioni locali specificate, che possono essere indipendenti dalle impostazioni locali predefinite. Ad esempio, uno snippet System.console().printf(Locale.FRANCE, “%1$tY-%1$tB-%1$te %1$tA”, new Date()) visualizzerà: 2024-mai-16 jeudi

Aggiungere l’evento JFR jdk.SerializationMisdeclaration ( JDK-8275338 )

Il nuovo evento JFR jdk.SerializationMisdeclaration viene attivato in fase di esecuzione quando alcuni aspetti dei campi e dei metodi correlati alla serializzazione vengono dichiarati in modo non corretto. Abilitando jdk.SerializationMisdeclaration, JFR attiverà un evento per ogni aspetto dichiarato in modo non corretto di una classe serializzabile quando viene caricata nella JVM.

Ad esempio, se il metodo writeObject () su una classe Serializable ha la firma corretta ma è dichiarato involontariamente pubblico, non viene selezionato dal meccanismo di serializzazione. Ciò potrebbe sorprendere lo sviluppatore della classe. Per aiutare a diagnosticare tali problemi, gli eventi jdk.SerializationMisdeclaration dovrebbero essere abilitati.

Il profilo standard default.jfc non abilita questi eventi, mentre il profilo standard profile.jfc sì.

Supporto per la durata fino a un altro istante ( JDK-8331202 )

Un nuovo metodo è stato aggiunto alla classe java.time.Instant per ottenere la Duration fino all’Instant specificato. Il nuovo metodo: Instant.until(Instant) produce la stessa durata di Duration.between(Temporal, Temporal) ma è più facile da scoprire per gli utenti. Questo nuovo metodo è più comodo del metodo Instant.until(Temporal, TemporalUnit) in quanto il nuovo metodo restituisce direttamente una Duration senza una conversione di unità.

Opzioni thread e timestamp per la proprietà di sistema java.security.debug ( JDK-8051959 )

La proprietà di sistema java.security.debug accetta ora argomenti che aggiungono ID thread, nome thread, informazioni sul chiamante e informazioni di timestamp alle istruzioni di debug per tutti i componenti o per un componente specifico.

+timestamp può essere aggiunto alle opzioni di debug per stampare un timestamp per quell’opzione di debug. +thread può essere aggiunto alle opzioni di debug per stampare informazioni sul thread e sul chiamante per quell’opzione di debug.

Esempi: -Djava.security.debug=all+timestamp+thread aggiunge informazioni su timestamp e thread a ogni istruzione di debug generata.

-Djava.security.debug=properties+timestamp aggiunge informazioni di timestamp a ogni istruzione di debug generata per il componente delle proprietà.

È anche possibile specificare -Djava.security.debug=help, che visualizzerà un elenco completo dei componenti e degli argomenti supportati.

Abilita il controllo case-sensitive in ccache e keytab Kerberos Entry Lookup ( JDK-8331975 )

Quando si cerca una voce nella cache keytab o delle credenziali (ccache) per un’entità Kerberos, il nome dell’entità viene confrontato con il nome della voce senza fare distinzione tra maiuscole e minuscole.

Tuttavia, molte implementazioni Kerberos trattano i nomi dei principali come case-sensitive. Di conseguenza, se due principali hanno nomi che differiscono solo per le maiuscole e le minuscole, c’è il rischio di selezionare la voce keytab o ccache errata.

Una nuova proprietà di sicurezza denominata jdk.security.krb5.name.case.sensitive è stata introdotta per controllare il confronto dei nomi. Se questa proprietà è impostata su “true”, il confronto dei nomi principali durante la ricerca delle voci keytab e ccache sarà sensibile alle maiuscole e alle minuscole. Il valore predefinito è “false” per garantire la compatibilità con le versioni precedenti.

Inoltre, se viene specificata una proprietà di sistema con lo stesso nome, questa sovrascriverà il valore della proprietà di sicurezza definito nel file java.security.

Nuova sotto-opzione javac -Xlint per segnalare “Commenti doc sospesi” ( JDK-8303689 )

È disponibile una nuova sotto-opzione per l’opzione javac -Xlint, per rilevare problemi relativi al posizionamento dei commenti della documentazione nel codice sorgente.

Il nome della nuova sotto-opzione è dangling-doc-comments. La sotto-opzione può essere specificata esplicitamente (ad esempio, -Xlint:dangling-doc-comments) o implicitamente, come una di tutte le sotto-opzioni (ad esempio, -Xlint o -Xlint:all). Quando la sotto-opzione è abilitata, javac segnalerà eventuali commenti di documentazione inaspettati o fuori posto nelle vicinanze di una dichiarazione, come nelle seguenti situazioni:

  • un commento di documentazione per una classe di primo livello prima di qualsiasi dichiarazione di pacchetto o importazione;
  • un commento di documentazione per una dichiarazione che appare dopo il primo token di tale dichiarazione, ad esempio dopo eventuali annotazioni o altri modificatori per la dichiarazione; o
  • eventuali commenti di documentazione aggiuntivi prima di una dichiarazione, che altrimenti javac ignorerebbe.


Come con qualsiasi sotto-opzione per -Xlint, gli avvisi possono essere soppressi localmente, utilizzando un’annotazione @SuppressWarnings su una dichiarazione di inclusione, specificando i nomi delle sotto-opzioni per gli avvisi da sopprimere.

Migliorare la navigazione strutturale nella documentazione API ( JDK-8320458 )

La documentazione API generata dal doclet standard è ora dotata di funzionalità di navigazione avanzate, tra cui una barra laterale contenente un indice per la pagina corrente e una navigazione breadcrumb per l’elemento API corrente nell’intestazione della pagina.

Nella documentazione per classi e interfacce, le voci nel sommario possono essere filtrate utilizzando un campo di immissione testo nella parte superiore della barra laterale. Un pulsante nella parte inferiore della barra laterale consente di comprimere o espandere il sommario per la sessione corrente.

Modello per la creazione di un file di configurazione JAXP rigoroso ( JDK-8330542 )

Le future release di JDK continueranno a muoversi verso un’elaborazione XML più restrittiva per impostazione predefinita. Per aiutare gli sviluppatori a prepararsi a queste modifiche, questa release include un modello di file di configurazione JAXP , $JAVA_HOME/conf/jaxp-strict.properties.template, che specifica impostazioni di elaborazione XML più restrittive.

Infine, come tutte le release di funzionalità, JDK 23 include centinaia di aggiornamenti di prestazioni, stabilità e sicurezza, tra cui l’adattamento agli aggiornamenti e agli standard del sistema operativo e del firmware sottostanti. Gli utenti e gli sviluppatori di applicazioni solitamente traggono vantaggio da queste modifiche senza accorgersene, ma le informazioni su ciascuna di esse possono essere trovate nel tracker dei problemi di OpenJDK.

E la caratteristica costante, inclusa in tutte le versioni di JDK: la prevedibilitàArriva Java 23

JDK 23 è la 14a Feature Release consegnata puntualmente attraverso la cadenza di rilascio di sei mesi. Questo livello di prevedibilità consente agli sviluppatori di gestire facilmente l’adozione dell’innovazione grazie a un flusso costante di miglioramenti.

La capacità di Java di migliorare prestazioni, stabilità e sicurezza continua a renderlo il linguaggio di programmazione più popolare al mondo.

Oracle non offrirà supporto a lungo termine per JDK 23; forniremo aggiornamenti fino a marzo 2025, quando verrà sostituito da Oracle JDK 24.

Arriva Java 23, la community

Come nelle versioni precedenti , Java 23 è il risultato del contributo di molti individui e organizzazioni nella comunità OpenJDK: sviluppiamo Java tutti insieme!

Rapporto di correzione JDK 23

La velocità di modifica nel tempo delle release del JDK è rimasta pressoché costante per anni, ma con la cadenza semestrale il ritmo con cui vengono rilasciate funzionalità e miglioramenti pronti per la produzione è aumentato notevolmente.

Le modifiche in JDK 23 spaziano da nuove funzionalità significative a piccoli miglioramenti alla manutenzione di routine, correzioni di bug e miglioramenti della documentazione. Ogni modifica è rappresentata in un singolo commit per un singolo problema nel JDK Bug System.

Dei 28.724 problemi JIRA contrassegnati come risolti in Java 11 tramite Java 23 al momento della loro GA, 20.450 sono stati completati da persone che lavoravano per Oracle mentre 8.274 sono stati forniti da singoli sviluppatori e sviluppatori che lavoravano per altre organizzazioni. Esaminando i problemi e confrontando i dati dell’organizzazione dagli assegnatari si ottiene il seguente grafico delle organizzazioni che sponsorizzano lo sviluppo di contributi in Java:

In Java 23, dei 2.277 problemi JIRA contrassegnati come risolti, 1.608 sono stati risolti da Oracle, mentre 669 sono stati risolti da altri membri della comunità Java.

Oracle desidera ringraziare gli sviluppatori che lavorano per organizzazioni tra cui Alibaba, Amazon, Google, IBM, Intel, ISCAS, Microsoft, Red Hat, Rivos, SAP e Tencent per i loro notevoli contributi. Siamo anche grati di vedere i contributi di organizzazioni più piccole come Ampere Computing, Bellsoft, Loongson e NTT Data, così come di sviluppatori indipendenti che hanno contribuito collettivamente al 5% delle correzioni in Java 23.

Inoltre, vorremmo ringraziare le seguenti persone che hanno fornito preziosi feedback sulla qualità della build, segnalato bug di buona qualità o offerto aggiornamenti frequenti:

  • Sanne Grinovero (progetti Hibernate)
  • Yoann Rodière (progetti di ibernazione)
  • Stefano Cordio (AssertJ)
  • Rich Hillegas (Apache Derby)
  • Chris Hegarty (Elastico)


Inoltre, attraverso il programma OpenJDK Quality Outreach vorremmo ringraziare i seguenti progetti FOSS e le persone che hanno fornito un feedback eccellente sui test delle build di accesso anticipato di Java 23 per contribuire a migliorare la qualità della versione:

  • Formica Apache (Jaikiran Pai)
  • Apache Commons (Benedikt Ritter)
  • Avaje (Josiah Noel)
  • BNYMellon CodeKatas (Emilie Robichaud)
  • Lavoro Runr (Ronald Dehuysser)
  • RxJava (David Karnok)


Risorse – Arriva Java 23

Java continua a essere il linguaggio di programmazione n. 1 per le tendenze tecnologiche odierne. Come dimostra la consegna puntuale dei miglioramenti con Java 23, attraverso una pianificazione attenta e il coinvolgimento dell’ecosistema, la piattaforma Java è ben posizionata per lo sviluppo moderno e la crescita nel cloud.

Tieniti aggiornato con le novità e gli aggiornamenti:

  • Visitare Dev.java (il portale Oracle dedicato per ampliare le proprie conoscenze Java e la partecipazione alla community).
  • Visita Inside.java (notizie e opinioni del team Java di Oracle).
  • Ascoltando i podcast Inside.java (uno show audio per sviluppatori Java offerto direttamente dalle persone che creano Java in Oracle).
  • Ascoltando il Duke’s Corner Podcast (un programma audio che presenta storie personali, esperienze e competenze di personalità di spicco della comunità di Giava).
  • Guardare Inside.java Newscasts (un programma video che estende il podcast Inside.java).
  • Guardare Java su YouTube (video Java di Oracle per aiutarti ad ampliare le tue competenze Java).
  • Guardando JEP Café (l’esplorazione tecnica di Oracle sulle popolari proposte di miglioramento JDK).
  • Guardare Sip of Java (cortometraggi di 1 minuto di Oracle che offrono introduzioni ai miglioramenti Java meno noti).
  • Iscriversi alle mailing list di OpenJDK (per conoscere i progressi dei tuoi progetti OpenJDK preferiti).
  • Segui OpenJDK e Java su X.
  • Iscrivendosi alla newsletter Inside Java (una pubblicazione mensile che riassume molti degli aggiornamenti chiave sulla tecnologia Java e sulla community di Oracle).

(fonte)

Innovaformazione, scuola informatica specialistica promuove lo sviluppo e la formazione in Java per sviluppatori. Nell’offerta formativa rivolta alle aziende trovate alcuni cosi presenti sul nostro sito QUI.

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

Ti potrebbe interessare

Articoli correlati