$30 off During Our Annual Pro Sale. View Details »

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
  2. Florian Beaufumé • Architecte logiciel et expert Java • Freelance

    • Brown bag lunch • @fbeaufume
  3. • Langage : • Numeric literals : long amount =

    1_234_567L; • Diamond operator : List<String> 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
  4. Java 8

  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
  6. Date and time API

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

  8. • Annotée @FunctionalInterface et avec une seule méthode abstraite Interfaces

    fonctionnelles (1/3) @fbeaufume
  9. • Exemples de fonctions dans java.util.function : Interfaces fonctionnelles (2/3)

    Interface Entrées Sortie Consumer<T> T Supplier<T> T Predicate<T> T boolean Function<T, R> T R IntFunction<R> int R BiFunction<T, U, R> T, U R @fbeaufume
  10. Interfaces fonctionnelles (3/3) @fbeaufume

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

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

  13. • Format : ([type1] arg1, [type2] arg2...) -> { body

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

  15. • Pour aplatir des collections : • { { «

    A », « B »}, { }, {« C »} } => { « A », « B », « C » } flatMap @fbeaufume
  16. • API fonctionnelle pour gérer null Optional (1/2) @fbeaufume

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

  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
  19. • Interpréteur JavaScript, remplace Rhino de Java 6 • Ligne

    de commande « jjs » ou API Nashorn @fbeaufume
  20. • Adder, somme cumulée performante • Accumulator, généralisation de l'Adder

    Adders et accumulators @fbeaufume
  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
  22. StampedLock (2/2) @fbeaufume

  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
  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
  25. • Classe qui implémente Future • Pour combiner/chainer des actions

    CompletableFuture @fbeaufume
  26. Divers @fbeaufume

  27. Java 9

  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
  29. • HttpClient : client HTTP/2 sync ou async • Collections

    : • Processus : API (1/2) @fbeaufume
  30. • I/O : • Stack : • Améliorations diverses :

    • Stream : dropWhile, takeWhile… • Optional : or, stream, ifPresentOrElse… • CompletableFuture : copy, orTimeout, delayedExecutor… API (2/2) @fbeaufume
  31. • REPL (Read-Evaluate-Print-Loop) en ligne de commande JShell @fbeaufume

  32. JMH, Java Microbenchmark Harness @fbeaufume

  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
  34. Merci @fbeaufume