Java 9 est là: tout ce que vous devez savoir

Java 9 - officiellement Java Platform Standard Edition version 9 - est enfin là, et son Java Development Kit (JDK) est disponible pour les développeurs en téléchargement.

Il a plusieurs nouvelles fonctionnalités importantes mais controversées, mais c'est aussi le dernier de la ligne pour l'ancien style de livraison Java.

Où télécharger le JDK Java 9

Oracle a publié le JDK Java SE 9 et la documentation à télécharger par les développeurs.

Les nouvelles fonctionnalités clés de Java 9

Lancé près de trois ans après Java SE 8, Java SE 9 comporte plusieurs changements architecturaux clés, ainsi que de nombreuses améliorations.

La modularité de Java 9 change la donne

Les nouvelles capacités de modularité controversées, basées sur Project Jigsaw, ne manqueront pas de piquer l'intérêt des magasins Java de pointe qui veulent voir ce que JDK 9 a à offrir maintenant, même si les magasins plus conservateurs décident d'attendre que la modularité mûre.

La modularité - sous la forme du Java Platform Module System - divise le JDK en un ensemble de modules à combiner lors de l'exécution, de la compilation ou de la construction. La modularité a été qualifiée de changement «transitif», permettant de comprendre les dépendances entre les modules.

La modularité de Java 9 est censée permettre aux développeurs d'assembler et de maintenir plus facilement des applications sophistiquées. En outre, cela devrait permettre à Java de mieux évoluer vers des appareils plus petits tout en améliorant la sécurité et les performances.

Les aspects de modularité de Java 9 incluent l'empaquetage d'applications, la modularisation du JDK lui-même et la réorganisation du code source en modules. Le système de construction est amélioré pour compiler les modules et appliquer les limites des modules au moment de la construction. Les images JDK et Java Runtime Environment (JRE) sont restructurées pour gérer les modules. De plus, les contrôles de l'interface utilisateur JavaFX et les API CSS sont désormais accessibles pour la modularité.

Une multitude de configurations sont prises en charge; par conséquent, l'évolutivité, la sécurité et les performances des applications doivent être améliorées. Une mise à l'échelle plus facile de Java vers les petits périphériques est un moteur clé de l'effort modulaire.

Grâce à la modularité, les développeurs seront mieux à même de créer et de maintenir des bibliothèques et des applications volumineuses pour Java SE (Standard Edition) et Java EE (Enterprise Edition). Mais pendant le développement de Java 9, Oracle, IBM, Red Hat et d'autres ont eu de gros désaccords sur la manière exacte de faire un changement aussi radical dans la plate-forme. Le système de modules lui-même a été rejeté en mai, pour être approuvé par un deuxième vote en juin, après des progrès.

Même avec l'accord des principaux fournisseurs Java, la controverse demeure quant à savoir si la modularité fera beaucoup de bien aux développeurs Java, certains experts disant oui et d'autres refusant. Quoi qu'il en soit, Java 9 est désormais modulaire.

Pour faciliter la migration vers Java 9 modulaire, Java 9 autorise un accès réflexif illégal pour le code sur le chemin de classe, utilisé par le JRE pour rechercher des classes et des fichiers de ressources. Cette fonctionnalité ne sera pas autorisée après Java 9.

Améliorations du compilateur pour le code Java 9

La mise à niveau de Java 9 propose plusieurs nouvelles fonctionnalités pour la compilation de code, dont la principale est la compilation AoT. Toujours dans une phase expérimentale, cette fonctionnalité permet la compilation de classes Java en code natif avant d'être lancées dans la machine virtuelle. Cette fonctionnalité est destinée à améliorer le temps de démarrage des applications petites et grandes, avec un impact limité sur les performances de pointe.

Les compilateurs JIT (Just-in-time) sont rapides, mais les programmes Java sont devenus si volumineux qu'il faut beaucoup de temps au JIT pour se réchauffer complètement, laissant certaines méthodes Java non compilées et affaiblissant les performances. La compilation anticipée vise à résoudre ces problèmes.

Mais Dmitry Leskov, directeur marketing chez le fournisseur de technologie Java Excelsior, s'inquiète du fait que la technologie de compilation à l'avance ne soit pas assez mature et souhaite qu'Oracle ait attendu Java 10 pour une version plus solide.

