Oracle annonce la disponibilité de Java 24, apportant des améliorations en matière de performance, de stabilité et de sécurité à la plateforme pour permettre aux entreprises d'accélérer leur croissance

Oracle a annoncé la disponibilité de Java 24, la dernière version du langage de programmation et de la plateforme de développement les plus utilisés au monde. Java 24 (Oracle JDK 24) apporte des milliers d'améliorations pour aider les développeurs à maximiser leur productivité et à stimuler l'innovation. En outre, les améliorations apportées aux performances, à la stabilité et à la sécurité de la plateforme permettent aux entreprises d'accélérer leur croissance.

« Alors que Java approche de son 30e anniversaire plus tard cette année, il continue d'étendre son ensemble d'outils pour répondre aux besoins évolutifs des développeurs, y compris les capacités qui soutiennent le développement d'applications alimentées par l'IA », a déclaré Arnal Dayaratna, vice-président de la recherche, développement de logiciels, IDC. « Le large éventail de fonctionnalités de la nouvelle version contribuera à accroître la productivité des développeurs, leur permettant de fournir des applications riches en fonctionnalités à leurs organisations et à leurs clients plus rapidement et plus efficacement. La version Java 24 souligne que Java est inégalé pour le développement d'applications critiques à l'échelle de l'entreprise. »

« Au cours des 30 dernières années, Java a fourni aux développeurs une plateforme complète pour créer et déployer des applications qui répondent à une gamme variée de cas d'utilisation », a déclaré Georges Saab, vice-président senior, Oracle Java Platform et président du conseil d'administration d'OpenJDK. « Avec plus de 20 nouvelles fonctionnalités couvrant chaque élément de Java, y compris de nouvelles capacités d'IA et de cryptographie post-quantique, la version Java 24 donne aux développeurs les outils dont ils ont besoin pour créer des applications innovantes et infusées par l'IA. En tant qu'intendants de Java, nous sommes ravis de travailler avec la communauté Java mondiale pour continuer à fournir un flux régulier de nouvelles fonctionnalités via notre cadence semestrielle prévisible. »


Caractéristiques du langage

Types primitifs dans les patterns, instanceof et switch (JEP 488 - deuxième aperçu) : Aide les développeurs à accroître la productivité de la programmation Java en rendant le langage plus uniforme et plus expressif. Cette fonctionnalité aide les développeurs à améliorer la recherche de patterns en supprimant les restrictions relatives aux types primitifs que les développeurs rencontrent lorsqu'ils utilisent la recherche de patterns, instanceof et switch. Elle autorise également les patterns de type primitif dans tous les contextes de pattern et étend instanceof et switch pour qu'ils fonctionnent avec tous les types primitifs. Les développeurs d'applications qui intègrent l'inférence IA bénéficieront tout particulièrement de la prise en charge des types primitifs.

Corps de constructeurs flexibles (JEP 492 - troisième aperçu) : Aide les développeurs à améliorer la fiabilité du code grâce à l'introduction de deux phases distinctes de prologue et d'épilogue dans le corps d'un constructeur. Cela permet aux développeurs de placer plus naturellement la logique qu'ils doivent actuellement prendre en compte dans des méthodes statiques auxiliaires, des constructeurs intermédiaires auxiliaires ou des arguments de constructeurs. En outre, il préserve la garantie existante selon laquelle le code d'un constructeur de sous-classe ne peut interférer avec l'instanciation de la superclasse, ce qui a pour effet de rendre une classe plus fiable lorsque des méthodes sont remplacées.

Déclarations d'importation de modules (JEP 494 - deuxième aperçu) : Aide les développeurs à améliorer leur productivité en leur permettant d'importer rapidement et facilement tous les paquets exportés par un module, sans que le code d'importation ne doive se trouver dans le module lui-même. Cela simplifie la réutilisation des bibliothèques modulaires pour tous les développeurs et permet aux débutants d'utiliser plus facilement des bibliothèques tierces et des classes Java fondamentales sans avoir à apprendre où elles se trouvent dans la hiérarchie des paquets. Cette fonctionnalité profite également aux développeurs qui souhaitent intégrer rapidement la logique métier à l'aide d'une inférence, d'une bibliothèque ou d'appels de service natifs de l'IA.

