Version Java SE 14

Après six mois de développement, Oracle libéré la plateforme Java SE14 (Java Platform, Standard Edition 14), le projet open source OpenJDK est utilisé comme implémentation de référence. Java SE 14 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. Versions Java SE 14 prêtes à installer (JDK, JRE et Server JRE) préparé pour Linux (x86_64), Windows et macOS. Implémentation de référence développée par le projet OpenJDK Java 14 est entièrement open source sous licence GPLv2, avec des exceptions GNU ClassPath permettant une liaison dynamique avec des produits commerciaux.

Java SE 14 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 précédente branche LTS de Java 8 sera prise en charge jusqu'en décembre 2020. 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.

De nouveautés Java 14 on peut marque:

  • Ajout du support expérimental correspondance de motifs dans l'opérateur « instanceof », qui permet de définir immédiatement une variable locale pour accéder à 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 ».

    C'était:

    if (obj instanceof Group) {
    Groupe groupe = (Groupe) obj ;
    var entrées = group.getEntries();
    }

    Vous pouvez désormais vous passer de la définition « Group group = (Group) obj » :

    if (obj instanceof Group group) {
    var entrées = group.getEntries();
    }

  • Ajout d'un support expérimental pour le nouveau mot-clé "record", qui fournit une forme compacte pour définir les classes, vous permettant d'éviter 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 uniquement dans des champs dont le comportement 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 :

    enregistrement public BankTransaction (date LocalDate,
    double montant
    Description de la chaîne) {}

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

  • Standardisé et la prise en charge d'une nouvelle forme d'expressions « switch » est activée par défaut, qui ne nécessite pas de spécifier l'opérateur « break », vous permet de combiner des étiquettes répétées et peut être utilisée non seulement sous la forme d'un opérateur, mais également comme un expression.

    var log = commutateur (événement) {
    cas PLAY -> « L'utilisateur a déclenché le bouton de lecture » ;
    cas STOP, PAUSE -> « L'utilisateur a besoin d'une pause » ;
    par défaut -> {
    Message de chaîne = event.toString();
    LocalDateTime maintenant = LocalDateTime.now();
    rendement "Événement inconnu" + message +
    » connecté » + maintenant ;
    }
    };

  • Support expérimental étendu blocs de texte - une nouvelle forme de chaîne littérale qui vous permet d'inclure des données de texte multilignes dans le code source sans utiliser d'échappement de caractères et en préservant le formatage du texte d'origine dans le bloc. Le bloc est encadré par trois guillemets doubles. Dans Java 14, les blocs de texte prennent désormais en charge la séquence d'échappement "\s" pour définir un seul espace et "\" pour concaténer avec la ligne suivante (en ignorant les nouvelles lignes lorsque vous devez imprimer une très longue ligne). Par exemple, au lieu du code

    Chaîne html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 est là !\" » +
    "\n\t" + " » +
    "\n" + " " ;

    vous pouvez préciser :

    Chaîne html = """


    » Java 1\
    est là!

    """ ;

  • Le contenu informatif des diagnostics en cas d'exceptions a été étendu NullPointerException. Alors qu'auparavant le message d'erreur faisait uniquement référence au numéro de ligne, il détaille désormais quelle méthode a provoqué l'exception. Les diagnostics avancés sont actuellement activés uniquement lorsqu'ils sont lancés avec l'indicateur « -XX:+ShowCodeDetailsInExceptionMessages ». Par exemple, lors de la spécification de cet indicateur, l'exception dans la ligne

    var nom = user.getLocation().getCity().getName();

    entraînera un message

    Exception dans le thread "main" java.lang.NullPointerException : impossible d'invoquer "Location.getCity()"
    car la valeur de retour de "User.getLocation()" est nulle
    à NullPointerExample.main(NullPointerExample.java:5):5)

    ce qui indique clairement que la méthode Location.getCity() n'a pas été appelée et que User.getLocation() a renvoyé null.

  • Mis en œuvre Un aperçu 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.
  • Vers le garbage collector G1 ajoutée un nouveau mécanisme d'allocation de mémoire qui prend en compte les spécificités du travail sur les grands systèmes utilisant l'architecture NUMA. Le nouvel allocateur de mémoire est activé à l'aide de l'indicateur « +XX:+UseNUMA » et peut améliorer considérablement les performances sur les systèmes NUMA.
  • Добавлен API de suivi à la volée des événements JFR (JDK Flight Recorder), par exemple pour organiser un suivi continu.
  • Добавлен Module jdk.nio.mapmode, qui propose de nouveaux modes (READ_ONLY_SYNC, WRITE_ONLY_SYNC) pour créer des tampons d'octets mappés (MappedByteBuffer) référençant la mémoire non volatile (NVM).
  • Mis en œuvre Un aperçu de l'API Foreign-Memory Access, 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.
  • Annoncé ports obsolètes pour le système d'exploitation Solaris et les processeurs SPARC (Solaris/SPARC, Solaris/x64 et Linux/SPARC) avec l'intention de supprimer ces ports à l'avenir. La dépréciation de ces ports permettra à la communauté d'accélérer le développement de nouvelles fonctionnalités OpenJDK sans perdre de temps à maintenir les fonctionnalités spécifiques à Solaris et SPARC.
  • Supprimé le garbage collector CMS (Concurrent Mark Sweep), qui a été marqué comme obsolète il y a deux ans et n'est pas maintenu (CMS a été remplacé il y a longtemps par le garbage collector G1). En plus, annoncé a rendu obsolète l'utilisation d'une combinaison d'algorithmes de récupération de place ParallelScavenge et SerialOld (exécutés avec les options « -XX:+UseParallelGC -XX:-UseParallelOldGC »).
  • La prise en charge expérimentale du garbage collector ZGC (Z Garbage Collector) a été fournie sur les plates-formes macOS et Windows (auparavant uniquement prise en charge sous Linux). ZGC fonctionne en mode passif, minimise autant que possible la latence due au garbage collection (le temps de blocage lors de l'utilisation de ZGC ne dépasse pas 10 ms) et peut fonctionner avec des tas petits et énormes, dont la taille varie de plusieurs centaines de mégaoctets à plusieurs téraoctets.
  • Supprimé Boîte à outils et API pour compresser les fichiers JAR à l'aide de l'algorithme Pack200.

Source: opennet.ru

Ajouter un commentaire