Nouveautés de java 8

fbeaufume 9,732 views 34 slides Feb 02, 2018
Slide 1
Slide 1 of 34
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34

About This Presentation

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


Slide Content

Nouveautés de Java 8 et aperçu de Java 9 Florian Beaufumé 03/2017

Florian Beaufumé Architecte logiciel Expert Java Freelance @ fbeaufume www.adeliosys.fr www.slideshare.net/fbeaufume/presentations www.brownbaglunch.fr/baggers.html#florian-beaufume

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

Java 8

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

Date and time API

Méthodes par défaut et méthodes statiques Interfaces

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

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

Interfaces fonctionnelles ( 3 /3)

Références de méthode (1/2)

Cas d’usage : Références de méthode (2/2)

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

Pour traiter des séquences d’éléments Streams

Pour aplatir des collections : { { « A », « B »}, { }, {« C »} } => { « A », « B », « C » } flatMap

API fonctionnelle pour gérer null Optional (1/2)

Itérer sur des optional Optional (2/2)

Définition : Utilisation : Cas d’usages : Lisibilité du code Supporté par la R eflection API, e.g .: field.getAnnotatedType () Exploitable via Java Annotation Processor comme Checker Framework Annotation de types

Interpréteur JavaScript, remplace Rhino de Java 6 Ligne de commande «  jjs  » ou API Nashorn

Adder , somme cumulée performante Accumulator , généralisation de l' Adder Adders et accumulators

StampedLock (1/2) synchronized s ynchronized (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

StampedLock (2/2)

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)

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)

Classe qui implémente Future Pour combiner/chainer des actions CompletableFuture

Divers

Java 9

P rojet «  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

HttpClient : client HTTP/2 sync ou async Collections : Processus : API (1/2)

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

REPL ( Read- Evaluate - Print -Loop ) en ligne de commande JShell

JMH, Java Microbenchmark Harness

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 www.adeliosys.fr fr.slideshare.net/ fbeaufume Merci
Tags