Fichiers source simples et méthodes principales d'instance (JEP 495 - quatrième aperçu) : Aide les étudiants à écrire leurs premiers programmes sans avoir besoin de comprendre les caractéristiques du langage conçues pour les programmes volumineux, en offrant une ouverture en douceur à la programmation Java. Par conséquent, les formateurs et les instructeurs peuvent introduire les concepts progressivement, et les étudiants peuvent écrire des déclarations simplifiées pour des programmes à classe unique et étendre leurs programmes de manière transparente avec des fonctionnalités plus avancées au fur et à mesure que leurs compétences s'accroissent. En outre, les développeurs Java expérimentés peuvent écrire de petits programmes de manière succincte et efficace sans avoir besoin d'utiliser des outils conçus pour des projets plus importants.

Bibliothèques

Stream Gatherers (JEP 485) : Aide les développeurs à être plus efficaces dans la lecture, l'écriture et la maintenance du code Java en améliorant l'API Stream pour prendre en charge les opérations intermédiaires personnalisées, qui permettent aux pipelines de flux de transformer les données d'une manière qui n'est pas facilement réalisable avec les opérations intermédiaires intégrées existantes.

API de fichier de classe (JEP 484) : Aide les développeurs à améliorer leur productivité en fournissant une API standard pour analyser, générer et transformer les fichiers de classe Java et suivre le format de fichier de classe défini par la spécification de la machine virtuelle Java.

Scoped Values (JEP 487 - Quatrième aperçu) : Aide les développeurs à améliorer la facilité d'utilisation, la compréhension, la performance et la robustesse de leurs projets en permettant le partage de données immuables au sein et entre les threads.

API vectorielle (JEP 489 - Neuvième incubateur) : Aide les développeurs à améliorer leur productivité en introduisant une API pour exprimer des calculs vectoriels qui se compilent de manière fiable au moment de l'exécution en instructions vectorielles sur les architectures de 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.

Concurrence structurée (JEP 499 - Quatrième aperçu) : Aide les développeurs à améliorer la maintenabilité, la fiabilité et l'observabilité du code multithread en simplifiant la programmation concurrente grâce à une nouvelle API pour la concurrence structurée. En traitant les groupes de tâches connexes exécutées dans différents threads comme une seule unité de travail, la concurrence structurée permet de réduire les risques courants liés à l'annulation et à l'arrêt, tels que les fuites de threads et les retards d'annulation.

Bibliothèques de sécurité

API pour la fonction de dérivation de clé (JEP 478 - Aperçu) : Aide les développeurs à se préparer aux environnements informatiques quantiques émergents en offrant une sécurité cryptographique pour les données en transit. Cela améliore la confidentialité et l'intégrité des communications.

Mécanisme d'encapsulation des clés basé sur un module-réseau résistant aux algorithmes quantiques(JEP 496) : permet d'accroître la sécurité des applications Java en fournissant une implémentation du mécanisme d'encapsulation des clés basé sur un module-réseau résistant aux algorithmes quantiques (ML-KEM). Cette fonctionnalité constitue une étape importante vers la préparation post-quantique et la fourniture éventuelle d'une prise en charge de la cryptographie post-quantique (PQC) pour la plateforme Java, car les mécanismes d'encapsulation des clés sont utilisés pour sécuriser les clés symétriques sur des canaux de communication non sécurisés à l'aide de la cryptographie à clé publique.

Algorithme de signature numérique basé sur un module réseau résistant aux algorithmes quantiques (JEP 497) : Permet d'accroître la sécurité des applications Java en fournissant une implémentation de l'algorithme de signature numérique basé sur un module-réseau résistant aux algorithmes quantiques (ML-DSA). Comme pour la JEP 496, cette fonctionnalité constitue une étape importante vers la préparation post-quantique et la fourniture éventuelle d'un support PQC pour la plateforme Java, car les signatures numériques sont utilisées pour détecter les modifications non autorisées des données et pour authentifier l'identité des signataires. ML-DSA est conçu pour se prémunir contre les futures attaques de l'informatique quantique et a été normalisé par le National Institute of Standards and Technology (NIST) des États-Unis dans le cadre de la norme FIPS 204.

Outils

