Nouvelles Du Monde

Java 21 est l’une des versions les plus intéressantes de ces dernières années

Java 21 est l’une des versions les plus intéressantes de ces dernières années

2023-09-19 20:33:00

Avec 15 JEP (JDK Enhancement Proposals), l’OpenJDK 21 apporte plus de sujets que jamais. Et il possède également de nombreuses fonctionnalités intéressantes pour nous, développeurs Java. Certaines fonctions sont en préparation depuis longtemps, notamment la correspondance de modèles, les threads virtuels, l’API vectorielle et l’API de fonctions étrangères et de mémoire. Alors que certaines parties de la correspondance de modèles et des threads virtuels ont été finalisées, d’autres aspects restent en mode aperçu ou incubateur. Cependant, certains sujets complètement nouveaux sont particulièrement intéressants pour les développeurs, tels que les modèles de chaînes, les « Classes sans nom et méthodes principales d’instance » (tous deux initialement disponibles en aperçu) et les collections séquencées.

Publicité


En tant qu’architecte logiciel, consultant et formateur chez embarc Software Consulting GmbH, Falk Sippach est toujours à la recherche de l’étincelle de passion qu’il peut allumer chez ses participants, clients et collègues. Il soutient des projets de développement logiciel principalement agiles dans l’environnement Java depuis plus de 15 ans. En tant que membre actif de la communauté (co-organisateur du JUG Darmstadt), il aime également partager ses connaissances dans des articles, des billets de blog ainsi que lors de conférences lors de conférences ou de réunions de groupes d’utilisateurs et soutient l’organisation de divers événements spécialisés. Falk tweete sur @sippsack.

La correspondance de modèles consiste à comparer des structures existantes avec des modèles afin de pouvoir implémenter des distinctions de cas complexes de manière efficace et maintenable. Il est en développement depuis plusieurs années dans le cadre du projet Amber. Jusqu’à la dernière version avec prise en charge LTS (OpenJDK 17), seules les fonctions de base telles que les expressions de commutation, les classes scellées, les enregistrements et la correspondance de modèles pour instanceof étaient initialement complétées. Avec Java 21, il peut désormais également être utilisé de manière productive. Deux éléments de base importants ont été finalisés : les modèles d’enregistrement et la correspondance de modèles pour le commutateur. Les modèles d’enregistrement sont un nouveau type de modèle qui correspond aux enregistrements et les décompose en même temps en leurs composants (déconstruits), afin que vous puissiez continuer à travailler directement avec les composants. Et avec Pattern Matching pour switch, toutes les fonctions précédentes sont rassemblées, de sorte que dans les expressions switch, vous pouvez désormais utiliser des modèles de type et d’enregistrement, y compris les clauses when (anciennement appelées modèles gardés) en plus des modèles constants qui ont toujours été disponibles. Les modèles sans nom sont très récents (introduits en avant-première dans 21). Cela autorise les caractères génériques (le trait de soulignement _) si les variables de modèle ne doivent pas être évaluées. Cela rend le code plus compact, plus facile à lire et moins sujet aux erreurs (évite le code mort). Cette construction peut également être utilisée dans des blocs catch ou dans des paramètres lambda en tant que variables dites sans nom.

De nombreux experts sont d’accord et montrent leur enthousiasme pour l’une des fonctionnalités les plus importantes de l’histoire de Java, qui se classe au même rang que les génériques, les expressions lambda et le système de modules de plateforme. Les threads virtuels permettent un nombre beaucoup plus grand de threads simultanés. Ils sont en avance sur les threads classiques des plateformes, notamment en matière de consommation de ressources. Cela signifie que beaucoup plus (théoriquement des millions) de threads virtuels peuvent être démarrés dans un processus sans atteindre immédiatement les limites de mémoire de la VM. Cela permet une meilleure utilisation du processeur. Cependant, la plupart des développeurs Java n’entreront pas en contact direct avec la programmation simultanée et les threads virtuels. Vous en bénéficiez toujours car les fabricants de frameworks (Spring, Quarkus, …) construiront des threads virtuels sous le capot. Cela permet une meilleure utilisation, en particulier dans les applications Web, car davantage de requêtes entrantes des utilisateurs peuvent être traitées en même temps. Le frein est de toute façon l’accès IO (par exemple à la base de données). Cependant, comme les requêtes sont très peu coûteuses à générer et à exploiter (consommation de mémoire inférieure) et qu’il est possible de gérer bien plus en même temps, les ressources existantes peuvent être mieux utilisées.

Dans le domaine des threads virtuels désormais terminés, deux fonctions ont de nouveau été publiées en avant-première : la concurrence structurée et les valeurs étendues. Cette dernière est une meilleure alternative aux variables ThreadLocal. Et la concurrence structurée permet le traitement de plusieurs sous-tâches parallèles d’une manière particulièrement lisible et maintenable.

Certaines des fonctionnalités gérables en termes de fonctionnalités sont apparues de manière quelque peu surprenante dans la version Java 21. Les modèles de chaînes sont particulièrement intéressants. Ils n’apportent pas seulement l’interpolation de chaînes tant attendue au monde Java. À l’avenir, l’implémentation permettra même de créer facilement vos propres processeurs de modèles, qui pourront, par exemple, créer des objets JSON ou sécuriser des requêtes de base de données avec des instructions préparées à partir de textes avec des espaces réservés.

Les collections séquencées introduisent une poignée de nouvelles méthodes pour les collections dont les éléments sont ordonnés dans un ordre bien défini. Cela inclut l’accès en lecture et en écriture (y compris la suppression) au premier ou au dernier élément et l’inversion de l’ordre (reversed()). Cela améliore encore le cadre de collecte encore largement utilisé.




