Un nouvel ingénieur est allé à JJUG ~ "Fonctionnalité spéciale de la version Java SE 10 / JDK 10" (2018/03/26 (lundi)) ~
Annonce du modèle de version JDK
Mark Reinhold viendra au Japon pour une conférence de base lors du prochain Java Day Tokyo! ..
Le site d'inscription ouvrira bientôt!
JDK Examen du nouveau modèle de version
- OpenJDK
- Puisque le modèle de licence est GPL, il peut être fourni gratuitement.
- Même contenu que Oracle JDK
- Libérez tous les 6 mois
- Publication du patch tous les 3 mois
- OracleJDK
--Fourni uniquement moyennant des frais
――La période de support pour 1 version est de 8 ans
- Libérez tous les 3 ans
- Un nouveau modèle sera publié à partir de JDK11
- Empêchons le JDK d'être séparé d'Open et d'Oracle, d'être payant et gratuit, et le modèle de version de changer de JDK11.
Merci pour l'inférence de type de variable locale JDK10 David Buck
Localisation actuelle
--JDK 9 publié le 21 septembre 2017
- The Java Shell
--jdk10 version à court terme (le support prend fin en septembre de cette année), une version de développement.
--jdk11 publie le support à long terme (LTS)
- Recherche et développement actifs de nouveaux GC
- Une excellente chose avec un délai de 10 ms même avec un tas ZGC 4 To
- Projet Shenandoah Redhad, compactage simultané de la mémoire
--Projet Panama ... Interface de fonction Forgin Disposition de la mémoire
- Type de valeur du projet Valhalla, spécialisation générique
- Voyons s'il y a un projet Loom (vaisselle) etc.
Inférence de type de variable locale
Arraylist<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
//Viendra appeler comme ça
var list = new new ArrayList<>();
var stream = = list.stream();
** Notez que l'inférence de type n'est pas typée dynamiquement !!! **
Pourquoi maintenant?
--java a mis l'accent sur la lisibilité plutôt que sur l'écriture
- Dans le passé, il y avait de nombreux sauts de ligne
--Var le rend plus court et plus facile à lire. Seule la déclaration disparaît.
- Idem pour les autres langages C ++ ... auto, Scala ... var / val Go ...: =
Pourquoi seulement des variables locales?
- L'effet des arguments de champ et de méthode est qu'il s'étend sur plusieurs fichiers. Les variables locales sont complétées dans un fichier. Je ne veux pas voir un autre fichier pour l'inférence de type.
Comment utiliser
--Il existe diverses restrictions autres que l'utilisation de var
--Restrictions
- L'initialisation est requise
- Les parenthèses de tableau ne sont pas disponibles
- Les déclarations en petit nombre sont interdites
--Array littéral
--null initialisation
--Expression poly qui ne peut pas être résolue
--Peut être exprimé dans le langage des types dénotables (). -> Ne peut pas être représenté par java
var hogehoge = new Object() {
public void say(){~}
}
hogehoge.say();
Qu'est-ce que var?
- Mots réservés? Mots-clés?
--const et goto sont des mots réservés mais pas des mots-clés
- Mots clés ... Expressions qui signifient quelque chose dans la langue
- Les mots réservés ... ne peuvent pas être utilisés
--var ne peut pas être utilisé comme classe ou interface. On s'attendait à ce qu'il n'y ait pas de classe pour la var inférieure ...
--Peut être utilisé comme nom de variable ou nom de champ
int var = 1; ... ok
class var {
}... ng
var var = var();Compiler les passes!
Comment coder?
- Guide de style OPEN JDK publié
――J'écris quand utiliser var
- La lisibilité plutôt que l'écriture, à n'utiliser que lors de l'utilisation de var facilite la lecture
- Quand vous pouvez comprendre avec le code local
- Ne vous fiez pas à des outils tels que les IDE, ne dites pas que ça va parce que vous pouvez le voir avec une souris dessus!
- C'était un compromis pour déclarer explicitement le type, et la politique était d'utiliser des expressions lambda et de ne pas utiliser de classes internes anonymes. Mais cette fois ce n'est pas le cas. L'écriture de toutes les variables locales dans var est différente
--Comment utiliser?
- Utilisez des noms de variables qui représentent des informations utiles
- Limiter la portée des variables locales
- Pensez à utiliser var si vous ne connaissez le type qu'à partir de l'initialisation
- Utilisez var pour décomposer les appels consécutifs (souvent dans Stream)
- Vous n'avez pas à vous soucier de la programmation de l'interface (programmation de l'interface)
var List = new ArrayList<>();
- Soyez prudent lors de l'utilisation avec l'opérateur diamant et la méthode générique.
- Soyez prudent lorsque vous utilisez avec des littéraux.
Autre
- Il y a peu d'autres nouvelles fonctionnalités de java10, car il s'agit d'un court terme
--Garbage Collector Interface JIT, GC, HosSpotRuntime JIT et GC étaient impliqués. Le JDK a des interfaces GC et JIT séparées
- Pouvez-vous utiliser Full GC avec Parallel Full GC pour G1 G1?
--thread local hondshakes Chaque thread se réfère à lui-même Lorsque vous voulez arrêter un thread, vous n'avez pas à arrêter les autres threads.
--jacac -h ... Vous pouvez créer un fichier d'en-tête en même temps que créer un fichier de classe.
- Ajout du code de caractère de_DE_EURO allemand, Euro
- Allocation de tas sur un périphérique de mémoire alternatif Je veux utiliser java pour la mémoire ici! Etc.?
--À propos du compilateur JIT
NTT OSS Center Yuji Kubota Kishida "Comment java 10 va-t-il changer nos vies?"
Yushi Kubota
Kishida-san
12 nouveautés
--Docker a des API plus utiles
- Inconvénients ... Le coût de la mise à jour est élevé
- Déplacer et voir avec java 10
--Compiler avec Java 10
- Essayez d'utiliser jdeps jdeprscan ... Vérifiez si vous utilisez l'API des affaires internes ou l'API obsolète, et corrigez / mettez à jour
Collecte d'informations de java10
- Voir la nouvelle fonctionnalité JEP AppCDS @ OpenJDK
--API change View JSR
- Voir la version incompatible
--JEP310: Partage de données de classe d'application utilisé pour les lots, s'exécutant en grand nombre dans des conteneurs
Fonctionnalités commerciales du JDK Oracle
- AppCDS
- Resource Management
- Java Flight Recorder
- Java Misson Control
--Le GC complet de G1 GC, qui était une exécution à un seul thread, est parallélisé ... Puisqu'il s'agit d'un dernier recours, la situation d'abus elle-même n'est pas bonne.
Incompatibilité
--forRemoval = true sera supprimé dans la version suivante ou ultérieure
Améliorations des conteneurs Docker
- Correction d'un problème où l'installation et l'opération étaient effectuées en fonction du nombre de processeurs et de la mémoire de l'hôte sans reconnaître le conteneur -> Bien que la mémoire de Docker ne soit allouée que pour autant, la JVM alloue parce qu'elle regarde la machine Utilise plus de mémoire! Idem pour le processeur
--La quantité de mémoire système utilisée pour Hepi a été rendue flexible ... La notation a été changée en%. Facile à comprendre
- Amélioration pour pouvoir attacher aux processus sur le conteneur à partir de l'hôte
API
- Add
--java.util.Optional.orElseThrow () ... remplacement recommandé
- java.util.{LIST SET MAP} :: copyOf
- Si la collection d'arguments est modifiable, copiez-la et renvoyez la collection immuable. Une méthode qui renvoie la référence telle quelle si elle ne peut pas être modifiée
- L'ID de processus peut être obtenu
javadoc
--L'annotation @Summary a été créée. Le résumé sera certainement appliqué.
- Notation de l'entreprise, affichage de la licence qui peut être fait par en-tête et pied de page
--Override-méthodes
--policytool supprimé
--javah a supprimé java -h
Cela, impression
―― Ce que je pensais devoir retenir à partir de maintenant
--JVM, compilateur JIT, GC
――Je pensais que je devais me souvenir de l'expression lambda
--swing et AWT
«Je pouvais ressentir la confiance que les orateurs et le public connaissent java.
- Gardez à l'esprit que le JDK 10 ne peut pas être publié immédiatement et que vous devez vous préparer au JDK 11.
- L'histoire de la découverte d'un bogue dans Java JDK 10 ... Kishida no Hatena
- La production doit utiliser Long time Record après tout
- Vous pouvez accéder au rapport de bogue une fois que vous l'avez soumis à ML.
――Si le seuil est élevé, il peut être bon de tweeter sur Twitter.
Le transfert --java8-> 9 est très incompatible. Il semble que ce soit devenu un livre compatible d'environ 350p.
--Il existe un tel HP JJUG (j'ai d'abord entendu parler de Jay Jug) HP de JJUG