JDK 10, decima edizione del Java Standard, viene rilasciata dagli sviluppatori come release a breve termine che continuerà a ricevere aggiornamenti per i prossimi 6 mesi. Questo significa che la prossima LTS (Long Term Support), JDK 11, sarà disponibile in settembre, nell'attesa possiamo approfittare delle nuove funzionalità di Java 10 che comprendono miglioramenti per la garbage collection, la compilazione e l'inferenza dei tipi.
Partiamo da quest'ultimo aspetto, cioè quello relativo alla local variable type inference, dove per "type inference" s'intende l'individuazione automatica del tipo di dato in un'espressione. Grazie a tale feature Java viene dotato di uno strumento con il quale estendere l'inferenza dei tipi anche alla dichiarazione delle variabili locali.
A ciò si aggiunga l'introduzione di un compilatore just-in-time in fase sperimentale, denominato Graal, utilizzabile su piattaforme Linux con architettura x64, la Parallel full garbage collection per il garbage collector G1 e l'ottimizzazione dei tempi di startup tramite una più efficace allocazione delle classi nell'archivio condiviso (class-data sharing).
Novità anche per Docker: quando viene eseguita in un sistema basato su Linux la Java Virtual Machine rileverà se si sta operando in un container. Informazioni come il numero di CPU coinvolte e la quantità totale di memoria allocata verranno estratte direttamente dalla JVM, senza dover interrogare la piattaforma ospitante. Sono state poi implementate nuove opzioni della JVM per consentire ad un utilizzatore di Docker di avere un maggior controllo sulla memoria di sistema e, nel contempo, sono stati corretti dei bug che influivano sull'esecuzione dei processi Java in Docker.
Interessante anche l'abilitazione di HotSpot per l'allocazione dell'object heap (la zona di memoria che contiene gli oggetti) in una memoria alternativa specificata dall'utente, come per esempio un modulo NVDIMM; un'opzione utile quando ci si trova a dover lavorare con architetture di memoria differenti tra loro. Andrebbero poi segnalati i nuovi metodi toUnmodifiableList, toUnmodifiableSet e toUnmodifiableMap, implementati nella classe Collectors del package Stream permettendo agli elementi di uno Stream di essere inseriti in una collection non modificabile.
Completiamo il quadro con il consolidamento dei repository JDK in un singolo repository, novità che semplificherà ulteriormente la gestione dei sorgenti, e con un avvio più rapido del jShell REPL tool che si rivelerà particolarmente vantaggioso nel caso di file contenenti un gran numero di snippet.
Via Oracle