Trois ans après la sortie de Java 8, une nouvelle version est annoncée pour fin septembre 2017, après plusieurs dates de release repoussées notamment à cause du projet Jigsaw. Les évolutions ? Un environnement modulaire beaucoup plus performant ainsi qu’une collection de nouvelles caractéristiques attrayantes.
La Java Platform Module System (JPMS) est la plus grande nouveauté de Java 9. Configuration fiable et encapsulation forte sont ses deux principales promesses. Reposant entièrement sur le projet Jigsaw, le nouveau JDK est maintenant entièrement modulaire. Dans Java 9, un module se définira donc en trois points : module name (nom) + exports (ce qu’il exporte) + requires (ce dont il a besoin pour fonctionner).
Deux nouvelles interfaces
La première assure le support de HTTP 2.0 et des web sockets (HHTP 2 Client API) et la seconde permet une meilleure intégration des processus non-Java (Process API Updates).
Les nouvelles fonctionnalités
JEP 201 : Code source modularisé
Ce JEP est la première étape du projet Jigsaw. Il vise à concevoir et mettre en œuvre un système de module standard pour la plate-forme Java SE et à appliquer ce système à la plate-forme elle-même et au JDK. Ses principaux objectifs sont de rendre les implémentations de la plate-forme plus facilement évolutives jusqu’aux petits périphériques, d’améliorer la sécurité et la maintenabilité, d’améliorer les performances des applications et de fournir aux développeurs de meilleurs outils de programmation.
JEP 102 : Upgrade de l’API processus
Cette API est améliorée afin de mieux contrôler et gérer les processus du système d’exploitation en question. Cette amélioration permet l’accès aux informations sur les processus telles que l’heure de début du processus, sa durée d’utilisation ou son ID.
JEP 110 : HTTP 2
Fini la vieille library HttpURLConnection et bienvenue à l’API http 2 Client ! Elle peut être utilisée dorénavant en asynchrone, tout comme une panoplie de fonctionnalités.
JEP 143 : Upgrade Contended Locking
Elle va permettre d’accroître les performances et limiter les conflits entre les threads : réorganisation des champs et alignement des lignes de cache optimisés, accélération PlatformEvent ::unpark(), opérations d’entrée/sortie plus rapides, méthodes notify et notifyAll boostées.
JEP 197 : Segmentation du cache code
Grâce à cette nouveauté, au lieu d’avoir un seul segment de code, le cache du code est segmenté en plusieurs codes distincts : cela permet de séparer le code avec des propriétés différentes. Avantages : temps de balayage plus court (le code non-méthode sera ignoré), temps d’exécution de certaines compilations réduit, de même pour le temps de fragmentation du code hautement optimisé, et enfin une réduction significative du nombre d’erreurs iTLB et iCache.
JEP 222 : the Java Shell
Cette fonctionnalité est un petit Shell qui permet d’évaluer des instructions Java. Il propose également une API qui permet d’évaluer des instructions dans du code Java.
JEP 236 : l’API d’analyse Nashorn
Nashorn est un moteur JavaScript développé en Java par Oracle. Il met en œuvre un runtime JavaScript léger et performant avec une JVM native.
Cette API permettra l’analyse de code ECMAScript par des programmes tels que les IDE (comme NetBeans) et les Framework côté serveur, sans que ces programmes ne dépendent des classes internes de Nashorn.
Le nouveau fichier Javadoc contient la documentation des interfaces et des classes du nouveau package jdk.nashorn.api.tree. Les principales classes de cette API sont ParserFactory et ParserFactoryImpl.
JEP 251 : l’API images multi-résolution
L’objectif est de définir une API d’images multi-résolution afin que les images avec des variantes de résolution puissent être facilement manipulées et affichées.
JEP 267 : Unicode 8.0
Les API de plateforme vont être mises à niveau car il va falloir prendre en charge la version d’Unicode 8.0. Les caractères et les chaînes de caractère seront désormais dans le package java.lang. NumericShaper sera dans le package java.awt.font et Bidi, Breklterator et Normalizer seront dans le package java.text.
JEP 268 : catalogues XML
Cette API prend en charge la norme OASIS XML Catalogues v1.1. Les catalogues XML sont utiles pour résoudre des références externes dans XML/XSD/XSL, supprimant ainsi la nécessité de récupérer des ressources externes de manière répétitive.
JEP 272 : le bureau
Cette nouvelle API permet d’accéder aux fonctionnalités du bureau spécifiques au système d’exploitation concerné telles que la connexion/déconnexion et le verrouillage d’écran et les interactions avec la barre de tâches.
JEP 290 : le filtrage
Elle permettra le filtrage des flux entrants de données de sérialisation d’objet, afin d’améliorer à la fois la sécurité et la robustesse. Pour chaque nouvel objet du flux, le filtre est appelé, avec la classe de l’objet, avant que l’objet ne soit instancié et désérialisé. Pour chaque tableau, qu’il s’agisse d’un tableau de primitives, d’un tableau de chaînes ou d’un tableau d’objets, le filtre est appelé avec la classe array et la longueur du tableau. Pour chaque référence à un objet déjà lu dans le flux, le filtre est appelé pour qu’il puisse vérifier la profondeur, le nombre de références et la longueur du flux.
JEP 289 : Applet obsolète
A savoir : l’API Applet n’est plus utile car les navigateurs web ne prennent plus en charge les plug-in Java. Cependant elle n’est pas supprimée mais seulement obsolète. L’annotation @Deprecated est ajoutée aux classes concernées.
Java 9 semble tenir ses promesses après 3 ans d’attente. Les nouvelles fonctionnalités annoncées viennent confirmer l’évolution croissante de la performance pour Java 9. Chez LesJeudis, nous attendons cette nouvelle version avec impatience. Et vous ?
A lire aussi :
Leave a Reply