Alors que Java 17 se prépare, Oracle a annoncé il y a quelques jours la disponibilité du JDK 16 apportant 17 améliorations dans le cadre du cycle semestriel de livraison du langage de développement. Même défié par Python en termes de popularité, Java reste dans le trio de tête des langages les plus utilisés avec « des millions de développeurs exploitant plus de 51 milliards de machines virtuelles Java dans le monde », souligne Oracle. Mais ce large déploiement est aussi synonyme d’expérience, une récente analyse du site Indeed outre-Atlantique montrant que seuls 14% des emplois liés à Java étaient accessibles à des débutants.
Le JDK 16 finalise les fonctionnalités de Pattern Matching for instanceof et Records, en préversion depuis le JDK 14 il y a un an et testées de multiples fois par la communauté sur des cas d’usages réels. Pattern Matching for instanceof (JEP 394) permet de tester la structure d’un objet pour l’opérateur instanceof. Si la condition d’instanceof est vérifiée, elle permet d’extraire les données des objets avec un code plus concis et de les assigner à la variable associée en éliminant le besoin de transtypage explicite. Records (JEP 395) étend également la syntaxe de Java en lui permettant de générer des classes pour transporter des données immuables. Parmi les nouveautés, l’outil jpackage (JEP 392) servira à la livraison d’applications Java autonomes (self-contained) en incluant toutes les dépendances nécessaires. Il permettra de produire un package natif dans un format spécifique (par exemple un exe sur Windows ou un dmg sur macOS).
Gestion optimisée de la mémoire
Des améliorations ont été apportées à la gestion de la mémoire à travers Elastic Metaspace et la réduction des temps de pause de ZGC (Z Garbage Collector) par le traitement simultané de la pile de threads (thread-stack). Par ailleurs, le JDK 16 encapsule fortement tous les éléments internes du JDK par défaut (à l’exception des API internes sensibles telles que sun.misc.Unsafe), le renforçant par rapport à JDK 9. Les utilisateurs peuvent toujours choisir l’encapsulation forte « assouplie » de JDK 9. Enfin, dans le cadre du projet Valhalla, avec JDK 16 arrivent les alertes sur l’utilisation des value-based classes qui ne seraient pas compatibles avec les inline classes. JDK 16 intègre par ailleurs une 2ème préversion de Sealed Classes qui ajoute des contrôles sur la mise en oeuvre de classes, ainsi que trois fonctionnalités en incubation : Vector API, Foreign Linker API et Foreign-Memory Access API (3ème incubation).
Rappelons qu’Oracle vient d’ajouter le runtime d’application GraalVM Entreprise aux abonnés à Java SE, sans surcoût. Celui-ci inclut un compilateur d’optimisation qui accélère l’exécution des applications Java et réduit la consommation de ressources, en particulier pour les micro-services et les architectures natives cloud. GraalVM Enterprise permet d’utiliser des bibliothèques et frameworks écrits dans d’autres langages de programmation et de les exécuter sur des JVM. Ces autres langages peuvent être utilisés dans un même programme et partager des données sans réduction de performances.
Des expériences hands-on sur Java 16 sont proposées cette semaine et la semaine prochaine sur Oracle Developer Live les 23, 25 et 30 mars.
Commentaire