Les nouveautés Java 21 : meilleure performance et maintenabilité
2023-12-21
À chaque nouvelle sortie JAVA, la Communauté Métier Dev prend le temps de vous partager les nouveautés majeures de ce langage de programmation afin de découvrir en 1h les released mais également quelques previews. Retrouvez les conférences que nous proposons chaque semaine en cliquant ici. À vos codes !
Pour cette nouvelle version de JAVA 2023, c’est Florent, consultant Java et Lead de la Communauté Métier qui vous partage ses connaissances.
Les éléments en preview sont indiqués : [preview]
Record patterns – JEP 440
- Étendre le pattern maching existant.
- Simplifier l’écriture du code imbriqué. Ex: Le polymorphisme est possible avec les records (sans caster à la main) car on a plus besoin de caster les records.
Pattern Matching for switch – JEP 441
- Étendre et simplifier l’usage des cases. En cas de cast sur les objets, on peut directement caster l’objet dans le case.
- Amélioration de la sécurité du switch en demandant toutes les possibilités par rapport à l'objet de cast à passer. Attention, il faut éviter d’imbriquer les switchs pour un souci de relecture et d'algorithme.
Cette nouveauté n’optimise pas le code de manière technique mais cela permet de le rendre beaucoup plus lisible.
Virtual Threads – JEP 444
- L’usage du hardware pour les environnements “concurrents” (server)
- Minimum d’impact sur le code existant (Implémentation java.land.thread)
Cette nouveauté est utile et intéressante lors du traitement de gros volumes de données.
Sequenced Collections – JEP 431
- Accès au premier et dernier élément d’une collection / map
- Rétrocompatibilité
Cette nouveauté est utile si vous avez besoin d’un système de queue sur map, list, ou se (ajout de nouvelles interfaces). En effet, il y des méthodes pour le faire qui sont rétrocompatibles. Cela permet d’avoir des collections et dictionnaires séquencés. C’est un raccourci qui améliore la visibilité mais qui lève des exceptions par la suite (contrairement à Iterator qui va retourner du null).
[preview] String templates – JEP 430
- Améliorer la lisibilité des String constants des expressions
- Améliorer l'interopérabilité entre langages / API
Cela arrivera bientôt mais ne pas l’utiliser pour le moment en prod. Ce templating va permettre de passer des chaînes de caractères avec du templating à l'intérieures sur d’autres langages / API > cela rend les chaines de caractères plus interopérables.
Generational ZGC – JEP 439
Retrouvez ici le webinar sur le Garbage Collector.
- Réduction des risques (blocage d’allocation, dépassement du heap, surcharge du CPU lié au GC)Attention, certains problèmes comme la surcharge de CPU liés au GC ne sont pas liés forcément qu’à un problème de génération (trop d'objets, de rames …)
- Performances de ZGC préservées
Les commandes: XX:+UseZGC> forcer l’usage ZGC car il n’est pas par défaut XX:+Zgenerational> activer la gestion des générations sur le ZGC -> intéressant notamment pour des serveurs à haute intensité
[preview] Scoped Values – JEP 446
Retrouvez les conférences de José Paumard à ce sujet lors du DevFest.
- Simple à utiliser
- Compréhensible
- Robuste
- Performant
[preview] Structured concurrency – JEP 428
- Nouvel object : StructuredTaskScope qui permet de régler des problèmes notamment sur les fuites de Threads (Thread Leak), les levées d’exceptions ou les délais d’annulation (Cancelation Day)
Et d’autres éléments intéressants:
- JEP 448 : Vector API (6ème incubation)
- JEP 449 : Deprecated X86 Windows support
- JEP 452 : KEM API (Key Encaps. Mecha.) > krypto
- JDK-8303018-8307107 : Meilleur support des frimousses
Il n’y a pas de changement de rupture entre la version 17 et 21. Cette release est conséquente et beaucoup d'améliorations et nouveautés ont été proposées !