Résumé des nouvelles fonctionnalités de Java 10

Java 10 sortira. Il n'y avait pas de Java 9! Cependant, je ne suis pas sûr du type de fonction dont il dispose, je vais donc le résumer. C'est comme une brève introduction aux JEP alignés ici. http://openjdk.java.net/projects/jdk/10/

Les modifications autres que JEP, telles que l'ajout d'API, sont résumées ici. Résumé des modifications autres que JEP dans Java 10 --Qiita

Tous les changements sont résumés ici. 109 New Features In JDK 10 - Azul Systems, Inc.

Cliquez ici pour télécharger OpenJDK JDK 10 GA Release

Cliquez ici pour télécharger le JDK Oracle Java SE Development Kit 10- - Downloads

286: Local-Variable Type Inference http://openjdk.java.net/jeps/286

Le changement le plus important et le seul dans l'écriture de code est probablement l'inférence de type de variable locale.

var str = "123";
var list = List.of("123");

Vous pourrez écrire comme ça. Normalement, lorsque vous l'utilisez lors de l'écriture de code, vous ne connaissez souvent pas le type de la variable, et il est facile de ne pas aimer ne pas connaître le type que vous connaissiez jusqu'à présent, donc je pense qu'il y a peu de situations qui peuvent être utilisées de manière inattendue. Est-il possible de l'utiliser pour le moment lorsque le type est explicite dans une certaine mesure comme suit?

var strs = new ArrayList<String>(); //Nouveau
var props = (Map<String, List<String>>)input.getAsObject("props"); //jeter
var map = Map.of("apple", "pomme",
                 "grape", "Grain de raisin"); //Usine ou constructeur

En résumé, si le type est écrit sur le côté droit, il n'est pas nécessaire sur le côté gauche et var peut être utilisé, sinon var n'est pas utilisé.

Cependant, il est inconditionnellement pratique dans JShell.

Il y a un argument lambda où var semble fonctionner mais pas.

Stream.of("abc").forEach(s -> System.out.println(s));

Est

Stream.of("abc").forEach((String s) -> System.out.println(s));

Il s'agit d'une inférence de type

Stream.of("abc").forEach((var s) -> System.out.println(s));

Ne peut pas être écrit. Eh bien, c'est une inférence de type de variable locale, et l'argument lambda n'est pas une variable locale, donc il ne peut pas être utilisé. Eh bien, il semble qu'il peut être utilisé, donc à partir de Java 11, vous pouvez utiliser var avec des arguments lambda.

De plus, avec l'introduction de var, les spécifications du langage ont changé de temps en temps. En gros, var est introduit comme un type de réservation et non comme un mot de réservation. Ainsi, vous pouvez utiliser var pour les noms de variables, les noms de méthodes et les noms de packages, mais vous ne pouvez plus utiliser var pour les noms de classes. Dans la spécification du langage, l'identificateur de type est introduit à la place de l'identificateur pour les types, et la partie dans laquelle le type peut être écrit est passée de l'identificateur à l'identificateur de type.

Vous pouvez également le faire.

var anon = new Object() {
    private int a() {
        return 3;
    }
};
System.out.println(anon.a());

Au fait

var s = List.of("a", 1);

La compilation de code avec l'option -g provoque le blocage de javac dans la build 46.

Ce sont ok.

var t = List.of("a");
var u = List.of("a", 1, Optional.empty());
var v = List.of("a", 1, List.of());

Bitterfox nous a déjà envoyé un patch.

296: Consolidate the JDK Forest into a Single Repository http://openjdk.java.net/jeps/296

Donc, à partir de maintenant, cela n'a plus vraiment d'importance lors de l'écriture de code, alors diffusons-le rapidement. JEP 296 intègre le référentiel sur OpenJDK. Il suit la tendance des référentiels uniques récents. Jusqu'à présent, obtenir la source d'OpenJDK était comme collecter à partir de divers référentiels avec un script, mais maintenant vous pouvez obtenir la source avec une seule commande Mercurial. Je pense que le développement sera plus facile.