Java 9 offre également la deuxième phase du déploiement de la compilation intelligente d'Oracle. Cette fonctionnalité consiste à améliorer la s javac stabilité et la portabilité de l'  outil afin qu'il puisse être utilisé par défaut dans la JVM (Java Virtual Machine). L'outil sera également généralisé afin de pouvoir être utilisé pour de grands projets en dehors du JDK. JDK 9 a également mis à jour le  javac compilateur afin qu'il puisse compiler des programmes Java 9 à exécuter sur certaines anciennes versions de Java.

Une autre fonctionnalité de compilation nouvelle - mais expérimentale - est l'interface du compilateur JVM au niveau Java (JVMCI). Cette interface permet à un compilateur écrit en Java d'être utilisé comme compilateur dynamique par la JVM. L'API de JVMCI fournit des mécanismes pour accéder aux structures de VM, installer le code compilé et se connecter au système de compilation JVM.

L'écriture d'un compilateur JVM en Java devrait permettre un compilateur de haute qualité, plus facile à maintenir et à améliorer que les compilateurs existants écrits en C ou C ++. En conséquence, les compilateurs écrits en Java lui-même devraient être plus faciles à maintenir et à améliorer. Parmi les autres efforts existants pour activer les compilateurs en Java, citons le projet Graal et le projet Metropolis.

Une nouvelle capacité de contrôle du compilateur est destinée à fournir un contrôle précis et dépendant du contexte de la méthode des compilateurs JVM, permettant aux développeurs de modifier les options de contrôle du compilateur à l'exécution sans dégradation des performances. L'outil permet également des solutions de contournement pour les bogues du compilateur JVM.

REPL arrive enfin à Java 9

Java 9 dispose d'un outil REPL (read-eval-print loop) - un autre objectif à long terme pour Java qui devient réel dans cette version, après des années de développement sous Project Kulia.

Appelé jShell, le REPL de Java 9 évalue de manière interactive les instructions et expressions déclaratives. Les développeurs peuvent obtenir des commentaires sur les programmes avant la compilation en entrant simplement quelques lignes de code.

Les capacités de l'outil de ligne de commande incluent la saisie semi-automatique des tabulations et l'ajout automatique des points-virgules de terminal nécessaires. L'API jShell permet la fonctionnalité jShell dans les IDE et d'autres outils, bien que l'outil lui-même ne soit pas un IDE.

L'absence de REPL a été citée comme une raison pour laquelle les écoles s'éloignent de Java. (Des langages tels que Python et Scala ont depuis longtemps une REPL.) Mais le fondateur du langage Scala, Martin Odersky, s'interroge sur l'utilité d'une REPL en Java, affirmant que Java est orienté instruction alors que les REPL sont orientés expression.

Améliorations de l'API Streams dans Java 9

Les flux en Java permettent aux développeurs d'exprimer des calculs afin que le parallélisme des données puisse être exploité efficacement. La capacité Stream de Java 8 permet de traiter les données de manière déclarative tout en exploitant les architectures multicœurs.

Dans Java 9, l'API Streams ajoute des méthodes pour prendre et supprimer conditionnellement des éléments de Stream, itérer sur des éléments Stream et créer un flux à partir d'une valeur Nullable tout en développant l'ensemble des API Java SE pouvant servir de sources Streams.

Le cache de code peut être divisé dans Java 9

JDK 9 permet de diviser le cache de code en segments pour améliorer les performances et autoriser des extensions telles que le verrouillage fin. Les résultats devraient être des temps de balayage améliorés en raison des itérateurs spécialisés ignorant le code non-méthode; séparer le code non-méthode, profilé et non profilé; et l'amélioration du temps d'exécution pour certains benchmarks. 

Meilleur support JavaScript dans Java 9 via Project Nashorn

Project Nashorn, qui fournit un environnement d'exécution JavaScript léger pour Java, est en cours d'amélioration dans le JDK 9. Le projet Nashorn était un effort pour implémenter un environnement d'exécution JavaScript performant mais léger en Java, faisant suite au projet Rhino qui a été lancé chez Netscape. Le projet Nashorn a été chargé d'activer l'intégration de JavaScript dans les applications Java. Il a fourni à Java un moteur JavaScript dans JDK 8.

JDK 9 inclut une API d'analyseur pour l'arborescence de syntaxe ECMAScript de Nashorn. L'API permet l'analyse de code ECMAScript par les IDE et les frameworks côté serveur sans dépendre des classes d'implémentation internes de Project Nashorn.

