E’ uscito Java 10: tutte le nuove funzionalità che devi conoscere

Con tanti aggiornamenti previsti per quanto riguarda il linguaggio Java, abbiamo deciso di affrontare tutti gli step ogni qualvolta Oracle deciderà di aggiornare il suo prodotto.

Mentre molte persone hanno deciso solo negli ultimi mesi di passare a Java 9 (alcuni addirittura devono ancora passare a Java 8!) nel frattempo entra in gioco la nuova versione di Java, il JDK 10.

Attualmente il download è disponibile sul sito Web di Oracle. Una vera è propria rivalsa per tutti coloro che attendevano da anni una “nuova pianificazione” delle versioni aggiornate, oggi finalmente divenuta realtà.

A differenza di qualche anno fa, infatti, adesso sarà possibile ottenere una nuova versione Java ogni sei mesi.

A primo impatto potrebbe sembrare un tempo molto limitato per aggiornamenti come quelli che riguardano le versioni Java (specie se molti, ancora oggi, preferiscono mantenere versioni obsolete), ma in realtà non è così.

Ad ogni modo, a parte il rilascio di una nuova versione che da oggi avverrà a cadenza semestrale, allo scadere di ogni triennio ci sarà invece una nuova versione LTS, che consiste in una sorta di “importante versione Java”.

La prossima versione di LTS, infatti, sarà Java 11, e dovrebbe essere disponibile già da settembre 2018.

Grazie a questa alternativa potrai quindi mirare direttamente alla prossima versione LTS, sfruttando l’aggiornamento dei tre anni piuttosto che quello semestrale, entrambi attualmente in vigore.

Tuttavia, anche se il rilascio di JDK 10 è stato appena annunciato, ci sono altre caratteristiche interessanti in arrivo che tutti dovrebbero conoscere.

Ecco alcuni punti chiave sulle nuove interessanti caratteristiche di Java 10.

Inferenza di tipo variabile locale (JEP 286)

Simile a JavaScript, Kotlin e Scala, ora Java avrà anche una parola chiave “var” che consentirà di dichiarare una variabile locale senza specificarne il tipo.

Quest’ultimo infatti sarà dedotto dal contesto. Ad esempio, quando dirai var name = “Java”, il compilatore saprà già che il tipo è String.

Si noti inoltre che la parola chiave “var” potrà essere utilizzata solo per variabili locali, ovvero variabili all’interno di metodi o blocchi di codice, non sarà possibile utilizzarla per la dichiarazione di variabili membro all’interno del corpo della classe. E, infine, non renderà Java un linguaggio tipizzato dinamicamente come Python.

Java, infatti, è ancora una lingua tipizzata in modo statico e una volta assegnato il tipo, non sarà possibile modificarlo. Ad esempio, var name = “Java” è OK, ma then name = 3; non è OK.

Come Sander Mak dice nel suo corso Pluarlsight Novità di Java 10, questa è una delle caratteristiche più accattivanti di Java 10: riduce la quantità di codice boilerplate necessaria per dichiarare le variabili locali in Java.

Versioni cadenzate (JEP 322)

Grazie alla nuova versione, Java ha adottato un nuovo programma di rilascio che avverrà come stabilito principalmente a cadenza semestrale.

Si è discusso molto sulla definizione di un approccio più pratico per le versioni future. Ad esempio molti hanno condiviso sin da subito la scelta del rilascio di nuove versioni ogni sei mesi, altri invece sono ancora adesso in totale disaccordo, lamentando il fatto del troppo poco tempo intercorso tra una versione JKD e l’altra.

Ad ogni modo, questa sarà la strada da seguire, con annessa pubblicazione LTS ogni tre anni.

La versione Java di aprile 2018 sarà JDK 10.0.1, la versione di luglio 2018 sarà denominata JDK 10.0.2 e così via.

uscito java 10

Interfaccia Garbage-Collector (JEP 304)

Questa è una delle più interessanti e utili funzionalità di Java 10. Grazie all’interfaccia Garbage-Collector verrà aumentato l’isolamento del codice di “diversi” garbage collector introducendo quindi un’interfaccia pulita per loro.

Ciò significa che sarà più facile escludere un GC da una build JDK e allo stesso tempo semplificare l’aggiunta di un nuovo GC senza influire sul codice base.

Sarà inoltre possibile consultare la memoria Java per ulteriori informazioni su Garbage Collection G1 e la differenza tra G1 e Concorrente Mark Sweep Garbage Collector.

GC parallelo completo per G1 (JEP 307)

Ecco un’altra interessante funzionalità che migliorerà le latenze G1 rendendo il GC completo e parallelo.

Nella versione di Java 9, infatti, G1 era stato creato come GC predefinito per JVM, progettato quindi per evitare il GC completo.

Ma nel momento in cui le raccolte concorrenti non possono recuperare memoria in maniera abbastanza veloce, finirebbero per ricadere su un GC completo e questo creerebbe un problema.

Questo cambiamento consentirà di “parallelizzare” l’intero algoritmo GC in modo che nell’improbabile eventualità di un GC completo G1, lo stesso numero di thread possa essere utilizzato come negli insiemi simultanei per migliorare le prestazioni generali.

Assegnazione degli heap su dispositivi di memoria alternativi (JEP 316)

Anche questa sembra una funzionalità davvero interessante.

L’assegnazione degli heap su dispositivi di memoria alternativi consentirà all’Hot di HotSpot di allocare l’heap di oggetti Java su un dispositivo di memoria alternativo, specificato dall’utente.

Con questa funzione, ad esempio, verranno assegnati dei processi a priorità più bassa per utilizzare la memoria NV-DIMM, invece di allocare i processi con priorità più alta alla DRAM in un ambiente multi-JVM.

Consolidare la “foresta” JDK in un singolo repository (JEP 296)

Questa nuova funzionalità di Java 10 è interamente dedicata al riordino alla “pulizia generale” combinando i numerosi repository della “foresta JDK” in un unico repository.

Certificati di root (JEP 319)

Questo sarà un altro importante cambiamento che Java 10 porterà con sè. Se si ricorda, JDK 10 è stato creato con la stretta collaborazione di Open JDK, e questo viene reso ancora più evidente da questa funzionalità.

Tramite questo cambiamento, infatti, verrà fornito un set predefinito di autorità di certificazione di root, che renderà le build di Open JDK più interessanti per gli sviluppatori.

Si ridurranno anche le differenze tra le build Open JDK e Oracle JDK e per concludere si ridurranno anche i componenti di sicurezza critici come TLS, i quali funzioneranno per impostazione predefinita nelle build Open JDK.

Compilatore JIT sperimentale basato su Java (JEP 317)

Questa è un’altra caratteristica interessante che consente al compilatore JIT basato su Java, Graal, di essere utilizzato come compilatore JIT sperimentale sulla piattaforma Linux / x64.

Se ricordi, Graal è stato già aggiunto in Java 9, ma con Java 10 potrai abilitarlo con i seguenti argomenti JVM:

XX: + UnlockExperimentalVMOptions -XX: + UseJVMCICompiler

Per chi non conoscesse Graal, si tratta di un nuovo compilatore JIT basato su Java, che è la base di un compilatore AOT (Ahead-of-Time) sperimentale.

Tieni presente però che è ancora in fase sperimentale e non dovresti usarlo per la produzione.

Thread-Handshake locali (JEP 312)

Questa funzionalità di Java 10 getta le basi per migliorare le prestazioni della VM rendendo possibile eseguire una richiamata sui thread delle applicazioni senza eseguire un punto di salvataggio VM globale.

Ciò significherebbe che la JVM potrebbe interrompere singoli thread e non tutti loro.

Ci sono diversi piccoli miglioramenti fatti come parte di questa funzione (o JEP 312) per migliorare le prestazioni della VM, ad esempio alcune barriere di memoria sono state rimosse dalla JVM e il blocco dei pregiudizi è stato migliorato interrompendo solo i singoli thread per revocare i bias.

Rimuovere lo strumento di generazione di intestazione nativa (JEP 313)

Questa è un’altra funzionalità di Java 10 che in particolare rimuoverà lo strumento javah dal JDK (uno strumento separato per generare i file di intestazione durante la compilazione del codice JNI) in quanto ciò può essere fatto tramite javac.

Puoi scaricare JDK 10 dal sito Web di Oracle per approfondire le nuove funzionalità.

Tuttavia potrai verificare anche diverse altre modifiche a basso livello e API, che potrai trovare nelle note di rilascio ufficiali di Oracle.

Contattaci per altre informazioni sul linguaggio di programmazione e per richiedere una consulenza Java.