JDK 10: Nouveautés de Java 10

JDK 10, une implémentation de Java Standard Edition 10, a été publié le 20 mars 2018. Les principales améliorations incluent des types de variables locales ainsi que des améliorations pour le garbage collection et la compilation.

JDK 10 devrait être une version à court terme et les mises à jour publiques de JDK 10 devraient se terminer dans six mois. Le prochain JDK 11, attendu en septembre, sera une version de support à long terme (LTS) de Java. Les versions LTS sont attendues tous les trois ans.

Oracle a défini une cadence de publication de six mois pour les versions Java. Il était prévu de nommer cette mise à niveau et ses successeurs en fonction de l'année et du mois de la sortie, la première version s'appelant Java 18.3. Mais ces plans ont été abandonnés après que des objections aient été soulevées.

Où télécharger Java JDK 10

Vous pouvez télécharger le JDK 10 à partir du site Web d'Oracle.

Fonctionnalités nouvelles et améliorées du JDK 10

Les principales fonctionnalités du JDK 10 incluent:

  • Inférence de type de variable locale, pour améliorer le langage Java afin d'étendre l'inférence de type aux déclarations de variables locales avec des initialiseurs.
  • Collecte de mémoire complète parallèle pour le garbage collector G1, pour améliorer les latences les plus défavorables.
  • Partage de données de classe d'application pour optimiser le temps de démarrage et l'empreinte. La fonctionnalité de partage de données de classe existante est étendue afin que les classes d'application puissent être placées dans l'archive partagée.
  • Un compilateur juste-à-temps expérimental, Graal, peut être utilisé sur la plate-forme Linux / x64.
  • Prise de conscience de Docker. Lorsqu'elle s'exécute sur des systèmes Linux, la machine virtuelle Java (JVM) saura si elle s'exécute dans un conteneur Docker. Les informations spécifiques au conteneur - le nombre de processeurs et la mémoire totale allouée au conteneur - seront extraites par la JVM au lieu d'interroger le système d'exploitation. (Le nombre de processeurs disponibles pour le processus Java est calculé à partir d'ensembles, de partages ou de quotas de processeurs spécifiés.)
  • Trois nouvelles options JVM, pour donner aux utilisateurs de conteneurs Docker un meilleur contrôle sur la mémoire système.
  • Correction de bogue pour corriger le mécanisme d'attachement lors de la tentative d'attachement d'un processus hôte à un processus Java qui se trouve dans un conteneur Docker.
  • Temps de démarrage plus courts pour l'outil jShell REPL, en particulier lorsqu'un fichier de démarrage avec de nombreux extraits de code est utilisé.
  • Nouvelles API pour mieux permettre la création de collections non modifiables. Le copyOf, Set.copyOf, et Map.copyOfméthodes créer de nouvelles instances de collecte de cas existants. Les nouvelles méthodes toUnmodifiableList, toUnmodifiableSetet toUnmodifiableMapont été ajoutés à la Collectorsclasse dans le package Stream, permettant aux éléments d'un flux à recueillir dans une collection non modifiable.
  • Une inférence de type à variable locale, pour améliorer le langage afin d'étendre l'inférence de type aux variables locales. L'intention est de réduire la «cérémonie» associée au codage tout en maintenant un engagement envers la sécurité de type statique.
  • Une interface de ramasse-miettes propre pour améliorer l'isolation du code source de différents ramasse-miettes. Les objectifs de cet effort incluent une meilleure modularité pour le code de récupération de place interne dans la machine virtuelle HotSpot et faciliter l'ajout d'un nouveau récupérateur de mémoire à HotSpot.
  • Garbage collection complète parallèle pour le garbage collector G1. L'intention est d'améliorer les latences les plus défavorables en implémentant le parallélisme.
  • Activation de HotSpot pour allouer le tas d'objets sur un autre périphérique de mémoire, tel qu'un module de mémoire NVDIMM, spécifié par l'utilisateur. Cette fonctionnalité prévoit que les futurs systèmes peuvent avoir des architectures de mémoire hétérogènes.
  • Permettre au compilateur juste à temps basé sur Java Grall d'être utilisé de manière expérimentale sur la plate-forme Linux / x64.
  • Consolidation des référentiels de la forêt JDK en un référentiel unique, pour rationaliser le développement. La base de code jusqu'à présent a été divisée en plusieurs dépôts, ce qui peut poser des problèmes avec la gestion du code source.
  • Partage de données de classe d'application, pour réduire l'encombrement en partageant des métadonnées de classe communes entre les processus. Le temps de démarrage est également amélioré.
  • Prise de contact locale des threads, pour exécuter un rappel sur les threads sans effectuer de safepoint VM global. Les threads individuels peuvent être arrêtés au lieu de tous les threads ou pas de threads.
  • Fourniture d'un ensemble par défaut de certificats d'autorité de certification racine dans le JDK. L'objectif est d'ouvrir les certificats racine dans le programme Java SE Root CA d'Oracle pour rendre les builds OpenJDK plus attrayants pour les développeurs.

La feuille de route Java à long terme

Voici ce qu'Oracle a dit est à l'étude pour les versions suivantes et ultérieures de Java SE:

  • Le projet Amber, qui a été un incubateur pour des fonctionnalités de langage plus petites et axées sur la productivité qui incluent l'inférence de type à variable locale, pour réduire la cérémonie associée à l'écriture du code Java; des énumérations améliorées, pour améliorer l'expressivité de la construction enum en autorisant des variables de type dans les énumérations et en effectuant une vérification de type plus précise pour les constantes d'énumération; et les restes lambda, pour améliorer la convivialité des références lambda et méthodes.
  • Projet Panama, pour interconnecter JVM et code natif, avec appel de fonction native depuis la JVM et accès natif aux données depuis la JVM.
  • Valhalla, un projet d'incubateur pour Java VM avancé et candidats de fonctionnalités de langage, y compris les types de valeur et la spécialisation générique.
  • Project Loom, pour réduire la complexité de l'écriture d'applications simultanées. Le plan appelle à ajouter des implémentations de threads alternatives en mode utilisateur, des continuations délimitées et d'autres constructions impliquant la manipulation de la pile d'appels. L'objectif principal de cette proposition est de proposer une implémentation alternative de threads, gérée par des ordonnanceurs écrits en Java. Le modèle de programmation Java des threads Java ordinaires serait préservé tout en améliorant les performances et en réduisant l'encombrement.

Avec le nouveau calendrier de publication de six mois, les fonctionnalités qui manquent une version peuvent être retardées de six mois seulement, lorsque la prochaine version sortira. Au-delà de ce qui a été annoncé pour JDK 10, Oracle ne s'est pas engagé à quand l'une des nouvelles fonctionnalités proposées sera réellement disponible en Java.