Slide 1

Slide 1 text

Nouveautés de Java 8 et aperçu de Java 9 Florian Beaufumé @fbeaufume 03/2017 v1.1

Slide 2

Slide 2 text

Florian Beaufumé • Architecte logiciel et expert Java • Freelance • Brown bag lunch • @fbeaufume

Slide 3

Slide 3 text

• Langage : • Numeric literals : long amount = 1_234_567L; • Diamond operator : List list = new ArrayList<>(); • String-in-switch : case "Monday": … • Try-with-resources : try (InputStream is = …) { … } • Multi catch : catch (IOException | MyException e) { … } • API : • Mises à jour de JAXP, JAXB, JAX-WS • New IO 2 : manipulations de fichiers et répertoires, WatchService, etc. • Fork/join : parallélisation de taches • InvokeDynamic : appels de langages tiers • Support Unicode 6 • Améliorations Swing : Nimbus L&F, transparence, etc. • JDBC 4.1 qui supporte try-with-resources Résumé des nouveautés de Java 7 @fbeaufume

Slide 4

Slide 4 text

Java 8

Slide 5

Slide 5 text

• Langage : • Méthodes par défaut et statiques dans les interfaces • Références de méthode • Expressions lambda • Annotations de type • API • Date and time API • Interfaces fonctionnelles • Stream API • Améliorations dans la gestion de concurrence • Nashorn , un nouveau moteur JavaScript • Unicode 6.2, JDBC 4.2, JAXP 1.6, etc. • Base 64 encoder et decoder Vue d’ensemble @fbeaufume

Slide 6

Slide 6 text

Date and time API

Slide 7

Slide 7 text

• Méthodes par défaut et méthodes statiques Interfaces @fbeaufume

Slide 8

Slide 8 text

• Annotée @FunctionalInterface et avec une seule méthode abstraite Interfaces fonctionnelles (1/3) @fbeaufume

Slide 9

Slide 9 text

• Exemples de fonctions dans java.util.function : Interfaces fonctionnelles (2/3) Interface Entrées Sortie Consumer T Supplier T Predicate T boolean Function T R IntFunction int R BiFunction T, U R @fbeaufume

Slide 10

Slide 10 text

Interfaces fonctionnelles (3/3) @fbeaufume

Slide 11

Slide 11 text

Références de méthode (1/2) @fbeaufume

Slide 12

Slide 12 text

• Cas d’usage : Références de méthode (2/2) @fbeaufume

Slide 13

Slide 13 text

• Format : ([type1] arg1, [type2] arg2...) -> { body } Expressions lambda @fbeaufume

Slide 14

Slide 14 text

• Pour traiter des séquences d’éléments Streams @fbeaufume

Slide 15

Slide 15 text

• Pour aplatir des collections : • { { « A », « B »}, { }, {« C »} } => { « A », « B », « C » } flatMap @fbeaufume

Slide 16

Slide 16 text

• API fonctionnelle pour gérer null Optional (1/2) @fbeaufume

Slide 17

Slide 17 text

• Itérer sur des optional Optional (2/2) @fbeaufume

Slide 18

Slide 18 text

• Définition : • Utilisation : • Cas d’usages : • Lisibilité du code • Supporté par la Reflection API, e.g.: field.getAnnotatedType() • Exploitable via Java Annotation Processor comme Checker Framework Annotation de types @fbeaufume

Slide 19

Slide 19 text

• Interpréteur JavaScript, remplace Rhino de Java 6 • Ligne de commande « jjs » ou API Nashorn @fbeaufume

Slide 20

Slide 20 text

• Adder, somme cumulée performante • Accumulator, généralisation de l'Adder Adders et accumulators @fbeaufume

Slide 21

Slide 21 text

StampedLock (1/2) synchronized synchronized (W) et volatile ReentrantLock ReentrantRWLock StampedLock Simplicité Bonnes perfs en lecture Ajout de fonctionnalités (timed wait, try lock, etc.) Bonnes perfs en lecture Bonnes perfs, fonctionnalités (upgrade de lock R en W, etc.) Fonctionnalités

Slide 22

Slide 22 text

StampedLock (2/2) @fbeaufume

Slide 23

Slide 23 text

• Execution dans le ForkJoinPool commun • Parallélisme du ForkJoinPool commun : • Property -Djava.util.concurrent.ForkJoinPool.common.parallelism=7 • Sinon Runtime.getRuntime().availableProcessors() - 1 • Le thread courant aussi est utilisé • Ou dans un ForkJoinPool custom Parallel streams (1/2) @fbeaufume

Slide 24

Slide 24 text

• Pas toujours plus performant, varie suivant : • Type de collection : ArrayList plutôt que LinkedList • Nature du traitement • Taille de "N*Q" (nb d'élément * cout par élément) • Nombre de cœurs, il faut > 1 • Mesurer les deux • Par défaut utilisent tous le ForkJoinPool commun • Attention aux lambdas stateful Parallel streams (2/2) @fbeaufume

Slide 25

Slide 25 text

• Classe qui implémente Future • Pour combiner/chainer des actions CompletableFuture @fbeaufume

Slide 26

Slide 26 text

Divers @fbeaufume

Slide 27

Slide 27 text

Java 9

Slide 28

Slide 28 text

• Projet « Jigsaw » • Identification explicite des dépendances • Séparation des composants publics vs privés • Réduction de la taille de du JDK pour certains systèmes • Modularisation du JDK en 85 modules Java Platform Module System @fbeaufume

Slide 29

Slide 29 text

• HttpClient : client HTTP/2 sync ou async • Collections : • Processus : API (1/2) @fbeaufume

Slide 30

Slide 30 text

• I/O : • Stack : • Améliorations diverses : • Stream : dropWhile, takeWhile… • Optional : or, stream, ifPresentOrElse… • CompletableFuture : copy, orTimeout, delayedExecutor… API (2/2) @fbeaufume

Slide 31

Slide 31 text

• REPL (Read-Evaluate-Print-Loop) en ligne de commande JShell @fbeaufume

Slide 32

Slide 32 text

JMH, Java Microbenchmark Harness @fbeaufume

Slide 33

Slide 33 text

• Doc « cherchable » : • Garbage collector : • « G1 » par défaut • Changements dans les flags mémoire • Nouveau format de log • Support Unicode 7.0 et 8.0 • Nouveau renderer 2D, Marlin • Amélioration du stockage des String • Nouvelle structure des fichiers de JDK/JRE • Etc… Divers @fbeaufume

Slide 34

Slide 34 text

Merci @fbeaufume