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
  2. • 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
  3. • 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
  4. • 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
  5. • Pour aplatir des collections : • { { «

    A », « B »}, { }, {« C »} } => { « A », « B », « C » } flatMap @fbeaufume
  6. • 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
  7. • Interpréteur JavaScript, remplace Rhino de Java 6 • Ligne

    de commande « jjs » ou API Nashorn @fbeaufume
  8. 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
  9. • 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
  10. • 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
  11. • 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
  12. • HttpClient : client HTTP/2 sync ou async • Collections

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

    • Stream : dropWhile, takeWhile… • Optional : or, stream, ifPresentOrElse… • CompletableFuture : copy, orTimeout, delayedExecutor… API (2/2) @fbeaufume
  14. • 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