Java 25 est disponible : 18 JEP et version LTS

Par:
francoistonic

mar, 16/09/2025 - 09:29

C'est le grand jour ! OpenJDK 25 est disponible. Cette version intègre 18 JEP impactant le langage, la plateforme et la sécurité. Java 25 est une version dite support long terme, ou LTS. Oracle annonce un support minimum de 8 ans. Des mises à jour trimestrielles sont planifiées par l'éditeur. 

JEP 507 : Types primitifs dans les patterns, instanceof et switch (3e preview) : aide les développeurs à augmenter leur productivité en rendant le langage Java plus uniforme et plus expressif. Par exemple, les développeurs peuvent améliorer la correspondance de modèles en supprimant les restrictions relatives aux types primitifs rencontrés lors de l’utilisation de la correspondance de modèles, d’instanceof et de switch. Il permet également les modèles de type primitif dans tous les contextes de modèle et étend instanceof et switch pour fonctionner avec tous les types primitifs. La prise en charge des types primitifs sera particulièrement bénéfique pour les développeurs qui créent des applications qui intègrent l’inférence d’IA. 

● JEP 511 : Déclarations d’importation de modules

Elle permet aux développeurs d’améliorer leur productivité en leur permettant d’importer facilement tous les packages exportés par un module, sans nécessiter que le code d’importation se trouve dans un module lui-même. Cela simplifie la réutilisation des bibliothèques modulaires pour tous les développeurs et aide les débutants à utiliser des bibliothèques tierces et des classes Java fondamentales sans la nécessité de savoir où elles se trouvent dans une hiérarchie de packages. En outre, les développeurs peuvent éviter le bruit de plusieurs déclarations d’importation à la demande lors de l’utilisation de diverses parties de l’API exportées par un module, ce qui est bénéfique pour les applications simples qui assemblent les inférences d’IA et les workflows des bibliothèques populaires. 

● JEP 512 : Fichiers source et méthodes principales d’instance compactes

Elle aide à rendre le langage Java plus accessible aux débutants, aux administrateurs système et informatiques en offrant une prise en main plus aisée de la programmation Java. Les novices peuvent écrire leurs premiers programmes de manière concise sans avoir à comprendre les fonctionnalités linguistiques conçues pour les grands programmes et peuvent développer leur code avec élégance au fur et à mesure que leurs compétences se développent. En outre, les administrateurs système et informatiques qui ne sont peut-être pas des experts Java peuvent réduire la cérémonie d’écriture de petits programmes tels que des scripts et des utilitaires de ligne de commande. 

● JEP 513 : Corps de constructeur flexibles

Elle permet aux développeurs d’améliorer la sécurité et la fiabilité du code en autorisant la validation des entrées et les calculs sécurisés avant d’appeler explicitement un constructeur. Cela améliore la sécurité du code en autorisant davantage d’expressions de constructeur naturelles et en activant l’initialisation de champ avant qu’elles ne soient visibles par d’autres codes de classe, tels que les méthodes appelées à partir d’un constructeur de superclasse. Cela améliore également la fiabilité en préservant la protection qui empêche les constructeurs de sous-classe d’interférer avec l’instanciation de la superclasse. 

JEP 505 : Accès simultané structuré (5e preview)

Elle aide les développeurs à améliorer la maintenabilité, la fiabilité et l’observabilité du code multithread en simplifiant la programmation simultanée. En traitant les groupes de tâches connexes exécutées dans différents threads comme une seule unité de travail, la simultanéité structurée aide à éliminer les risques courants liés aux annulations et arrêts, tels que les fuites de threads et les retards d’annulation. C’est particulièrement bénéfique pour le développement de l’IA, qui implique souvent l’exécution de plusieurs tâches en parallèle. 

● JEP 506 : Valeurs ciblées 

Elle améliore l’ergonomie, la compréhensibilité, les performances et la robustesse des projets en permettant le partage de données immuables au sein des threads et entre eux. Cela profite particulièrement aux applications utilisant des plateformes d’IA, des cadres Web et des microservices. En outre, les valeurs avec un scope sont plus faciles à gérer que les variables locales à un thread et ont des coûts d’espace et de temps plus faibles, en particulier lorsqu’elles sont utilisées avec des threads virtuels et une simultanéité structurée. 

● JEP 502 : Valeurs stables (preview)

