IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Le JDK 22 apporte 12 améliorations : améliorations du langage Java, de ses API, de ses performances et des outils inclus dans le JDK

Le , par Jade Emy

33PARTAGES

7  0 
Oracle annonce la disponibilité générale du JDK 22 pour les développeurs, les entreprises et les utilisateurs finaux. Le JDK 22 apporte 12 améliorations importantes.

Le JDK 22 apporte 12 améliorations suffisamment importantes pour justifier leur propre proposition d'amélioration du JDK (JEP), dont sept fonctionnalités de prévisualisation et une fonctionnalité d'incubation. Ces améliorations concernent le langage Java, ses API, ses performances et les outils inclus dans le JDK.


1. Améliorations du langage

Variables sans nom et modèles - JEP 456

Améliore la lisibilité lorsque des déclarations de variables ou des motifs imbriqués sont nécessaires mais non utilisés. Les deux sont désignés par le caractère de soulignement.

Valeur :
  • Capture l'intention du développeur selon laquelle un paramètre lambda ou de liaison donné est inutilisé, et applique cette propriété pour clarifier les programmes et réduire les possibilités d'erreur.
  • Améliore la maintenabilité de l'ensemble du code en identifiant les variables qui doivent être déclarées (par exemple, dans les clauses catch) mais qui ne sont pas utilisées.
  • Permet à plusieurs modèles d'apparaître dans une seule étiquette de cas, si aucun d'entre eux ne déclare de variables de modèle.
  • Améliore la lisibilité des modèles d'enregistrement en éliminant les modèles de type imbriqués inutiles.


Aperçus du langage

Déclarations avant super (...) [Aperçu] - JEP 447 :

Dans les constructeurs, permettre aux déclarations qui ne font pas référence à l'instance créée d'apparaître avant l'invocation explicite du constructeur.

Valeur :
  • Donne aux développeurs une plus grande liberté pour exprimer le comportement des constructeurs, permettant le placement plus naturel de la logique qui doit actuellement être prise en compte dans les méthodes statiques auxiliaires, les constructeurs intermédiaires auxiliaires ou les arguments des constructeurs.
  • Préserve la garantie existante que les constructeurs s'exécutent dans l'ordre descendant lors de l'instanciation de la classe, garantissant que le code dans un constructeur de sous-classe ne peut pas interférer avec l'instanciation de la superclasse.
  • Ne nécessite aucune modification de la machine virtuelle Java. Cette fonctionnalité du langage Java repose uniquement sur la capacité actuelle de la JVM à vérifier et à exécuter le code qui apparaît avant les invocations explicites de constructeurs à l'intérieur des constructeurs.


Modèles de chaînes de caractères (deuxième aperçu) - JEP 459 :

Les modèles de chaînes de caractères complètent les chaînes littérales et les blocs de texte existants de Java en couplant le texte littéral avec des expressions intégrées et des processeurs de modèles pour produire des résultats spécialisés.

Valeur :
  • Simplifie l'écriture des programmes Java en facilitant l'expression des chaînes de caractères qui incluent des valeurs calculées au moment de l'exécution.
  • Améliore la lisibilité des expressions qui mélangent texte et expressions, que le texte tienne sur une seule ligne de source (comme avec les chaînes littérales) ou qu'il s'étende sur plusieurs lignes de source (comme avec les blocs de texte).
  • Améliore la sécurité des programmes Java qui composent des chaînes à partir de valeurs fournies par l'utilisateur et les transmettent à d'autres systèmes (par exemple, en construisant des requêtes pour des bases de données) en prenant en charge la validation et la transformation à la fois du modèle et des valeurs de ses expressions intégrées.
  • Conserve la flexibilité en permettant aux bibliothèques Java de définir la syntaxe de formatage utilisée dans les modèles de chaînes de caractères.
  • Simplifie l'utilisation des API qui acceptent les chaînes écrites dans des langages autres que Java (par exemple, SQL, XML et JSON).
  • Permet la création de valeurs autres que des chaînes, calculées à partir de texte littéral et d'expressions intégrées, sans avoir à passer par une représentation intermédiaire sous forme de chaîne.


Classes déclarées implicitement et méthodes principales d'instance (deuxième aperçu) - JEP 463 :