L'API client HTTP / 2 arrive à Java 9

L'API client bêta HTTP / 2 est arrivée à JDK 9, implémentant en Java la mise à niveau vers le protocole HTTP principal du Web. WebSocket est également pris en charge par l'API.

L'API HTTP / 2 peut remplacer l'API HttpURLConnection, qui a rencontré des problèmes, notamment en étant conçue avec des protocoles désormais obsolètes, antérieurs à HTTP / 1, trop abstraite et difficile à utiliser.

Prise en charge améliorée de HTML5 et Unicode dans Java 9

Dans JDK 9, l'outil de documentation Javadoc est amélioré pour générer un balisage HTML5. La norme de codage Unicode 8.0, qui ajoute 8 000 caractères, 10 blocs et six scripts, est également prise en charge.

L'API de sécurité DTLS est ajoutée à Java 9

Pour la sécurité, Java 9 ajoute une API pour DTLS (Datagram Transport Layer Security). Le protocole a été conçu pour empêcher l'écoute clandestine, la falsification et la falsification de messages dans les communications client / serveur. Une implémentation est fournie pour les modes client et serveur.

Ce que Java 9 désapprouve et supprime

Java 9 rend obsolète ou supprime plusieurs fonctionnalités qui ne sont plus en vogue. Le principal d'entre eux est l'API Applet, qui est obsolète. Il est devenu démodé maintenant que les fabricants de navigateurs soucieux de la sécurité ont supprimé la prise en charge des plug-ins de navigateur Java. L'avènement du HTML5 a également contribué à leur disparition. Les développeurs sont désormais guidés vers des alternatives telles que Java Web Start, pour lancer des applications à partir d'un navigateur ou des applications installables. 

L'outil appletviewer est également obsolète.

Java 9 désapprouve également le garbage collector Concurrent Mark Sweep (CMS), avec la prise en charge de cesser dans une version ultérieure. L'objectif est d'accélérer le développement d'autres garbage collector dans la machine virtuelle HotSpot. Le garbage collector G1 à faible pause est destiné à remplacer à long terme CMS.

Pendant ce temps, les combinaisons de récupération de place précédemment déconseillées dans JDK 8 sont supprimées dans JDK 9. Celles-ci incluent des combinaisons rarement utilisées telles que Incremental CMS, ParNew + SerialOld et DefNew + CMS, qui ont ajouté une complexité supplémentaire à la base de code du ramasse-miettes.

Java 9 élimine également les avertissements Java sur les instructions d'importation, pour aider à éliminer les grandes bases de code des avertissements de charpie. Avec ces bases de code, les fonctionnalités obsolètes doivent souvent être prises en charge pendant un certain temps, mais l'importation d'une construction obsolète ne justifie pas un message d'avertissement si les utilisations de la construction sont intentionnelles et supprimées.

La possibilité de sélectionner le JRE au moment du lancement via la fonction Multiple JRE (mJRE) est également supprimée dans Java 9. Cette fonctionnalité a rarement été utilisée, a compliqué la mise en œuvre du lanceur Java et n'a jamais été entièrement documentée lors de ses débuts dans JDK 5.

Oracle a supprimé l'agent JVM TI (Tool Interface) hprof (Heap Profiling), qui a été remplacé dans la JVM. L'outil jhat a également été supprimé, rendu obsolète par des visualiseurs et analyseurs de tas supérieurs.

Java 9 est la fin de sa ligne alors que la nouvelle ligne Java 9 commence

On pourrait dire que Java 9 sort avec un bang, avec toutes les nouvelles fonctionnalités. Oracle a récemment révélé que Java 9 est le dernier du genre, en termes de désignation et de temps écoulé entre les versions majeures.

À partir de maintenant, Java devrait avoir une cadence de publication de six mois, avec la prochaine version majeure, appelée Java 18.3, prévue pour mars 2018, suivie de Java 18.9 six mois plus tard.

La nouvelle cadence de version de Java signifie également que JDK 9 ne sera pas désigné comme une version de support à long terme. Au lieu de cela, la prochaine version à long terme sera Java 18.9.

La cadence de sortie plus rapide de Java signifie que les développeurs n'auront pas à attendre aussi longtemps pour les versions majeures. kinks, a déclaré Simon Maple, directeur du plaidoyer Java chez le fournisseur d'outils Java ZeroTurnaround.