Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nouveautés de Java 8

Nouveautés de Java 8

Présentations des nouveautés principales de Java 8 (programmation fonctionnelle, lambdas, streams, Date/Time, CompletableFuture, etc) et introduction à celles de Java 9.

Florian Beaufumé

March 01, 2017
Tweet

More Decks by Florian Beaufumé

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. • 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

    View Slide

  4. Java 8

    View Slide

  5. • 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

    View Slide

  6. Date and time API

    View Slide

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

    View Slide

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

    View Slide

  9. • 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

    View Slide

  10. Interfaces fonctionnelles (3/3)
    @fbeaufume

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. • 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

    View Slide

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

    View Slide

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

    View Slide

  21. 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

    View Slide

  22. StampedLock (2/2)
    @fbeaufume

    View Slide

  23. • 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

    View Slide

  24. • 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

    View Slide

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

    View Slide

  26. Divers
    @fbeaufume

    View Slide

  27. Java 9

    View Slide

  28. • 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. JMH, Java Microbenchmark Harness
    @fbeaufume

    View Slide

  33. • 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

    View Slide

  34. Merci
    @fbeaufume

    View Slide