Les étudiants peuvent écrire leurs premiers programmes Java sans avoir besoin de comprendre les caractéristiques du langage conçues pour les programmes de grande taille. Au lieu d'utiliser un dialecte distinct du langage, les étudiants peuvent écrire des déclarations simplifiées pour des programmes à classe unique, puis étendre leurs programmes de manière transparente pour utiliser des fonctionnalités plus avancées au fur et à mesure que leurs compétences augmentent.

Valeur : Accélérer l'apprentissage de Java -
  • Offre une rampe d'accès en douceur à la programmation Java afin que les formateurs puissent introduire les concepts de manière graduelle.
  • Aide les étudiants à écrire des programmes de base de manière concise et à faire évoluer leur code au fur et à mesure que leurs compétences s'accroissent.
  • Réduit la cérémonie d'écriture de programmes simples tels que les scripts et les utilitaires de ligne de commande.
  • N'introduit pas de dialecte séparé du langage Java pour les débutants.
  • N'introduit pas de chaîne d'outils distincte pour les débutants ; les programmes des étudiants devraient être compilés et exécutés avec les mêmes outils que ceux qui compilent et exécutent n'importe quel programme Java.


2. Bibliothèques

Fonction étrangère et API de mémoire - JEP 454 :

Permet aux programmes Java d'interagir avec le code et les données en dehors du temps d'exécution Java. En invoquant efficacement des fonctions étrangères (c'est-à-dire du code extérieur à la JVM) et en accédant en toute sécurité à la mémoire étrangère (c'est-à-dire la mémoire non gérée par la JVM), l'API permet aux programmes Java d'appeler des bibliothèques natives et de traiter des données natives sans la fragilité et le danger de la JNI.

Valeur :
  • Productivité - Remplacer la machinerie fragile des méthodes natives et de l'interface Java Native (JNI) par une API concise, lisible et purement Java.
  • Performance - Fournir un accès aux fonctions étrangères et à la mémoire avec un surcoût comparable, voire supérieur, à celui de JNI et de sun.misc.Unsafe.
  • Prise en charge d'un grand nombre de plateformes - Permettre la découverte et l'invocation de bibliothèques natives sur toutes les plateformes sur lesquelles la JVM s'exécute.
  • Uniformité - Fournir des moyens d'opérer sur des données structurées et non structurées, de taille illimitée, dans plusieurs types de mémoire (par exemple, la mémoire native, la mémoire persistante et la mémoire de tas gérée).
  • Sûreté - Garantir l'absence de bogues "use-after-free", même lorsque la mémoire est allouée et désallouée par plusieurs threads.
  • Intégrité - Permettre aux programmes d'effectuer des opérations dangereuses avec du code et des données natifs, mais avertir les utilisateurs de ces opérations par défaut.


Aperçu des bibliothèques et incubateur

API de fichier de classe (aperçu) - JEP 457 :

Fournit une API standard pour l'analyse, la génération et la transformation des fichiers de classe Java.

Valeur :
  • L'API permet aux cadres et aux programmes qui en dépendent de prendre automatiquement en charge les derniers fichiers de classe du dernier JDK, de sorte que les nouvelles fonctionnalités du langage et de la VM représentées dans les fichiers de classe puissent être adoptées rapidement et facilement.


Collecteurs de flux (aperçu) - JEP 461 :

Améliore l'API Stream pour prendre en charge les opérations intermédiaires personnalisées. Cela permettra 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.

Valeur :
  • Améliore la productivité des développeurs et la lisibilité du code en rendant les opérations personnalisées courantes dans les flux plus souples et plus expressives. Dans la mesure du possible, permet aux opérations intermédiaires de manipuler des flux de taille infinie.


Concurrence structurée (2e aperçu) - JEP 462 :

Simplifie la programmation concurrente. La concurrence structurée traite les groupes de tâches connexes exécutées dans différents threads comme une seule unité de travail, ce qui permet de rationaliser la gestion et l'annulation des erreurs, d'améliorer la fiabilité et d'accroître l'observabilité.

Valeur :
  • Simplifie le développement de code concurrent en promouvant un style de programmation qui peut éliminer les risques courants liés à l'annulation et à l'arrêt, tels que les fuites de threads et les retards d'annulation, et améliore l'observabilité du code concurrent.


Valeurs cadrées (2e aperçu) - JEP 464 :

Permet un partage efficace des données immuables à l'intérieur et entre les threads.