Liaison d'images d'exécution sans JMOD (JEP 493) : Aide les développeurs à améliorer leur efficacité en permettant à l'outil jlink de créer des images d'exécution personnalisées sans utiliser les fichiers JMOD du JDK, ce qui peut réduire la taille du JDK d'environ 25 %. Par conséquent, les développeurs peuvent lier une image d'exécution à partir de modules, que ces modules soient des fichiers JMOD autonomes, des fichiers JAR modulaires ou qu'ils fassent partie d'une image d'exécution précédemment liée. Cette fonctionnalité doit être activée lors de la construction du JDK ; elle n'est pas activée par défaut et certains fournisseurs de JDK peuvent choisir de ne pas l'activer.


Mises à jour des performances et de l'exécution

En-têtes d'objets compacts (JEP 450 - expérimental) : Aide les développeurs à accroître leur productivité en réduisant la taille des en-têtes d'objets dans la JVM HotSpot de 96 à 128 bits à 64 bits sur les architectures 64 bits. Cela permet de réduire la taille du tas, d'améliorer la densité de déploiement et d'augmenter la localité des données.

Extension de la dernière barrière pour G1 (JEP 475) : Aide les développeurs à améliorer l'efficacité en déplaçant l'expansion des barrières du garbage collector G1 du début du pipeline de compilation du C2 JIT vers la fin, ce qui peut réduire les frais généraux si cela se produit après les optimisations indépendantes de la plate-forme et l'allocation des registres. En simplifiant l'implémentation des barrières du ramasse-miettes G1, cette fonctionnalité contribue à améliorer l'efficacité, la compréhensibilité, la résilience et la qualité du code généré par C2.

Chargement et liaison anticipés des classes (JEP 483) : Aide les développeurs à accroître leur productivité et à améliorer le temps de démarrage en rendant les classes d'une application instantanément disponibles dans un état chargé et lié lorsque la machine virtuelle Java HotSpot démarre. Cette fonctionnalité ne nécessite pas l'utilisation des outils jlink ou jpackage, ni aucune modification de la façon dont les applications sont lancées à partir de la ligne de commande, ni aucune modification du code des applications, des bibliothèques ou des frameworks. Par conséquent, elle permet de jeter les bases d'une amélioration continue des temps de démarrage et de préchauffage.

ZGC : suppression du mode non générationnel (JEP 490) : Aide les développeurs à réduire les coûts de maintenance liés à la prise en charge de deux modes différents en supprimant le mode non générationnel du Z Garbage Collector (ZGC).

Synchronisation des threads virtuels sans épinglage (JEP 491) : Aide les développeurs à accroître leur productivité en augmentant l'évolutivité du code et des bibliothèques Java qui utilisent des méthodes et des instructions synchronisées. En permettant aux threads virtuels de libérer les threads de la plateforme sous-jacente, cette fonctionnalité donne aux développeurs l'accès à davantage de threads virtuels pour gérer la charge de travail de leurs applications.

Code source

Shenandoah générationnel (JEP 404 - Expérimental) : Aide les développeurs à augmenter leur productivité en améliorant le ramasse-miettes Shenandoah avec des capacités expérimentales de collecte générationnelle qui améliorent le débit durable, la résistance aux pics de charge et l'utilisation de la mémoire.

Suppression du port Windows 32-bit x86 (JEP 479) : Aide les développeurs à améliorer leur efficacité en supprimant le code source et la prise en charge du port Windows 32-bit x86, ce qui simplifie l'infrastructure de construction et de test du JDK.

Dépréciation du port 32-bit x86 pour suppression (JEP 501) : Aide les développeurs à accroître leur productivité en dépréciant le port 32-bit x86 avec l'intention de le supprimer dans une prochaine version. Cela permet aux développeurs d'accéder aux nouvelles fonctionnalités qui nécessitent une prise en charge spécifique à la plateforme sans avoir à mettre en œuvre des solutions de repli 32 bits x86.

