Nouveautés de Java 15

Java 15 est sortie! Elle est disponible depuis 15/09. Ci-dessous vous pouvez trouver la liste des fonctionnalités. Pour plus de détails vous pouvez visiter OpenJDK par rapport aux nouveautés de Java 15.

Vous pouvez télécharger un build ici.

Nouvelles fonctionnalités en Java 15

Aperçus (Preview)/ incubateur (incubator)

Une fonctionnalité d’aperçu est une fonctionnalité qui est conçue, spécifiée et implémentée mais non permanente.

Une fonction d’incubateur est expérimentale sous le package jdk.incubator pour permettre aux utilisateurs de fournir leurs commentaires.

Classes scellées (Sealed classes) (Aperçu)

JDK 15 améliore le langage de programmation Java avec des classes et des interfaces scellées. Les classes et interfaces scellées limitent les autres classes ou interfaces qui peuvent les étendre ou les implémenter.

Dans l’exemple ci-dessous, nous déclarons que la forme de classe autorise trois sous-classes spécifiques.

package com.example.geometry;

public sealed class Shape
    permits Circle, Rectangle, Square {...}

Correspondance de motifs (Pattern matching) par instanceof (Deuxième aperçu)

JDK 15 améliore le langage de programmation Java avec l’appariement des motifs pour l’opérateur instanceof. La correspondance des motifs permet d’exprimer une logique commune dans un programme, à savoir l’extraction conditionnelle de composants à partir d’objets, de manière plus concise et sécuritaire. Il s’agit d’une fonctionnalité d’aperçu dans JDK 15.

Le but de cette fonctionnalité est de se débarrasser du code répétitif et standard. Regardons un exemple.

Souvent, nous devons faire quelque chose de similaire à cette

if (obj instanceof Integer) {
    Integer i = (Integer) obj;
    // do something with i
}

Cela est sujet à des erreurs et un peu répétitif. Il y a des plusieurs déclarations de Integer ici. A partir de JDK 15, avec cette fonctionnalité, nous pouvons faire le suivant:

if (obj instanceof Integer i) {
    // faire quelque chose avec i
} else {
    // impossibilité de faire quelque chose avec i ici
}

Les travaux futurs sur ce JEP incluront la même logique pour d’autres instructions comme l’instruction de switch.

Enregistrements (Records) (Deuxième aperçu)

Les enregistrements (records), qui sont des classes qui agissent comme des porteurs transparents pour les données immuables. Les enregistrements peuvent être considérés comme des tuples nominaux. Regardons un exemple ci-dessous:

final class Person{
    public final String firstname;
    public final String lastname;

    public Person(String firstname, String lastname) {
        this.firstname = firstname;
        this.lastname = lastname;
    }

    // ici on doit implementer equals, hashCode, toString
    // qui est du code répétitif et standard

Personne veut écrire ce type de code. Le but de la fonctionnalité enregistrements est d’offrir un syntax plus compact est clair comme décrit ci-dessous:

record Person(String firstname, String lastname) { }

API d’accès à la mémoire étrangère (deuxième incubateur)

L’API d’accès à la mémoire étrangère (Foreign memory access API) permet aux programmes Java d’accéder de manière sûre et efficace à la mémoire étrangère en dehors du Java heap. Le but principal est d’éviter le coût et l’imprévisibilité lié au garbage collection (spécialement quand il y a de caches larges). Un autre objectif est de partager la mémoire dans des processus multiples. Cette fonctionnalité intégre trois abstractions: MemorySegmentMemoryAddress, and MemoryLayout.