Cela aura lieu le 4 octobre betterCode() Java 21 LTS au lieu de. La conférence en ligne porte sur la nouvelle version LTS (Long-Term Support) du langage de programmation. Celui de iX et dpunkt.verlag journée à thème organisée couvert en sept conférences les principales innovations. Il jette également un œil dans les coulisses de l’OpenJDK.

Ce sera également plus facile pour les débutants Java à l’avenir. Vous n’avez plus besoin d’utiliser des constructions spéciales comme.pour créer une classe exécutable class, static, public, String[] args etc. comprendre. Avec le “JEP 445 : Classes sans nom et méthodes principales d’instance (préversion)”, vous pouvez désormais créer des fichiers exécutables main-Définir les méthodes de manière plus brève et concise et même se passer d’une classe englobante. En combinaison avec le JEP “Launch Single-File Source Code Programs” publié dans JDK 11, de petites applications Java très fines peuvent être créées dans un fichier texte avec un simple void main(){}appelez la méthode depuis la ligne de commande. Et cela profite également aux développeurs Java expérimentés.

L’API Vector est utilisée depuis longtemps et est apparue régulièrement dans les versions depuis Java 16, cette fois en tant que sixième incubateur (précurseur de Preview). Il s’agit de prendre en charge les possibilités modernes des architectures informatiques SIMD avec des processeurs vectoriels. SIMD (Single Instruction Multiple Data) permet à plusieurs processeurs de traiter différentes données en même temps. La parallélisation au niveau matériel réduit l’effort requis pour les boucles intensives en calcul utilisant le principe SIMD.

L’API Foreign Function & Memory est également intégrée dans plusieurs versions, cette fois dans la 3ème version préliminaire. Quiconque est dans le monde Java depuis longtemps connaîtra la Java Native Interface (JNI). Cela permet d’appeler du code C natif depuis Java. Cependant, l’approche est relativement complexe et fragile. L’API des fonctions étrangères fournit un accès purement Java au code natif (bibliothèques C), typé statiquement. Associée à l’API Foreign-Memory Access, cette interface peut simplifier considérablement le processus lent et sujet aux erreurs de connexion d’une bibliothèque native. Ce dernier donne aux applications Java la possibilité d’allouer de la mémoire supplémentaire en dehors du tas. L’objectif des nouvelles API est de réduire les efforts de mise en œuvre de 90 % et d’accélérer les performances d’un facteur 4 à 5. Les deux API sont incluses dans le JDK depuis les JDK 14 et 16, initialement individuellement et à partir du JDK 18 en tant que JEP d’incubateur commun. Cette fonctionnalité se rapproche probablement lentement de sa finalisation.

Il s’est également passé quelque chose avec les éboueurs. Le ZGC (Scalable Low-Latency Garbage Collector), introduit il y a quelques années dans OpenJDK 15, appartient à une nouvelle génération. Le but est de nettoyer de grandes quantités de données (To de RAM) avec des pauses GC les plus courtes possibles (moins de 10 ms) et ainsi garder l’application presque toujours prête à répondre. Jusqu’à présent, le ZGC n’a pas fait de distinction entre les objets récents et ceux qui existent depuis longtemps. L’idée est que les objets qui ont déjà survécu à une ou plusieurs exécutions de GC sont susceptibles de perdurer longtemps dans le futur. Ceux-ci sont ensuite déplacés vers une zone supplémentaire (ancienne génération) et ne doivent plus être traités dans les cycles standards. Cela peut améliorer les performances d’une application.

Il existe quelques autres JEP qui ne sont pas très pertinents pour les développeurs. Cela vaut la peine de jeter un œil aux nombreux détails Notes de version. Les modifications apportées au JDK (bibliothèque de classes Java) peuvent également être facilement effectuées via le Almanach Java comprendre. Dans cet aperçu vous trouverez, entre autres, toutes les nouveautés concernant les modèles de chaînes et les collections séquencées. Il y avait aussi de petites extensions à la classe String : par exemple, la méthode indexOf(String str, int beginIndex, int endIndex) introduit, qui recherche une sous-chaîne dans une plage spécifique. Les classes StringBuffer et StringBuilder ont été étendus pour inclure deux méthodes similaires qui ajoutent de manière répétée un caractère ou une chaîne de caractères à l’objet existant : repeat(CharSequence, int). La classe Character a à son tour été étendu pour inclure une variété de méthodes permettant de vérifier si un caractère Unicode représente un emoji ou une variante de celui-ci. Ici aussi, Java évolue avec son temps.

Un aperçu détaillé de la version Java 21 peut être trouvé dans l’article iX récemment publié. En finalisant les Virtual Threads, Java 21 sera à égalité avec Java 5 (Generics), Java 8 (Lambdas, Stream API) et Java 9 (Platform Module System) dans quelques années. Même si le potentiel de cette idée ne peut pas encore être pleinement exploité, les threads virtuels simplifieront grandement la mise en œuvre d’applications serveur hautement évolutives à l’avenir. Mais Java 21 réserve bien d’autres points forts. Lors de la correspondance de modèles, le noyau (correspondance de modèles pour le commutateur) et les modèles d’enregistrement ont été finalisés et les modèles sans nom ont été introduits en guise d’aperçu. Les modèles de chaînes (actuellement encore en préversion) et les collections séquencées facilitent la vie des développeurs Java. Cela augmente déjà l’attente pour la prochaine version en mars 2024.


(moi)

Vers la page d’accueil



#Java #est #lune #des #versions #les #intéressantes #ces #dernières #années
1695208966

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

ADVERTISEMENT