En outre, en introduisant des fonctionnalités modernes et sûres tout en dépréciant et en supprimant progressivement les fonctionnalités non sûres, Oracle souligne son engagement à maintenir l'intégrité de Java et à s'aligner sur les meilleures pratiques de développement de logiciels. Oracle a désigné trois fonctionnalités à supprimer dans une prochaine version de Java : JEP 472 : Prepare to Restrict the Use of JNI (se préparer à restreindre l'utilisation de JNI) ; JEP 486 : Désactivation permanente du gestionnaire de sécurité ; JEP 498 : Warn upon Use of Memory-Access Methods in sun.misc.Unsafe (Avertissement en cas d'utilisation de méthodes d'accès à la mémoire dans sun.misc.Unsafe).

Soutenir la communauté Java mondiale grâce à l'innovation dans le cloud

Java offre une innovation, des performances, une efficacité et des économies accrues lorsqu'il est déployé sur Oracle Cloud Infrastructure (OCI), qui est l'un des premiers clouds hyperscale à prendre en charge Java 24. En fournissant Oracle Java SE, Oracle GraalVM et Java SE Subscription Enterprise Performance Pack sans frais supplémentaires sur OCI, Java 24 aide les développeurs à créer et à déployer des applications qui s'exécutent plus rapidement, mieux et avec un rapport coût/performance optimisé.

L'abonnement Oracle Java Universal SE offre aux clients un support de premier ordre. Il comprend le Java SE Subscription Enterprise Performance Pack, un support de triage pour l'ensemble du portefeuille Java, le droit à Oracle GraalVM, l'accès aux fonctionnalités avancées de Java Management Service et la flexibilité de mise à niveau au rythme de l'entreprise du client. Cela aide les organisations informatiques à gérer la complexité, à atténuer les risques de sécurité et à maîtriser les coûts.

Témoignages de soutien

« Je suis impatient de voir les améliorations apportées à l'API vectorielle de Java dans Java 24 afin d'améliorer les applications d'IA prédictive et générative », a déclaré Frank Greco, président du NYJavaSIG. « L'activation d'algorithmes d'IA efficaces directement dans Java permet de garantir que les applications d'IA seront hautement efficaces et évolutives sur les différentes plateformes matérielles modernes. »

« Java 24 introduit Stream Gatherers, une amélioration puissante qui donne aux développeurs un contrôle fin sur la façon dont les éléments sont regroupés et traités dans les flux », a déclaré Richard Fichtner, PDG de XDEV Software GmbH. « Cela rend les transformations de données complexes plus expressives et plus efficaces. J'adore cette fonctionnalité car elle élimine les solutions de contournement telles que les collecteurs personnalisés ou la gymnastique flatMap, ce qui permet d'obtenir des pipelines de flux plus lisibles et plus faciles à maintenir. »

« Java est comme une sauce créée par un fabuleux chef, avec des ingrédients choisis avec soin, mijotés juste assez pour en faire ressortir les meilleures saveurs », a déclaré le Dr Venkat Subramaniam, fondateur d'Agile Developer, Inc. « Mes saveurs préférées sont actuellement l'API Stream Gatherers, Scoped Values et Structured Concurrency. »

« Le troisième aperçu des constructeurs flexibles dans Java 24 est une caractéristique notable, car il sera très utile de ne pas avoir à créer une méthode d'aide privée pour que mes appels à this/super se fassent en une seule ligne », a déclaré Jeanne Boyarsky, développeuse, CodeRanch. La fonction « stream gatherers « est également intrigante, et j'ai hâte que les bibliothèques proposent de nombreuses nouvelles opérations intermédiaires sur lesquelles s'appuyer. »

« Chez JetBrains, nous sommes ravis de fournir le support de Java 24 dans IntelliJ IDEA dès le premier jour », a déclaré Marit van Dijk, Java developer advocate, chez JetBrains. « Notre engagement à suivre le rythme des dernières améliorations de Java permet aux développeurs d'adopter en toute transparence les nouvelles fonctionnalités, tandis que la possibilité de télécharger Java 24 directement dans l'IDE facilite l'installation. »

Sources : Oracle, OpenJDK

Et vous ?

Quel est votre avis sur le sujet ?
Trouvez-vous les améliorations apportées par Java 24 pertinentes et cohérentes ?

Voir aussi :

JDK 23 : attendue pour septembre, Java 23 va s'accompagner d'une seconde preview de l'API de fichier de classe, du collecteur de flux ainsi que d'autres fonctionnalités

GraalVM pour JDK 23 est disponible avec GraalPy, un moteur d'exécution Python 3 embarqué et performant pour Java, ainsi que des améliorations pour un démarrage rapide et une faible utilisation de la mémoire