Version Java SE 16

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

Java SE 16 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 11, qui continuera à recevoir des mises à jour jusqu'en 2026. La prochaine version LTS est prévue pour septembre 2021. 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.

En préparation de la nouvelle version, le développement est passé du système de contrôle de version Mercurial à Git et à la plateforme de développement collaboratif GitHub. La migration devrait améliorer les performances des opérations du référentiel, augmenter l'efficacité du stockage, donner accès aux modifications tout au long de l'historique du projet, améliorer la prise en charge de la révision du code et permettre aux API d'automatiser les flux de travail. De plus, l’utilisation de Git et GitHub rend le projet plus attractif pour les débutants et les développeurs habitués à Git.

Les nouvelles fonctionnalités de Java 16 incluent :

  • Ajout du module expérimental jdk.incubator.vector avec une implémentation de l'API Vector, qui fournit des fonctions pour les calculs vectoriels effectués à l'aide d'instructions vectorielles sur les processeurs x86_64 et AArch64 et permet 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 vous permet de contrôler explicitement la vectorisation pour le traitement parallèle des données.
  • Le code JDK et VM HotSpot écrit en C++ est autorisé à utiliser les fonctionnalités introduites dans la spécification C++14. Auparavant, les normes C++98/03 étaient autorisées.
  • Le ZGC (Z Garbage Collector), qui fonctionne en mode passif et minimise autant que possible les retards dus au garbage collection, a ajouté la possibilité de traiter les piles de threads en parallèle sans suspendre les threads d'application. Le ZGC n'a désormais que des travaux nécessitant une suspension, qui ont des délais constants, ne dépassant généralement pas quelques centaines de microsecondes.
  • Ajout de la prise en charge des sockets Unix (AF_UNIX) aux classes SocketChannel, ServerSocketChannel et java.nio.channels.
  • Un portage a été implémenté pour la distribution Linux Alpine avec la bibliothèque C standard musl, populaire dans les environnements pour conteneurs, microservices, cloud et systèmes embarqués. Le port proposé dans de tels environnements vous permet d'exécuter des programmes Java comme des applications classiques. De plus, en utilisant jlink, vous pouvez supprimer tous les modules inutilisés et créer un environnement minimal suffisant pour exécuter l'application, ce qui vous permet de créer des images compactes spécifiques à l'application.
  • Le mécanisme Elastic Metaspace a été implémenté, optimisant les opérations d'allocation et de restitution de la mémoire occupée par les métadonnées de classe (métaespace) dans JVM HotSpot. L'utilisation d'Elastic Metaspace réduit la fragmentation de la mémoire, réduit la surcharge du chargeur de classe et a également un effet bénéfique sur les performances des applications serveur de longue durée en raison d'un retour plus rapide de la mémoire occupée par les métadonnées de classe inutilisées au système d'exploitation. Pour sélectionner le mode de libération de mémoire après le déchargement des classes, l'option « -XX:MetaspaceReclaimPolicy=(balanced|aggressive|none) » est proposée.
  • Un port JDK a été ajouté pour les systèmes Windows fonctionnant sur du matériel avec des processeurs basés sur l'architecture AArch64.
  • Un troisième aperçu de l'API Foreign-Memory Access a été proposé, permettant aux applications Java d'accéder de manière sécurisée et efficace aux régions de mémoire en dehors du tas Java en manipulant les nouvelles abstractions MemorySegment, MemoryAddress et MemoryLayout.
  • Une API expérimentale Foreign Linker a été implémentée, permettant d'accéder depuis Java au code natif. Associée à l'API Foreign-Memory, la nouvelle interface de programmation facilite grandement la création de wrappers sur des bibliothèques partagées conventionnelles.
  • Ajout de l'utilitaire jpackage, qui vous permet de créer des packages pour des applications Java autonomes. L'utilitaire est basé sur javapackager de JavaFX et permet de créer des packages dans des formats natifs de diverses plateformes (msi et exe pour Windows, pkg et dmg pour macOS, deb et rpm pour Linux). Les packages incluent toutes les dépendances requises.
  • L'encapsulation stricte de tous les éléments internes du JDK est activée par défaut, à l'exception des API critiques telles que sun.misc.Unsafe. La valeur de l'option "--illegal-access" est désormais définie sur "deny" au lieu de "permit" par défaut, ce qui bloquera les tentatives du code pour accéder à la plupart des classes, méthodes et champs internes. Pour contourner la restriction, utilisez l'option « -illegal-access=permit ».
  • L'implémentation de la correspondance de modèles dans l'opérateur « instanceof » a été stabilisée, ce qui permet de définir immédiatement une variable locale pour faire référence à la valeur vérifiée. Par exemple, vous pouvez immédiatement écrire « if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..} » sans définir explicitement « String s = (String) obj ». Était : if (obj instanceof Group) { Group group = (Group) obj ; var entrées = group.getEntries(); } Vous pouvez désormais vous passer de définir « Group group = (Group) obj » : if (obj instanceof Group group) { var inputs = group.getEntries(); }
  • L'implémentation du mot-clé « record » a été stabilisée, fournissant une forme compacte pour les définitions de classe qui élimine le besoin de définir explicitement diverses méthodes de bas niveau telles que equals(), hashCode() et toString() dans les cas où les données sont stockées. seulement dans les domaines avec lesquels cela ne change pas. Lorsqu'une classe utilise des implémentations standards des méthodes equals(), hashCode() et toString(), elle peut se passer de leur définition explicite : public record BankTransaction(LocalDate date, double montant, String description) {}

    Cette déclaration ajoutera automatiquement les implémentations des méthodes equals(), hashCode() et toString() en plus des méthodes constructeur et getter.

  • Une deuxième version est proposée pour les classes et interfaces scellées qui ne peuvent pas être utilisées par d'autres classes et interfaces pour hériter, étendre ou remplacer les implémentations. Les classes scellées fournissent également un moyen plus déclaratif de restreindre l'utilisation d'une superclasse que les modificateurs d'accès, basé sur une liste explicite des sous-classes autorisées pour l'extension. package com.example.geometry ; Classe publique scellée La forme autorise com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

Source: opennet.ru

Ajouter un commentaire