Version Java SE 20

Après six mois de développement, Oracle a publié Java SE 20 (Java Platform, Standard Edition 20), qui utilise le projet open source OpenJDK comme implémentation de référence. À l'exception de la suppression de certaines fonctionnalités obsolètes, Java SE 20 conserve une compatibilité ascendante avec les versions précédentes de la plate-forme Java : la plupart des projets Java précédemment écrits fonctionneront sans modification lorsqu'ils seront exécutés sous la nouvelle version. Des versions prêtes à l'installation de Java SE 20 (JDK, JRE et Server JRE) sont préparées pour Linux (x86_64, AArch64), Windows (x86_64) et macOS (x86_64, AArch64). Développée par le projet OpenJDK, l'implémentation de référence Java 20 est entièrement open source sous licence GPLv2, avec des exceptions GNU ClassPath permettant une liaison dynamique avec des produits commerciaux.

Java SE 20 est classé comme version de support général et continuera à recevoir des mises à jour jusqu'à la prochaine version. La branche Long Term Support (LTS) devrait être Java SE 17, qui continuera à recevoir des mises à jour jusqu'en 2029. Rappelons qu'à partir de la sortie de Java 10, le projet est passé à un nouveau processus de développement, impliquant un cycle plus court pour la formation des nouvelles versions. Les nouvelles fonctionnalités sont désormais développées dans une branche principale constamment mise à jour, qui comprend des modifications prêtes à l'emploi et à partir de laquelle des branches sont créées tous les six mois pour stabiliser les nouvelles versions.

Les nouvelles fonctionnalités de Java 20 incluent :

  • Il existe une prise en charge préliminaire des valeurs portées, permettant de partager des données immuables entre les threads et d'échanger efficacement des données entre les threads enfants (les valeurs sont héritées). Les valeurs scoped sont en cours de développement pour remplacer le mécanisme des variables locales des threads et sont plus efficaces lors de l'utilisation d'un très grand nombre de threads virtuels (des milliers ou des millions de threads). La principale différence entre les valeurs Scoped et les variables locales du thread est que les premières sont écrites une seule fois, ne peuvent pas être modifiées à l'avenir et restent disponibles uniquement pendant la durée de l'exécution du thread. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve (Demande de demande, Réponse de réponse) { var level = (request. isAuthorized()? ADMIN : GUEST); var user = nouvel utilisateur (niveau); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(request, réponse)); } } classe DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) lance une nouvelle InvalidUserException(); renvoyer un nouveau DBConnection(...); } }
  • Un deuxième aperçu des modèles d'enregistrement a été ajouté, étendant la fonctionnalité de correspondance de modèles introduite dans Java 16 pour analyser les valeurs des classes d'enregistrement. Par exemple : record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • Une quatrième implémentation préliminaire de correspondance de modèles dans les instructions « switch » a été ajoutée, permettant aux étiquettes « case » d'utiliser non pas des valeurs exactes, mais des modèles flexibles qui couvrent une série de valeurs à la fois, pour lesquelles il était auparavant nécessaire d'utiliser des méthodes encombrantes. des chaînes d’expressions « si ... sinon ». static String formateurPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); cas Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); par défaut -> o.toString(); } ; }
  • Une deuxième implémentation préliminaire de l'API FFM (Foreign Function & Memory) a été ajoutée, qui vous permet d'organiser l'interaction des programmes Java avec du code et des données externes en appelant des fonctions à partir de bibliothèques externes et en accédant à la mémoire en dehors de la JVM.
  • Un deuxième aperçu des threads virtuels a été ajouté, qui sont des threads légers qui simplifient considérablement l'écriture et la maintenance d'applications multithread hautes performances.
  • Ajout d'une deuxième API expérimentale pour le parallélisme structuré, qui simplifie le développement d'applications multithread en traitant plusieurs tâches exécutées dans différents threads comme un seul bloc.
  • Un cinquième aperçu de l'API Vector a été ajouté, fournissant des fonctions pour les calculs vectoriels effectués à l'aide d'instructions vectorielles sur les processeurs x86_64 et AArch64 et permettant d'appliquer simultanément des opérations à plusieurs valeurs (SIMD). Contrairement aux fonctionnalités fournies par le compilateur HotSpot JIT pour la vectorisation automatique des opérations scalaires, la nouvelle API permet de contrôler explicitement la vectorisation pour le traitement parallèle des données.

Source: opennet.ru

Ajouter un commentaire