Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Nouveautés de java 8

3,352 views

Published on

Présentation des nouveautés principales de Java 8 ainsi qu'un aperçu de celles de Java 9

Published in: Technology

Nouveautés de java 8

  1. 1. Nouveautés de Java 8 et aperçu de Java 9 Florian Beaufumé 03/2017
  2. 2. Florian Beaufumé • Architecte logiciel • Expert Java • Freelance • @fbeaufume • www.adeliosys.fr • www.slideshare.net/fbeaufume/presentations • www.brownbaglunch.fr/baggers.html#florian-beaufume
  3. 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
  4. 4. Java 8
  5. 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
  6. 6. Date and time API
  7. 7. • Méthodes par défaut et méthodes statiques Interfaces
  8. 8. • Annotée @FunctionalInterface et avec une seule méthode abstraite Interfaces fonctionnelles (1/3)
  9. 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
  10. 10. Interfaces fonctionnelles (3/3)
  11. 11. Références de méthode (1/2)
  12. 12. • Cas d’usage : Références de méthode (2/2)
  13. 13. • Format : ([type1] arg1, [type2] arg2...) -> { body } Expressions lambda
  14. 14. • Pour traiter des séquences d’éléments Streams
  15. 15. • Pour aplatir des collections : • { { « A », « B »}, { }, {« C »} } => { « A », « B », « C » } flatMap
  16. 16. • API fonctionnelle pour gérer null Optional (1/2)
  17. 17. • Itérer sur des optional Optional (2/2)
  18. 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
  19. 19. • Interpréteur JavaScript, remplace Rhino de Java 6 • Ligne de commande « jjs » ou API Nashorn
  20. 20. • Adder, somme cumulée performante • Accumulator, généralisation de l'Adder Adders et accumulators
  21. 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. 22. StampedLock (2/2)
  23. 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)
  24. 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)
  25. 25. • Classe qui implémente Future • Pour combiner/chainer des actions CompletableFuture
  26. 26. Divers
  27. 27. Java 9
  28. 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
  29. 29. • HttpClient : client HTTP/2 sync ou async • Collections : • Processus : API (1/2)
  30. 30. • I/O : • Stack : • Améliorations diverses : • Stream : dropWhile, takeWhile… • Optional : or, stream, ifPresentOrElse… • CompletableFuture : copy, orTimeout, delayedExecutor… API (2/2)
  31. 31. • REPL (Read-Evaluate-Print-Loop) en ligne de commande JShell
  32. 32. JMH, Java Microbenchmark Harness
  33. 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
  34. 34. @fbeaufume www.adeliosys.fr fr.slideshare.net/fbeaufume Merci

×