Oracle ha annunciato la disponibilità di Java 22, l'ultima versione del linguaggio di programmazione e della piattaforma di sviluppo numero uno. Java 22 (Oracle JDK 22) offre migliaia di miglioramenti in termini di prestazioni, stabilità e sicurezza, per aiutare gli sviluppatori ad aumentare la produttività, guidare l'innovazione e accelerare la crescita delle loro organizzazioni. Questi includono miglioramenti al linguaggio Java, alle sue API e alle prestazioni, e agli strumenti inclusi nel Java Development Kit (JDK).

L'ultimo JDK fornisce aggiornamenti e miglioramenti con 12 JDK Enhancement Proposals (JEPs). Il JDK 22 offre i miglioramenti linguistici di OpenJDK Project Amber (Dichiarazioni prima di super[?], Variabili e modelli senza nome, Modelli di stringhe e Classi dichiarate implicitamente e Metodi principali di istanza); miglioramenti del Progetto Panama (API per funzioni e memorie straniere e API per vettori); funzionalità relative al Progetto Loom (Concorrenza strutturata e Valori con scopa); funzionalità di librerie e strumenti fondamentali (API per file di classe, Avvio di programmi di codice sorgente multi-file e Raccoglitori di flussi); e aggiornamenti delle prestazioni (Region Pinning per G1). Gli aggiornamenti significativi forniti in Java 22 sono: Caratteristiche del Progetto Amber: JEP 447: Dichiarazioni prima di super(?): offre agli sviluppatori la libertà di esprimere il comportamento dei costruttori.

Consentendo alle dichiarazioni che non fanno riferimento all'istanza creata di apparire prima dell'invocazione esplicita di un costruttore, questa funzione consente una collocazione più naturale della logica che deve essere fattorizzata in metodi statici ausiliari, costruttori intermedi ausiliari o argomenti del costruttore. Inoltre, conserva la garanzia esistente che i costruttori vengano eseguiti in ordine top-down durante l'istanziazione della classe, contribuendo a garantire che il codice nel costruttore di una sottoclasse non possa interferire con l'istanziazione della superclasse. Inoltre, questa funzione non richiede alcuna modifica alla Java Virtual Machine (JVM) e si basa solo sull'attuale capacità della JVM di verificare ed eseguire il codice che appare prima delle invocazioni esplicite del costruttore all'interno dei costruttori.

JEP 456: Variabili senza nome e modelli: Aiuta a migliorare la produttività degli sviluppatori migliorando il linguaggio Java con variabili e modelli senza nome, che possono essere utilizzati quando le dichiarazioni di variabili o i modelli annidati sono necessari ma non vengono mai utilizzati. Questo riduce le opportunità di errore, migliora la leggibilità dei modelli di record e aumenta la manutenibilità di tutto il codice. JEP 459: Modelli di stringa (seconda anteprima): semplifica lo sviluppo di programmi Java rendendo più facile l'espressione di stringhe che includono valori calcolati in fase di esecuzione, migliorando anche la sicurezza dei programmi che compongono stringhe da valori forniti dall'utente e li passano ad altri sistemi. Inoltre, la leggibilità delle espressioni mescolate al testo è migliorata e i valori non stringa calcolati dal testo letterale e dalle espressioni incorporate possono essere creati senza dover passare attraverso una rappresentazione stringa intermedia.

JEP 463: Classi dichiarate implicitamente e metodi principali di istanza (seconda anteprima): aiuta ad accelerare l'apprendimento, offrendo un passaggio agevole alla programmazione Java, per consentire agli studenti di scrivere i loro primi programmi senza dover comprendere le caratteristiche del linguaggio progettate per programmi di grandi dimensioni. Con questa funzione, gli educatori possono introdurre i concetti in modo graduale e gli studenti possono scrivere dichiarazioni semplificate per programmi a classe singola e ampliare senza problemi i loro programmi per utilizzare funzioni più avanzate, man mano che le loro competenze crescono. Caratteristiche del Project Loom: JEP 462: Concorrenza strutturata (seconda anteprima): aiuta gli sviluppatori a semplificare la gestione e la cancellazione degli errori e a migliorare l'osservabilità, introducendo un'API per la concomitanza strutturata. Questo aiuta a promuovere uno stile di programmazione concorrente che può eliminare i rischi comuni derivanti dalla cancellazione e dall'arresto?

come le perdite di thread e i ritardi di cancellazione? e migliora l'osservabilità del codice concorrente. JEP 464: Scoped Values (Seconda Anteprima): aiuta ad aumentare la facilità d'uso, la comprensibilità, le prestazioni e la robustezza dei progetti degli sviluppatori, consentendo la condivisione di dati immutabili all'interno e tra i thread.

Caratteristiche del Progetto Panama: JEP 454: Foreign Function & Memory API: aumenta la facilità d'uso, la flessibilità, la sicurezza e le prestazioni per gli sviluppatori, introducendo un'API che consente ai programmi Java di interoperare con codice e dati esterni al runtime Java. Invocando in modo efficiente funzioni estranee, come il codice al di fuori della Java Virtual Machine, e accedendo in modo sicuro alla memoria estranea (cioè la memoria non gestita dalla JVM), la nuova API consente ai programmi Java di chiamare librerie native e di elaborare dati nativi senza richiedere la Java Native Interface. JEP 460: API vettoriale (Settimo Incubatore): consente agli sviluppatori di ottenere prestazioni superiori alle computazioni scalari equivalenti, introducendo un'API per esprimere computazioni vettoriali che si compilano in modo affidabile in fase di esecuzione in istruzioni vettoriali sulle architetture CPU supportate.

Caratteristiche delle librerie e degli strumenti principali: JEP 457: API per file di classe (anteprima): Aiuta gli sviluppatori a migliorare la produttività, fornendo un'API standard per l'analisi, la generazione e la trasformazione dei file di classe Java. JEP 458: Avvio di programmi con codice sorgente multiplo: consente agli sviluppatori di scegliere se e quando configurare uno strumento di compilazione, migliorando il lanciatore di applicazioni Java per consentirgli di eseguire un programma fornito come file multipli di codice sorgente Java. JEP 461: Stream Gatherers (Anteprima): aiuta gli sviluppatori a migliorare la produttività migliorando l'API Stream per supportare operazioni intermedie personalizzate, che consentiranno alle pipeline di stream di trasformare i dati in modi che non sono facilmente realizzabili con le operazioni intermedie integrate esistenti.

Rendendo le pipeline di flusso più flessibili ed espressive e consentendo alle operazioni intermedie personalizzate di manipolare flussi di dimensioni infinite, questa funzione consente agli sviluppatori di diventare più efficienti nella lettura, scrittura e manutenzione del codice Java.