Sortie de Java SE 20

Après six mois de développement, Oracle a lancé la plateforme Java SE 20 (Java Platform, Standard Edition 20), dont le projet OpenJDK est l'implémentation de référence. À l'exception de la suppression de certaines fonctionnalités obsolètes, Java SE 20 maintient la compatibilité rétroactive avec les précédentes versions de la plateforme Java : la plupart des projets Java antérieurs fonctionneront sans modification avec la nouvelle version. Des versions prêtes à installer de Java SE 20 (JDK, JRE et Server JRE) sont disponibles pour Linux (x86_64, AArch64), Windows (x86_64) et macOS (x86_64, AArch64). L'implémentation de référence de Java 20, développée dans le cadre du projet OpenJDK, est entièrement open source sous la licence GPLv2 avec des exceptions GNU ClassPath, permettant le linking dynamique avec des produits commerciaux.

Java SE 20 est classé comme une version avec un cycle de support normal, avec des mises à jour qui seront publiées jusqu'à la prochaine version. Pour une version avec un cycle de support prolongé (LTS), il est recommandé d'utiliser Java SE 17, avec des mises à jour publiées jusqu'en 2029. Rappelons qu'à partir de la version Java 10, le projet a adopté un nouveau processus de développement, avec des cycles de sorties plus courts. Les nouvelles fonctionnalités sont désormais développées dans une branche master constamment mise à jour, intégrant les changements déjà prêts, puis des branches sont créées tous les six mois pour stabiliser les nouvelles versions.

Parmi les nouveautés de Java 20, on peut noter :

  • Une prise en charge préliminaire des valeurs limitées (Scoped Values) a été proposée, permettant de partager des données immuables entre des flux et d'échanger efficacement des données entre des sous-flux (les valeurs sont héritées). Les Scoped Values se développent pour remplacer le mécanisme des variables locales au flux (thread-local variables) et sont plus efficaces lors de l'utilisation d'un très grand nombre de flux virtuels (des milliers et des millions de flux). La principale différence entre les Scoped Values et les variables locales au flux est que les premières sont écrites une fois, ne peuvent plus être modifiées par la suite et restent accessibles uniquement pendant l'exécution du flux. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request.isAuthorized()? ADMIN : GUEST); var user = new User(level); ScopedValue.where(CURRENT_USER, user) .run(() -> Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) throw new InvalidUserException(); return new DBConnection(…); } }
  • Une seconde mise en œuvre préliminaire des modèles d'enregistrement (record pattern) a été ajoutée, élargissant la fonctionnalité de correspondance déjà introduite dans Java 16 pour l'analyse des valeurs des classes de type record. Par exemple : record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = p.x(); int y = p.y(); System.out.println(x+y); } }
  • Une quatrième mise en œuvre préliminaire de la correspondance par modèle dans les expressions « switch » a été ajoutée, permettant d'utiliser des modèles flexibles dans les étiquettes « case » au lieu de valeurs exactes, englobant ainsi toute une série de valeurs pour lesquelles auparavant des chaînes d'expressions « if…else » encombrantes étaient nécessaires. static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); }; }
  • Une seconde mise en œuvre préliminaire de l'API FFM (Foreign Function & Memory) a été ajoutée, permettant d'organiser l'interaction entre les programmes Java et le code et les données externes via l'appel de fonctions dans des bibliothèques externes et l'accès à la mémoire en dehors de la JVM.
  • Une seconde préversion des flux virtuels a été ajoutée, représentant des flux légers qui simplifient considérablement l'écriture et la maintenance d'applications multithreads à haute performance.
  • Un deuxième variant d'API expérimentale pour le parallélisme structuré, simplifiant le développement d'applications multithreads en traitant plusieurs tâches exécutées dans différents threads comme un seul bloc, a été ajouté.
  • Une cinquième préversion de l'API Vector a été ajoutée, fournissant des fonctionnalités pour le calcul vectoriel utilisant des instructions vectorielles des processeurs x86_64 et AArch64, permettant d'appliquer simultanément des opérations à plusieurs valeurs (SIMD). Contrairement aux capacités d'auto-vectorisation des opérations scalaires fournies par le compilateur JIT HotSpot, la nouvelle API permet de gérer explicitement la vectorisation pour le traitement parallèle des données.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster