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 full-size slide

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

    View full-size 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 full-size slide

  4. • 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 full-size slide

  5. Date and time API

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. • 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 full-size slide

  9. Interfaces fonctionnelles (3/3)
    @fbeaufume

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  17. • 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 full-size slide

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

    View full-size slide

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

    View full-size slide

  20. 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 full-size slide

  21. StampedLock (2/2)
    @fbeaufume

    View full-size slide

  22. • 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 full-size slide

  23. • 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 full-size slide

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

    View full-size slide

  25. Divers
    @fbeaufume

    View full-size slide

  26. • 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  30. JMH, Java Microbenchmark Harness
    @fbeaufume

    View full-size slide

  31. • 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 full-size slide

  32. Merci
    @fbeaufume

    View full-size slide