Valeur :
  • Facilité d'utilisation - Fournit un modèle de programmation pour partager des données à l'intérieur d'un thread et avec les threads enfants, afin de simplifier le raisonnement sur le flux de données.
  • Compréhensibilité - Rend la durée de vie des données partagées visible à partir de la structure syntaxique du code.
  • Robustesse - garantit que les données partagées par un appelant ne peuvent être récupérées que par les appelants légitimes.
  • Performance - Traite les données partagées comme immuables pour permettre leur partage par un grand nombre de threads et pour permettre des optimisations en cours d'exécution.


API vectorielle (7e incubateur) - JEP 460 :

Une API pour exprimer des calculs vectoriels qui se compilent de manière fiable lors de l'exécution en instructions vectorielles optimales sur les architectures d'unités centrales prises en charge, ce qui permet d'obtenir des performances supérieures à celles des calculs scalaires équivalents.

Ce JEP propose de réincuber l'API dans le JDK 22, avec des améliorations mineures de l'API par rapport au JDK 21. La mise en œuvre comprend des corrections de bogues et des améliorations de performance. Oracle inclue les changements notables suivants :
  • Prise en charge de l'accès vectoriel avec les segments de mémoire du tas qui sont soutenus par un tableau de n'importe quel type d'élément primitif. Auparavant, l'accès était limité aux segments de mémoire du tas soutenus par un tableau d'octets.


Valeur :
  • Offre une API claire et concise capable d'exprimer de manière claire et concise une large gamme de calculs vectoriels consistant en des séquences d'opérations vectorielles composées au sein de boucles, et éventuellement avec un flux de contrôle.
  • L'API est conçue pour être indépendante de l'architecture du processeur, ce qui permet des implémentations sur de multiples architectures supportant les instructions vectorielles.
  • Offre une compilation et des performances d'exécution fiables sur les architectures x64 et AArch64.
  • S'aligne sur le projet Valhalla.


3. Performance

Brochage régional pour G1 - JEP 423 :

Réduit la latence en mettant en œuvre le pinning régional dans G1, de sorte que le garbage collection n'a pas besoin d'être désactivé pendant les régions critiques de l'interface Java Native (JNI).

Valeur :
  • Améliore la productivité des développeurs en éliminant la nécessité pour les threads Java d'attendre la fin de l'opération G1 GC lors de l'utilisation de JNI.


4. Outils

Lancement de programmes à code source multi-fichiers - JEP 458 :

Permet aux utilisateurs d'exécuter un programme fourni sous la forme de plusieurs fichiers de code source Java sans avoir à le compiler au préalable.

Valeur :
  • Améliore la productivité des développeurs en rendant plus graduelle la transition entre les petits programmes et les programmes plus importants, ce qui permet aux développeurs de choisir si et quand ils doivent se donner la peine de configurer un outil de construction.



Il convient de noter que les fonctionnalités de prévisualisation sont des fonctionnalités de langage ou de VM de la plate-forme Java SE entièrement spécifiées et entièrement mises en œuvre, mais qu'elles sont impermanentes. Elles sont mises à disposition dans les versions de fonctionnalités du JDK pour permettre aux développeurs de faire part de leurs commentaires sur la base d'utilisations réelles, avant qu'elles ne deviennent permanentes dans une prochaine version. Cela permet également aux fournisseurs d'outils de travailler à la prise en charge des fonctionnalités avant qu'elles ne soient finalisées dans la norme Java SE.

Les API des modules incubateur mettent des API et des outils non définitifs entre les mains des développeurs et des utilisateurs afin de recueillir des commentaires qui, en fin de compte, amélioreront la qualité de la plate-forme Java.

Outre les changements décrits dans les JEP, les notes de mise à jour contiennent de nombreuses petites mises à jour qui intéresseront de nombreux développeurs d'applications et administrateurs de systèmes. Il s'agit notamment de la dépréciation d'API obsolètes et de la suppression d'API précédemment dépréciées.

Voici quelques-unes des principales mises à jour figurant dans les notes de mise à jour de Java 22 :

  • Ajout d'algorithmes supplémentaires à keytool et jarsigner.
  • Amélioration du débit du ramasse-miettes, notamment en ce qui concerne les déchets "jeunes".
  • Meilleur rapport de version pour les descripteurs de modules système.
  • Amélioration des options de gestion de l'attente pour le code natif.
  • Le référentiel Unicode Common Locale Data Repository a été mis à jour à la version 44.
  • Prise en charge des annotations de type pour les types chargés à partir du bytecode.
  • ForkJoinPool et ForJoinTasks peuvent maintenant mieux gérer les tâches ininterrompues.
  • Flexibilité supplémentaire pour la configuration des propriétés de connexion TLS du client par rapport au serveur.
  • Amélioration du suivi de la mémoire native, y compris la possibilité de signaler les pics d'utilisation.


