Dopo sei mesi di sviluppo, Oracle ha rilasciato la piattaforma Java SE 19 (Java Platform, Standard Edition 19), utilizzando il progetto open source OpenJDK come implementazione di riferimento. Ad eccezione della rimozione di alcune funzionalità obsolete, Java SE 19 mantiene la compatibilità con le versioni precedenti della piattaforma Java: la maggior parte dei progetti Java scritti in precedenza funzionerà senza modifiche con la nuova versione. Le distribuzioni pronte per l'installazione di Java SE 19 (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 19 sviluppata nell'ambito del progetto OpenJDK è completamente open source con licenza GPLv2 con eccezioni GNU ClassPath, che consentono il binding dinamico con prodotti commerciali.
Java SE 19 è classificato come una versione con un ciclo di supporto regolare, con aggiornamenti che saranno forniti fino al rilascio successivo. In quanto ramo LTS (Long Term Support), è consigliabile utilizzare Java SE 17, i cui aggiornamenti verranno forniti fino al 2029. Ricordiamo che, a partire dal rilascio di Java 10, il progetto è passato a un nuovo processo di sviluppo, che prevede un ciclo di rilascio più breve. Le nuove funzionalità ora vengono sviluppate in un ramo master continuamente aggiornato, in cui vengono incluse le modifiche già pronte, e da cui si diramano rami per la stabilizzazione delle nuove versioni ogni sei mesi.
Tra le novità di Java 19 si possono notare:
- È stata proposta la supporto preliminare ai modelli di record (record pattern), che amplia la possibilità di matching introdotta in Java 16 per l'analisi dei valori delle classi di tipo record. Ad esempio: record Point(int x, int y) {} void printSum(Object o) { if (o instanceof Point(int x, int y)) { System.out.println(x+y); } }
- Nelle versioni per Linux è stato aggiunto il supporto per l'architettura RISC-V.
- È stata aggiunta la supporto preliminare per l'API FFM (Foreign Function & Memory), che consente l'interazione delle applicazioni Java con codice e dati esterni tramite chiamate a funzioni di librerie esterne e accesso alla memoria al di fuori della JVM.
- È stato introdotto il supporto per i thread virtuali, che sono thread leggeri che semplificano notevolmente la scrittura e la manutenzione di applicazioni multithread ad alte prestazioni.
- È stata proposta la quarta implementazione preliminare dell'API Vector, che fornisce funzionalità per i calcoli vettoriali eseguiti utilizzando le istruzioni vettoriali dei processori x86_64 e AArch64 e consente di applicare simultaneamente operazioni a più valori (SIMD). A differenza delle possibilità di auto-vettorizzazione delle operazioni scalari offerte dal compilatore JIT HotSpot, la nuova API consente di gestire esplicitamente la vettorizzazione per l'elaborazione parallela dei dati.
- È stata aggiunta una terza implementazione sperimentale del matching basato su pattern all'interno delle espressioni "switch", che consente di utilizzare nei case valori flessibili che coprono una serie di valori, per i quali in precedenza era necessario utilizzare catene complesse di espressioni "if...else". Object o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
- È stata aggiunta un'API sperimentale per il parallelismo strutturato, che semplifica lo sviluppo di applicazioni multithread gestendo più compiti eseguiti in thread diversi come un unico blocco.
Fonte: opennet.ru