  • MemorySegment est une région de mémoire contigu
  • MemoryAddress modelise une adresse
  • MemoryLayout est une déscription du contenu d’un segment

Voici un exemple d’un MemorySegment associé à buffer de mémoire de 100 octets:

try (MemorySegment segment = MemorySegment.allocateNative(100)) {
   ...
}

Fonctionnalités indépendantes

Algorithme de signature numérique Edwards-Curve (EdDSA)

Dans la cryptographie à clé publique, Edwards-Curve Digital Signature Algorithm est un schéma mathématique pour vérifier l’authenticité des messages numériques. Cette fonctionnalité implémente des signatures cryptographiques à l’aide de l’algorithme de signature numérique Edwards-Curve (EdDSA) tel que décrit par RFC 8032.

//exemple : générer une paire de clés et signer
KeyPairGenerator kpg = KeyPairGenerator.getInstance(« Ed25519 »);
KeyPair kp = kpg.generateKeyPair();
// algorithme est Ed25519
Signature sig = Signature.getInstance(« Ed25519 »);
sig.initSign(kp.getPrivate());
sig.update(msg);
octe[]t s = sig.sign();

// example: utiliser KeyFactory pour construire une clé publique
KeyFactory kf = KeyFactory.getInstance("EdDSA");
boolean xOdd = ...
BigInteger y = ...
NamedParameterSpec paramSpec = new NamedParameterSpec("Ed25519");
EdECPublicKeySpec pubSpec = new EdECPublicKeySpec(paramSpec, new EdPoint(xOdd, y));
PublicKey pubKey = kf.generatePublic(pubSpec);

Classes cachées (hidden classes)

Les classes cachées sont des classes qui ne peuvent pas être utilisées directement par le bytecode d’autres classes. Les classes masquées sont destinées à être utilisées par des cadres qui génèrent des classes au moment de l’exécution et les utilisent indirectement, via la réflexion. Une classe cachée peut être définie comme un membre d’un nid de contrôle d’accès et peut être déchargée indépendamment des autres classes.

Blocs de texte

Ce JDK ajoute des blocs de texte au langage Java. Un bloc de texte est un littéral de chaîne multi-lignes qui évite la nécessité de la plupart des séquences d’échappement, formate automatiquement la chaîne d’une manière prévisible et donne au développeur le contrôle sur le format lorsque vous le souhaitez.

Deprecated – Ré-développement

Suppression le moteur JavaScript Nashorn

Le moteur de script Nashorn JavaScript et les API, ainsi que l’outil jjs sont supprimés. Le moteur, les API et l’outil ont été déconseillés (deprecated) pour être retirés en Java 11 avec l’intention de les supprimer dans une version ultérieure. La raison en était que l’équipe considérait qu’il était difficile de maintenir.

Supprimer les ports Solaris et SPARC

Supprimez le code source et créez la prise en charge des ports Solaris/SPARC, Solaris/x64 et Linux/SPARC. Ces ports ont été deprecated à être retirés dans JDK 14 avec l’intention expresse de les supprimer dans un futur communiqué.

Activation RMI devient deprecated

Déprécier le mécanisme d’activation RMI pour la suppression future. RMI Activation est une partie obsolète de RMI qui a été facultative depuis Java 8. Aucune autre partie du RMI ne sera dépréciée.

Réimplémentation de l’API Legacy DatagramSocket

Remplacez les implémentations sous-jacentes des API java.net.DatagramSocket et java.net.MulticastSocket par des implémentations plus simples et plus modernes qui sont faciles à maintenir et à déboguer. Les nouvelles implémentations seront faciles à adapter pour travailler avec des threads virtuels, actuellement à l’étude dans Project Loom. Il s’agit d’une suite à JEP 353, qui a déjà réappliqué l’API Socket héritée.

Désactiver et déprécier le verrouillage biaisé

Désactivez le verrouillage biaisé par défaut et déprécient toutes les options de ligne de commande associées. Les gains de performance observés dans le passé sont beaucoup moins évidents aujourd’hui. Ce fait combiné à la difficulté de le maintenir a conduit à cette décision.

2 nouveaux Garbage Collectors

Garbage collector est un gestionnaire de mémoire automatique qui libère la mémoire en supprimant les objets qui ne sont plus nécessaires.

ZGC : un collecteur d’ordures évolutif à faible latence

Le projet ZGC a réellement commencé avec Java 11. Il s’agit d’un sujet complexe qui devait être introduit progressivement pour permettre aux utilisateurs de fournir leurs commentaires et d’avoir des bugs corrigés. En Java 15, cette fonctionnalité est considérée comme complète et prête à être utilisée en mode production.

ZGC peut être activé à l’aide des options de ligne de commande -XX:+UnlockExperimentalVMOptions -XX:+UseZGC.

Cette fonctionnalité offre ce collecteur d’ordures maintenant, mais ne change pas la valeur par défaut qui reste G1.

Shenandoah: Un collecteur d’ordures à faible pause-temps

Semblable à ZGC ici Shenandoah est un éboueur qui est prêt pour l’environnement de production. Il a été introduit comme expérimental en Java 12.

Il peut être activé avec xx:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC.

  • Cette fonctionnalité conserve le collecteur d’ordures G1 par défaut.
Nouveautés de Java 15
Java 15

Conclusion

Java 15 a plusieurs nouvelles fonctionnalités à offrir, comme chaque version. Cette version ajoute plus de valeur à java en raison de:

  • Suppression ou mise en place comme obsolète des anciennes bibliothèques et leur remplacement par des bibliothèques modernes
  • Deux nouveaux garbage collectors
  • Nouvelles fonctionnalités utiles (classes cachées, blocs de texte, enregistrements)

Il est toujours utile de mettre à jour la version pour se tenir à jour.

Si vous voulez lire plus java ou le développement des articles liés, consultez la page articles de strong-programmer.com .

Leave a Comment