Enfin, comme toutes les publications de fonctionnalités, le JDK 22 comprend des centaines de mises à jour de performance, de stabilité et de sécurité, y compris l'adaptation aux mises à jour et aux normes des systèmes d'exploitation et des microprogrammes sous-jacents. Les utilisateurs et les développeurs d'applications bénéficient généralement de ces changements sans les remarquer.

La caractéristique constante de toutes les versions du JDK : La prévisibilité

Le JDK 22 est la 13e version de fonctionnalités livrée dans les délais prévus par la cadence de publication semestrielle. Ce niveau de prévisibilité permet aux développeurs de gérer facilement leur adoption de l'innovation grâce à un flux régulier d'améliorations attendues.


La capacité de Java à améliorer les performances, la stabilité et la sécurité continue à en faire le langage de programmation le plus populaire au monde.

Oracle n'offrira pas de support à long terme pour le JDK 22 ; ils fourniront des mises à jour jusqu'en septembre 2024, date à laquelle il sera remplacé par l'Oracle JDK 23.

Java 22, ensemble

Comme pour les versions précédentes, Java 22 célèbre les contributions de nombreux individus et organisations de la communauté OpenJDK - "nous construisons tous Java, ensemble !"

Ratio de correction du JDK 22

Le taux d'évolution dans le temps des versions du JDK est resté largement constant pendant des années, mais avec la cadence semestrielle, le rythme auquel les fonctionnalités et les améliorations prêtes pour la production sont livrées a fortement augmenté.

Au lieu d'apporter des dizaines de milliers de correctifs et de fournir près d'une centaine de JEP (JDK Enhancement Proposals) tous les deux ans, comme Oracle le faisait avec les versions majeures précédentes, les améliorations sont fournies dans des versions allégées (Feature Releases) selon un calendrier semestriel plus facile à gérer et à prévoir. Les changements vont de nouvelles fonctionnalités importantes à de petites améliorations, en passant par la maintenance de routine, la correction de bogues et l'amélioration de la documentation. Chaque changement est représenté par un seul commit pour un seul problème dans le système de bogues du JDK.

Sur les 26 447 problèmes JIRA marqués comme corrigés dans Java 11 à Java 22 au moment de leur disponibilité générale, 18 842 ont été complétés par des employés d'Oracle tandis que 7 605 ont été apportés par des développeurs individuels et des développeurs travaillant pour d'autres organisations. En examinant les questions et en rassemblant les données sur les organisations fournies par les assignés, on obtient le tableau suivant des organisations qui parrainent le développement des contributions en Java :


Dans Java 22, sur les 2 251 problèmes JIRA marqués comme corrigés, 1 554 ont été complétés par Oracle, tandis que 697 ont été apportés par d'autres membres de la communauté Java.


Oracle souhaite remercier les développeurs travaillant pour des organisations telles que Amazon, ARM, Google, Huawei, IBM, Intel, ISCAS, Microsoft, Red Hat, Rivos, SAP et Tencent pour leurs contributions notables. Ils sont également reconnaissants des contributions de plus petites organisations telles que Bellsoft Data Dog et Loongson, ainsi que des développeurs indépendants qui ont collectivement contribué à 7% des correctifs de Java 22.

Source : Oracle

Et vous ?

Quel est votre avis sur cette nouvelle version de Java ?

Voir aussi :

Évolution de Java en 2024 : Oracle vise à enrichir le langage avec les projets OpenJDK comme Leyden, Panama et Valhalla, pour améliorer la productivité, le temps de démarrage des applications, etc.

« Java n'est pas près de disparaître » : le langage de programmation est toujours sur la liste des priorités des entreprises en 2024, selon le rapport Java Developer Productivity de Perforce

"Java 21 me fait à nouveau aimer Java", il présente quelques points forts, notamment la prise en charge des motifs d'enregistrement, par Raghav Shankar

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de moueza
Membre régulier https://www.developpez.com
Le 20/03/2024 à 21:15
Toujours aussi dynamique ce Java ! Il ne se repose pas sur ses lauriers.
4  0