
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...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.