Publication de Java SE 16

Après six mois de développement, Oracle a lancé la plateforme Java SE 16 (Java Platform, Standard Edition 16), dont l'implémentation de référence est le projet open source OpenJDK. Java SE 16 maintient la compatibilité descendante avec les versions antérieures de la plateforme Java, tous les projets Java précédemment écrits fonctionneront sans modifications sous la nouvelle version. Les 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. L'implémentation de référence de Java 16 développée dans le cadre du projet OpenJDK est entièrement ouverte sous la licence GPLv2 avec des exceptions GNU ClassPath, permettant le lien dynamique avec des produits commerciaux.

Java SE 16 est classé comme une version avec un cycle de support régulier, des mises à jour seront publiées jusqu'à la prochaine version. Pour une branche avec support à long terme (LTS), il est recommandé d'utiliser Java SE 11, avec des mises à jour publiées jusqu'en 2026. La prochaine version LTS est prévue pour septembre 2021. Rappelons qu'à partir de la version Java 10, le projet a adopté un nouveau processus de développement, impliquant un cycle de création de nouvelles versions plus court. De nouvelles fonctionnalités sont désormais développées dans une branche principale mise à jour en permanence, dans laquelle les modifications prêtes sont incluses et des branches pour la stabilisation des nouvelles versions en sont dérivées tous les six mois.

Pour la préparation de la nouvelle version, le développement a été transféré du système de gestion de versions Mercurial vers Git et la plateforme de collaboration GitHub. On s'attend à ce que cette migration améliore la performance des opérations sur le référentiel, accroisse l'efficacité du stockage, garantisse l'accès aux modifications tout au long de l'histoire du projet, améliore le support des révisions de code et utilise l'API pour l'automatisation des flux de travail. De plus, l'utilisation de Git et GitHub rend le projet plus attrayant pour les débutants et les développeurs habitués à Git.

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

  • Un module expérimental jdk.incubator.vector a été ajouté, mettant en œuvre l'API Vector qui fournit des fonctionnalités pour les calculs vectoriels 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.
  • Dans le code JDK et la VM HotSpot, écrit en C++, il est désormais possible d'utiliser les fonctionnalités introduites dans la spécification C++14. Auparavant, seuls les standards C++98/03 étaient autorisés.
  • Le ramasse-miettes ZGC (Z Garbage Collector), fonctionnant en mode passif et minimisant autant que possible les délais dus à la collecte des ordures, a été amélioré pour permettre le traitement parallèle des piles de threads sans suspendre l'exécution des threads d'application. Dans ZGC, seules les opérations nécessitant une suspension, qui ont des délais constants ne dépassant généralement pas quelques centaines de microsecondes, subsistent.
  • Les classes SocketChannel, ServerSocketChannel et java.nio.channels ont ajouté la prise en charge des sockets Unix (AF_UNIX).
  • Un port pour la distribution Linux Alpine avec la bibliothèque standard C musl, populaire dans les environnements de conteneurs, de microservices, d'applications cloud et embarquées, a été réalisé. Ce port proposé dans ces environnements permet d'exécuter des programmes Java comme des applications classiques. De plus, grâce à jlink, il est possible d'éliminer tous les modules non utilisés et de former un environnement minimal suffisant pour exécuter l'application, créant ainsi des images compactes spécifiques à chaque application.
  • Un mécanisme Elastic Metaspace a été mis en œuvre, optimisant les opérations d'allocation et de retour de mémoire occupée par les métadonnées des classes (metaspace) dans la JVM HotSpot. L'application d'Elastic Metaspace réduit la fragmentation de la mémoire, diminue les frais généraux dans le chargeur de classes, et améliore la performance des applications serveur de longue durée grâce à un retour plus rapide à l'OS de la mémoire occupée par les métadonnées non utilisées. Une option « -XX:MetaspaceReclaimPolicy=(balanced|aggressive|none) » a été proposée pour choisir le mode de libération de mémoire après le déchargement des classes.
  • Ajout d'un port JDK pour les systèmes Windows fonctionnant sur du matériel basé sur l'architecture AArch64.
  • Proposition d'une troisième version préliminaire de l'API Foreign-Memory Access, permettant aux applications Java d'accéder de manière sécurisée et efficace aux zones mémoire en dehors du tas Java, en manipulant les nouvelles abstractions MemorySegment, MemoryAddress et MemoryLayout.
  • Mise en œuvre d'une API expérimentale Foreign Linker, offrant un accès depuis Java au code natif. Avec l'API Foreign-Memory, cette nouvelle interface facilite considérablement la création de liaisons avec des bibliothèques partagées ordinaires.
  • Ajout de l'outil jpackage, permettant de créer des packages pour des applications Java autonomes. Cet outil est basé sur javapackager de JavaFX et permet de générer des packages dans des formats natifs pour différentes plateformes (msi et exe pour Windows, pkg et dmg pour macOS, deb et rpm pour Linux). Les packages incluent toutes les dépendances nécessaires.
  • La stricte encapsulation de tous les éléments internes du JDK est activée par défaut, sauf pour les API critiques telles que sun.misc.Unsafe. La valeur de l'option « --illegal-access » est désormais par défaut réglée sur « deny » au lieu de « permit », ce qui bloquera les tentatives d'accès au code à la plupart des classes, méthodes et champs internes. Pour contourner cette restriction, vous devez utiliser l'option « --illegal-access=permit ».
  • Stabilisation de l'implémentation du pattern matching dans l'opérateur « instanceof », permettant de définir directement une variable locale pour accéder à la valeur vérifiée. Par exemple, vous pouvez écrire directement « if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..} » sans définir explicitement « String s = (String) obj ». Avant : if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Maintenant, il est possible de se passer de la définition « Group group = (Group) obj » : if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Stabilisation de l'implémentation du mot-clé « record », fournissant une forme compacte pour la définition des classes, permettant de se passer de la définition explicite de diverses méthodes de bas niveau telles que equals(), hashCode() et toString(), dans les cas où les données sont uniquement stockées dans des champs, dont le comportement ne change pas. Lorsque des implémentations typiques des méthodes equals(), hashCode() et toString() sont utilisées dans la classe, il est possible de se passer de leur définition explicite : public record BankTransaction(LocalDate date, double amount, String description) {}

    Cette déclaration entraînera l'ajout automatique des implémentations des méthodes equals(), hashCode() et toString() en plus du constructeur et des méthodes contrôlant la modification des données (getter).

  • Une deuxième version préliminaire des classes et interfaces scellées a été proposée, qui ne peuvent pas être utilisées par d'autres classes et interfaces pour l'héritage, l'extension ou la redéfinition de l'implémentation. Les classes scellées fournissent également un moyen plus déclaratif de limiter l'utilisation de la superclasse que les modificateurs d'accès, basé sur l'énumération explicite des sous-classes autorisées à être étendues. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

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