Comme vous pouvez le voir en regardant le référentiel JDK9, chacun contient 7 référentiels. http://hg.openjdk.java.net/jdk9

L'ancien référentiel reste dans JDK10, mais il est intégré dans master. http://hg.openjdk.java.net/jdk10

Et comme les référentiels ont été intégrés, on a l'impression de créer chaque référentiel de versions sous le projet jdk, qui était autrefois un projet distinct pour chaque version. http://hg.openjdk.java.net/jdk

304: Garbage-Collector Interface http://openjdk.java.net/jeps/304

Nous avons introduit une interface GC pour rendre le GC indépendant de la JVM. Cela augmente la modularité du GC, ce qui facilite l'ajout et la suppression de GC. En Java 11, un joli GC appelé Epsillon GC (GC qui ne libère pas du tout de mémoire) est également inclus, ZGC devient open source, Shenandoah etc., je pense qu'il sera plus facile de déplacer le GC dans le futur.

307: Parallel Full GC for G1 http://openjdk.java.net/jeps/307

Le pire des cas de latence dans G1GC doit être amélioré en parallélisant Full GC. G1GC est devenu la valeur par défaut de Java 9, mais il semble que le GC parallèle, qui est le GC par défaut jusqu'à Java 8, faisait Full GC en parallèle, de sorte que la migration peut être facilitée.

310: Application Class-Data Sharing http://openjdk.java.net/jeps/310

En rendant le partage de données de classe (CDS) introduit dans JDK5 disponible pour les classes d'application, les métadonnées de classe peuvent être partagées entre les processus Java, et le temps de démarrage et l'utilisation de la mémoire peuvent être améliorés.

312: Thread-Local Handshakes http://openjdk.java.net/jeps/312

Permet d'effectuer des rappels de thread individuels sans affecter le point de sécurité de l'ensemble de la machine virtuelle. Il semble que cela améliorera l'acquisition de trace de pile et GC.

313: Remove the Native-Header Generation Tool (javah) http://openjdk.java.net/jeps/313

Puisque Java 8 peut générer des en-têtes C pour JNI avec javac, javah sera supprimé.

314: Additional Unicode Language-Tag Extensions http://openjdk.java.net/jeps/314

java.util.Locale Prise en charge étendue des balises de langue BCP47 dans d'autres API. Ce qui était pris en charge par le calendrier ca et number nu dans Java 7 sera étendu pour prendre en charge la devise cu, le début hebdomadaire fw, la région rg et le fuseau horaire tz. ..

316: Heap Allocation on Alternative Memory Devices http://openjdk.java.net/jeps/316

Permet aux tas d'objets Java d'être placés sur d'autres périphériques de mémoire spécifiés par l'utilisateur, tels que les NV-DIMM. Les futurs systèmes auront une architecture de mémoire complexe avec de la mémoire comme 3D XPoint, qui utilisera non-DRAM avec des caractéristiques différentes en plus de la DRAM. À titre d'exemple d'application, on considère que le processus à haute priorité utilise la DRAM, le processus à faible priorité utilise NV-DIMM, ou NV-DIMM est utilisé pour le Big Data ou la base de données en mémoire.

317: Experimental Java-Based JIT Compiler http://openjdk.java.net/jeps/317

À titre de test, activez Graal, un compilateur JIT basé sur Java, sur les plates-formes Linux / x64. Bien que Graal soit la base de la pré-compilation (AoT) introduite dans JDK 9, il peut également être utilisé comme compilateur JIT pour explorer la prochaine étape du JIT basé sur Java.

319: Root Certificates http://openjdk.java.net/jeps/319

Dans l'état actuel des choses, OpenJDK n'a pas de certificat racine par défaut et les fonctions importantes pour la sécurité telles que TLS ne fonctionnaient pas, alors préparez un certificat racine pour faciliter le développement avec OpenJDK et faire la différence avec Oracle JDK. Il semble.

322: Time-Based Release Versioning http://openjdk.java.net/jeps/322

La description de la version sera révisée en réponse à la publication temporelle. Il a le format suivant. $FEATURE.$INTERIM.$UPDATE.$PATCH Avec la sortie semi-annuelle, «$ FEATURE» augmentera de 1 et «$ UPDATE» deviendra 0. «$ INTERIM» est toujours 0. Un $ UPDATE sera ajouté pour les versions de maintenance un mois et quatre mois après la sortie de la fonctionnalité. $ PATCH n'est normalement pas utilisé. La prochaine version en mars sera en octobre. La version en avril sera la 10.0.1. La version de juillet sera la 10.0.2 et la version de septembre la 11.

Ces numéros de version peuvent être obtenus avec feature (), ʻinterim () , patch () , ʻupdate () of java.lang.Runtime.Version.

Recommended Posts

Résumé des nouvelles fonctionnalités de Java 13
Résumé des nouvelles fonctionnalités de Java 10
Résumé des nouvelles fonctionnalités de Java 14
Java EE 8 (Jakarta EE 8) Résumé des nouvelles fonctionnalités
Résumé des connaissances Java
Résumé des génériques Java
Résumé relatif à Java
java1.8 nouvelles fonctionnalités
Résumé du document Java 8
Résumé du document Java 11
[Résumé] Par exemple, préparation de l'environnement Java
3ème résumé efficace de Java
Java statique [Résumé personnel]
Fonctionnalité d'expression lambda Java 8
Résumé des threads sûrs ~ Java ~
Résumé de la spécialisation des primitives Java
Résumé du lien de développement Java
Nouveautés de Java 8
Récapitulatif de la nouvelle fonction JSF2.3
résumé des expressions régulières java
Nouveautés de Java 9,10,11
Résumé du support Java 2018
Résumé du modèle de conception Java
Résumé du mot réservé Java
Résumé approximatif du flux Java8
Résumé des révisions (nouveaux problèmes de yuan) par version Java
Qu'est-ce que l'assertion Java? Résumé.
[Java] Nouvelle méthode de génération de threads (2)
[Java11] Résumé du flux -Avantages du flux-
Révision et résumé de Progate Java (débutant)
Nouvelles fonctionnalités de Java7 à Java8
[Java] Résumé des expressions régulières
[Java] Résumé des opérateurs (opérateur)
Flux Java8, résumé de l'expression lambda
Résumé orienté objet par les débutants (Java)
Astuces Java - Résumé de l'exécution de Spring
Résumé de la classe Java Math
Résumé des nouvelles fonctionnalités de PrimeFaces 6.0.x
[Java11] Résumé de l'utilisation du flux -Basics-
[Java] Résumé de la syntaxe de contrôle
Résumé du traitement des erreurs Java
[Java] Résumé des modèles de conception
[Java] Nouvelle méthode de génération de threads (1)
[Java] Résumé des opérations mathématiques
Nouvelle syntaxe pour les instructions Java 12 Switch
Considération sur le cadre de persistance Java 2017 (résumé) -1
[Pour les débutants] Résumé du constructeur java
Date de sortie de Java et résumé EOL
Résumé du package [Java Silver Study]
Nouvelles fonctionnalités de Java 9 et exemple de code
Résumé
Récapitulatif du problème Java "Pass by Reference"
Java
Résumé de la programmation orientée objet utilisant Java
Essayez Eclipse 4.7 Oxygen New 30+ / Java 10 var!
[Java Silver] Résumé des points de modification d'accès
Résumé de la session d’étude interne des recrues [Java]
Comment créer un résumé de calendrier Java
Mémorandum du nouveau diplômé SES [Java basics]
[java] Résumé de la gestion des caractères