Elle aide les développeurs à augmenter la flexibilité en introduisant une API pour les valeurs stables, qui sont des objets qui contiennent des données immuables. Étant donné que les valeurs stables sont traitées en tant que constantes par la Java Virtual Machine, elles permettent les mêmes optimisations de performances que la déclaration d’un champ final, tout en offrant une plus grande flexibilité dans le calendrier de leur initialisation. 

● JEP 508 : API vectorielle (10e incubation) : aide les développeurs à améliorer leur productivité via une API qui exprime des calculs vectoriels qui sont compilés de manière fiable lors de l’exécution pour obtenir des instructions vectorielles optimales sur les architectures CPU prises en charge. Les développeurs peuvent ainsi obtenir des performances supérieures aux calculs scalaires équivalents, qui sont souvent utilisés dans les scénarios d’inférence et de calcul de l’IA. 

JEP 470 : Encodages PEM d’objets cryptographiques (preview)

Elle aide les développeurs à augmenter leur productivité via une nouvelle API pour le codage d’objets. L’API encode les objets représentant les clés cryptographiques, les certificats et les listes de révocation de certificats dans le format de transport de courrier largement utilisé et optimisé pour la confidentialité, et décode à partir de ce format en objets. Cela facilite l’intégration des applications Java aux systèmes d’authentification de sécurité et aux périphériques tels que Yubikeys. 

● JEP 510 : API de fonction de dérivation de clé

Elle aide les développeurs à se préparer aux environnements de calcul quantique émergents en offrant une API pour les fonctions de dérivation de clé, qui sont des algorithmes cryptographiques pour la dérivation de clés supplémentaires à partir d’une clé secrète et d’autres données. Cela fournit un bloc de construction nécessaire pour la prise en charge du chiffrement hybride de clé publique, ce qui permet une transition en douceur vers le chiffrement quantique sécurisé.

JEP 519 : En-têtes d’objet compact

Elle aide les développeurs à augmenter leur productivité en réduisant la taille des en-têtes d’objet à 64 bits sur les architectures 64 bits. Cela améliore la densité de déploiement et augmente la localisation des données, tout en réduisant la taille des objets et l’empreinte mémoire sur les workloads réalistes. 

● JEP 514 : Ergonomie en ligne de commande anticipée

Elle aide les développeurs à accélérer la productivité en facilitant la création de caches à l’avance sans perte d’expressivité. Cela accélère le démarrage des applications Java en simplifiant les commandes requises pour les cas d’utilisation courants. 

● JEP 515 : Profilage anticipé des méthodes

Elle aide les développeurs à augmenter leur productivité en accélérant les performances des applications. Le temps d’échauffement est amélioré en déplaçant la collection de profils d’exécution de méthode initiale des cycles de production vers les cycles d’entraînement, en transmettant les profils via le cache à l’avance. Cela permet au compilateur JIT de générer du code natif immédiatement au démarrage de l’application plutôt que d’attendre que les profils soient collectés. Cela élimine également le besoin de modifier le code des applications, des bibliothèques ou des structures et supprime toute contrainte sur l’exécution des applications. 

JEP 509 : Profilage du temps de CPU JFR (expérimental)

Elle aide les développeurs à améliorer la productivité et l’efficacité de leurs programmes en améliorant le JDK Flight Recorder (JFR) pour capturer des informations de profilage du temps CPU plus précises sur Linux et en aidant à identifier les éléments de programme à optimiser. 

● JEP 518 : Échantillonnage coopératif JFR

Elle  aide les développeurs à augmenter la fiabilité du code en améliorant la stabilité du JFR lorsqu’il échantillonne de manière asynchrone les piles de threads Java. Cela permet au JFR de limiter les biais de point de sécurité dans les échantillonneurs d’événements tout en évitant les heuristiques risquées pour générer des traces de pile en dehors des points de sécurité. Cela permet également la création de demandes d’échantillons en réponse à un événement matériel ou à l’intérieur d’un gestionnaire de signaux et réduit la quantité de travail que le thread échantillonneur doit exécuter. 

● JEP 520 : JFR Method Timing & Tracing

Elle aide les développeurs à améliorer leur productivité en leur permettant d’identifier les goulets d’étranglement des performances des applications, d’optimiser le code et de trouver les causes profondes des bugs. Ceci est réalisé en étendant le JFR avec des facilités de synchronisation et de traçage de méthode via l’instrumentation de code exécutable. 

Tous les détails : https://openjdk.org/projects/jdk/25/