Java 15 par Jean-Michel Doudoux
La version 15 de Java a été publiée le 15 septembre 2020. Cette version est spécifiée dans la JSR 390 et implémentée dans OpenJDK qui est l’implémentation de référence.
C’est la 6eme release suivant le modèle de releases semestrielles qui implique un nombre limité de fonctionnalités (JEP) incluses avec un certain nombre d’entre elles qui sont en preview, en incubation ou expérimentales.
Sa première mise à jour, la version 15.0.1, a été diffusée le 20 octobre 2020.
Trois nouveautés sont proposées :
- Les classe scellées (sealed classes) en preview (JEP 360)
- Des implémentations de l’algorithme de signature Edwards-Curve Digital Signature Algorithm (EdDSA) (JEP 339)
- Les classes cachées (hidden classes) (JEP 371)
De nombreuses mises à jour sont proposées notamment la ré-implémentation de l’historique API DataGramSocket (JEP 373) et le support de l’extension certificate_authorities de TLS 1.3.
Plusieurs fonctionnalités deviennent standard ou production ready :
- ZGC : un ramasse-miettes à faible latence proposé par Oracle pour gérer des heaps allant jusqu’à 16To (JEP 377)
- Shenandoah : un ramasse-miettes à faible temps de pause pour des heaps de quelques To proposé par Red Hat (JEP 379)
- Les blocs de texte (text blocks) permettent d’exprimer facilement des chaînes de caractères littérales multilignes avec une gestion de l’indentation accessoire et significative (JEP 378)
- L’activation par défaut de l’option ShowCodeDetailsInExceptionMessages, introduite en Java 14, permettant d’avoir des informations plus précises lors d’une exception de type NullPointerException (JDK-8233014)
Plusieurs fonctionnalités restent en preview ou en incubator :
- Seconde preview pour le pattern matching pour l’instruction instanceof (JEP 375)
- Les enregistrements (records) qui introduisent un nouveau type dans le langage Java pour faciliter la définition d’une classe qui encapsule des données de manière immuable grâce à une syntaxe concise. Cette seconde preview ajoute les records locaux, le support des classes scellées avec les records et la possibilité des créer des interfaces et des énumérations locales (JEP 384)
- Seconde incubator pour l’API Foreign-Memory Access dont le but est de proposer une API standard de bas niveau pour accéder de manière sûre et performante à des données en mémoire hors du tas (off heap memory) (JEP 383)
Comme toujours depuis Java 11, plusieurs fonctionnalités sont dépréciées ou retirées :
- Le moteur d’exécution JavaScript Nashorn, introduit en Java 8 et déprécié en Java 11 est retiré (JEP 372)
- La fonctionnalité d’optimisation Biased Locking de la JVM Hotspot est déprécié et désactivé par défaut (JEP 374)
- Le mécanisme Activation de RMI est déprécié (JEP 385)
- Les portages sur système Solaris et architecture SPARC sont dépréciés pour suppression (JEP 381)
Java poursuit son évolution en respectant son modèle de releases. Il est notable de constater que ces évolutions dans la version 15 concernant la syntaxe, les API, la JVM et la sécurité.
Les principaux fournisseurs de distributions non LTS gratuites d’OpenJDK proposent un téléchargement de la version 15.
Cette version n’est pas LTS : son support se terminera lors de la diffusion, en mars 2021, de Java 16, dont les travaux sont déjà bien avancés.
Cette version 15 est l’avant dernière avant la sortie dans un peu moins d’un an de Java 17 qui sera la prochaine version LTS.