La maggior parte degli sviluppatori e delle aziende sono ancora alla versione 8 di Java e non hanno migrato alle versioni 9 e 10 le cui release che si sono rapidamente succedute. Sicuramente un fattore per cui tale migrazione non è avvenuta è perchè le versioni 9 e 10 non hanno il supporto lungo e vengono supportate solo per 6 mesi.
La nuova versione 11 è la prima versione Long Term Support dopo la versione 8 e verrà supportata per i prossimi 3 anni.
Novità in questa release
JVM
La maggior parte delle JDK Enhancement Proposals (JEP) in questa versione riguardano il tweaking e il miglioramento delle prestazioni del JDK stesso e avrà un impatto relativamente ridotto sul lavoro quotidiano degli sviluppatori.
Altre features degne di nota sono: Il Flight Recorder, JEP 328, che fornirà un framework di raccolta dati a basso overhead per la risoluzione dei problemi delle applicazioni Java e degli HotSpot JVM e il profilo di heap a basso overhead che viene introdotto con il JEP 331 che permette di avere informazioni sugli oggetti allocati nello heap.
A parte questi due JEP, in questa versione ci sono 2 nuovi garbage collector . Il nuovo Epsilon GC (JEP 318) dovrebbe essere un’implementazione GC completamente passiva che gestisce l’allocazione della memoria anche se non implementa alcun meccanismo di recupero della memoria. Inoltre abbiamo il JEP 333 che introduce lo sperimentale ZGC , un garbage collector scalabile a bassa latenza.
Infine, questa nuova versione del JDK si dice che sia molto più “leggera” rispetto ai suoi predecessori perché molti moduli saranno disaccoppiati dalla piattaforma. I moduli Java EE e CORBA saranno rimossi, il motore JavaScript Nashorn sarà deprecato e anche gli strumenti Pack200 e API saranno fuori servizio.
Sembra quasi che la maggior parte dei cambiamenti in Java 11 sia la rimozione di alcune feature dalla piattaforma.
Linguaggio
A livello di cambiamenti del linguaggio non c’è molto da segnalare. Tuttavia, la caratteristica più interessante in Java 11 è la nuova sintassi con l’uso di var, per dichiarare le variabili locali nelle espressioni lambda, estendendo quindi l’uso della parola chiave var, introdotta nella versione 10 (JEP286).
La JEP 323, che permetterà l’uso della parola chiave var per dichiarare i parametri formali delle espressioni lambda implicitamente tipizzate, è il cambiamento più visibile in JDK 11 perché avrà l’impatto più diretto su come gli sviluppatori effettivamente scrivono il codice.
(var x, var y) -> x.process(y) // implicit typed lambda expression