SlideShare una empresa de Scribd logo
1 de 70
Descargar para leer sin conexión
#DevoxxFR 1
modulo
les
modules
Jean-Michel Doudoux @jmdoudoux
#Java9ModuloLesModules
Devoxx France 2017
#DevoxxFR
Le contenu de Java 9
LE gros morceau de Java 9
C’est le projet Jigsaw
Pour la mise en œuvre d’un système de modules
Avec toutes les contraintes que cela va induire
Ruptures (visibilité, accessibilité, organisation du code, …)
Mode de compatibilité (modules/classpath)
#Java9ModuloLesModules 2
#DevoxxFR
Le contenu de Java 9
Spécifications définies dans la JSR 379
+ JSR 376 (modules system), …
Intègre 89 JEPs
#Java9ModuloLesModules
Mais Java 9 propose de nombreuses autres fonctionnalités
• Dans le langage
• Dans les API
• Dans la plate-forme
• Dans la JVM
3
#DevoxxFR 4
Jean-Michel Doudoux
http://www.jmdoudoux.fr
@jmdoudoux
Co-fondateur du , membre du
Auteur de 2 didacticiels
Diffusés sous licence GNU FDL
• Développons en Java (3400 pages)
• Développons en Java avec Eclipse
CTO chez
#Java9ModuloLesModules
#DevoxxFR
Roadmap
5
• Les changements mineurs dans le langage
• De nouvelles API
• Des évolutions dans les API
• Des mises à jour des outils du JDK
• Des améliorations dans la JVM
• Le support de standards
• Des fonctionnalités diverses
• Les fonctionnalités deprecated ou retirées
• Les fonctionnalités reportées
#Java9ModuloLesModules
#DevoxxFR 6
Les changements
mineurs
dans le langage
#Java9ModuloLesModules
#DevoxxFR
JEP 213 : Milling project Coin
Quelques petites améliorations dans le langage
#Java9ModuloLesModules
Plus deux autres améliorations :
• le caractère underscore est maintenant un mot clé réservé
• le support des méthodes privées dans les interfaces
Trois sont liées au projet Coin (JSR 334) partiellement livré en Java 7
• étendre l’utilisation de @SafeVarags sur des méthodes privées
• étendre l’utilisation de l’opérateur diamant aux classes anonymes
• améliorer l’utilisation du try with resources
7
#DevoxxFR
Try with resources
Java 7 : introduit le try-with-resources
Oblige à déclarer une nouvelle variable qui sera celle gérée
#Java9ModuloLesModules
// Java 9
public void ecrire(FileInputStream fis)
throws Exception {
try(fis) {
// utilisation de fis
}
}
Java 9 :
Utilisation possible de variables finales ou effectivement finales
Pour éviter de définir de nouvelles instances
// Java 7 et 8
public void ecrire(FileInputStream fis)
throws Exception {
try(FileInputStream fisr = fis) {
// utilisation de fisr
}
}
8
#DevoxxFR
<> avec les classes anonymes
L’opérateur diamant peut être utilisé dans les classes anonymes
#Java9ModuloLesModules
Comparator<Personne> compareParTaille = new Comparator<>() {
@Override
public int compare(Personne p1, Personne p2) {
return p2.getTaille() - p1.getTaille();
}
};
public class Contenu<T> {
private T valeur;
public Contenu(T valeur) {
this.valeur = valeur;
}
}
<T> Contenu<T> creerContenu(T valeur) {
return new Contenu<>(valeur) { };
}
Contenu<?> creerContenuAvecListePersonne(Personne valeur) {
List<?> liste = Arrays.asList(valeur);
return new Contenu<List<?>>(liste) { };
}
Le type générique doit pouvoir être inféré par le compilateur
9
#DevoxxFR
@SafeVarags
Les annotations sont héritées uniquement sur des classes
#Java9ModuloLesModules
Avant Java 9, utilisable sur
Des méthodes finales et statiques
Et des constructeurs
Java 9 : utilisable sur des méthodes privées
Erreur de compilation dans les autres cas d’utilisation
10
#DevoxxFR
Méthodes privées dans les interfaces
Permet de partager du code entre deux méthodes
En respectant l’encapsulation
#Java9ModuloLesModules
public interface MonInterface {
private static void m1() {}
private void m2() {}
private default void m3() {} // erreur
private abstract void m4(); // erreur
}
Ne peuvent pas être privées :
• Les méthodes par défaut
• Les méthodes abstraites
11
#DevoxxFR
L’identifiant _
TestUnderscore.java:2: warning: '_' used as an identifier
private int _ = 0;
^
(use of '_' as an identifier might not be supported in releases after Java SE 8)
1 warning
public class TestUnderscore {
private int _ = 0;
}
Java 8 : warning à la compilation
#Java9ModuloLesModules
Impossible d’utiliser _ dans les lambdas : erreur de compilation
TestUnderscore.java:4: error: '_' used as an identifier
BiFunction<Integer, Integer, Long> bf = (a, _) -> (long) a + _;
^
(use of '_' as an identifier is forbidden for lambda parameters)
12
#DevoxxFR
L’identifiant _
TestUnderscore.java:2: error: as of release 9, '_' is a keyword, and may not be used as
an identifier
private int _ = 0;
^
1 error
#Java9ModuloLesModules
Java 9 : n’est plus valide, erreur de compilation
en prévision d’une future utilisation dans les lambdas
13
#DevoxxFR 14
De nouvelles API
#Java9ModuloLesModules
#DevoxxFR
StackWalking API
Architecture en couches et utilisation de frameworks
Génère de très grosses stacktraces
Généralement seules les frames de nos classes sont intéressantes
#Java9ModuloLesModules
API pour parcourir, filtrer et accéder aux infos de stacktraces
L’interface StackWalker.StackFrame
Encapsule des informations sur une frame de la pile
String getClassName(), Class<?> getDeclaringClass(), String getFileName(),
int getLineNumber(), String getMethodName(), …
15
#DevoxxFR
StackWalking API
La classe thread-safe StackWalker
surcharges de la fabrique static StackWalker getInstance()
<T> T walk(Function<? super Stream<StackWalker.StackFrame>,? extends T> function)
#Java9ModuloLesModules
public static List<String> filtrerStackCourante() {
return StackWalker.getInstance().walk(s -> s
.map(frame -> frame.getClassName() + "." + frame.getMethodName() + "():"
+ frame.getLineNumber())
.filter(c -> c.startsWith("com.jmdoudoux")).limit(10)
.collect(Collectors.toList()));
}
16
#DevoxxFR
Platform specific desktop features
Enrichir les possibilités d’interactions avec le système hôte
Bureau, barre de tâches, événements, …
#Java9ModuloLesModules
Nouveau package java.awt.desktop dans le module java.desktop
Nouvelles méthodes dans la classe java.awt.Desktop
Toutes les fonctionnalités ne sont pas supportées
Sur toutes les plateformes
17
#DevoxxFR
Reactive Stream (Flow API)
Ensemble minimal de 4 interfaces et une classe
Pour mettre en œuvre des Reactive Streams ( <> Stream de Java 8 )
#Java9ModuloLesModules
L’interface fonctionnelle Flow.Producer<T>
Pour le producteur d’éléments
void subscribe(Flow.Subscriber<? super T>)
Mécanismes de type publication/souscription asynchrone
Pour consommer des éléments d’un flux au fur et à mesure de leur disponibilité
Peut être vu comme une combinaison des patterns Iterator et Observer
18
#DevoxxFR
Reactive Stream (Flow API)
L’interface Flow.Subscriber<T>
Pour consommer des éléments d’un producteur
void onNext(T)
void onComplete()
void onThrowable(Throwable)
void onSubscribe(Flow.Subscription)
#Java9ModuloLesModules
L’interface Flow.Subscription
Pour gérer la communication entre producteur et consommateur
void cancel()
void request(long)
19
#DevoxxFR
Reactive Stream (Flow API)
L’interface fonctionnelle Flow.Processor<T, R>
Pour transformer un flux en un autre
Hérite de Flow.Publisher<T> et Flow.Subscriber<R>
S’utilise entre un producteur et un consommateur
#Java9ModuloLesModules
Intérêts :
Mécanisme de type back pressure
Consommation de moins de ressources
20
#DevoxxFR 21
Des évolutions
dans les API
#Java9ModuloLesModules
#DevoxxFR
L’API Process
La gestion des processus en Java est limitée
Avant Java 5 : Runtime.getRuntime().exec()
Java 5 : ProcessBuilder
#Java9ModuloLesModules
Java 9 enrichi l’API avec l’interface ProcessHandle
Pour obtenir le processus courant : static ProcessHandle current()
Pour obtenir des infos : ProcessHandler.Info info()
Terminer un processus : boolean destroy() et destroyForcibly()
Pour obtenir tous les processus : Stream<ProcessHandle> allProcesses()
Pour obtenir les processus fils : Stream<ProcessHandle> children() ou descendants()
ProcessHandle toHandle() de la classe ProcessBuilder
22
#DevoxxFR
L’API Process
L’API permet de déclencher des traitements à la fin d’un processus
CompletableFuture<ProcessHandle> onExit() de ProcessHandle
Méthode CompletableFuture<Process> onExit() de Process
#Java9ModuloLesModules
L’OS peut restreindre les possibilités d’accès ou de gestion des
processus
23
#DevoxxFR
Fabriques pour collections
Pas de solution simple pour créer des instances immuables
#Java9ModuloLesModules
Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
set.add("d");
set =
Collections.unmodifiableSet(set);
Set<String> set = Collections.unmodifiableSet(new HashSet<>(Arrays.asList("a", "b",
"c", "d")));
Set<String> set = Collections.unmodifiableSet(new HashSet<String>() {{
add("a"); add("b"); add("c"); add("d");
}});
Set<String> set = Collections.unmodifiableSet(Stream.of("a", "b", "c",
"d").collect(toSet()));
24
#DevoxxFR
Fabriques pour collections
Ajout de fabriques statiques dans les interfaces List, Set et Map
Pallier au fait qu’il n’existe pas de syntaxe littérale pour créer une collection
Faciliter la création d’instances immuables
#Java9ModuloLesModules
Set<String> set = Set.of("a", "b", "c", "d");
12 surcharges de la méthode of()
pour 0, 1 ou plusieurs éléments
25
#DevoxxFR
Fabriques pour collections
Les contraintes sur les instances obtenues :
Sont des implémentations fournies par Java 9
inner classes statiques de java.util.ImmutableCollections
Sont des values based
Sont sérialisables si les éléments sont Serializable
NPE si null est passé en paramètre de of() pour List et Set
Pas null comme clé ou valeur en paramètre de of() pour Map
#Java9ModuloLesModules
Set<String> setImmuable = Set.of("a", "b", "c", "d");
Attention : pas d’interface dédiée pour immuable comme en Guava
-> utiliser des conventions de nommage
26
#DevoxxFR
Trois nouvelles méthodes dans Optional
#Java9ModuloLesModules
Stream<T> stream()
Renvoie un Stream vide ou contenant la valeur
void ifPresentOrElse(Consumer action, Runnable emptyAction)
Si une valeur est présente alors action est exécutée
Sinon c’est emptyAction
Optional<T> or(Supplier<? extends Optional<? extends T>>)
Si une valeur est présente alors renvoie un Optional de la valeur
Sinon renvoie l’Optional fourni par le Supplier
27
#DevoxxFR
Quatre nouvelles méthodes dans l’API Stream
Les deux premières sont complémentaires à limit() et skip()
#Java9ModuloLesModules
Stream<Integer> chiffres = Stream.iterate(0, n -> n + 1);
chiffres.takeWhile(n -> n < 10).forEach(System.out::println);
Stream<Integer> chiffres = Stream.iterate(0, n -> n + 1);
chiffres.dropWhile(n -> n <= 9).limit(10).forEach(System.out::println);
Stream<T> dropWhile(Predicate<? Super T>)
Ignore les éléments du Stream tant que le prédicat est vérifié
Stream<T> takeWhile(Predicate<? Super T>)
Renvoie les éléments du Stream tant que le prédicat est vérifié
Lors de l’utilisation sur des Stream non ordonnés
28
#DevoxxFR
Quatre nouvelles méthodes dans l’API Stream
static Stream<T> ofNullable(T)
Renvoie un Stream avec l’élément ou vide s’il est null
Equivalent à (e == null) ? Stream.empty() : Stream.of(e);
#Java9ModuloLesModules
Une nouvelle surcharge de la méthode iterate() avec Predicate
static <T> Stream<T> iterate(T seed, Predicate<? super T> predicate, UnaryOperator<T> f)
IntStream.iterate(1, i -> i <= 10, i -> i + 1).forEach(System.out::println);
en Java 9
IntStream.iterate(1, i -> i + 1).limit(10).forEach(System.out::println);
en Java 8
1
2
3
4
5
6
7
8
9
10
29
#DevoxxFR
Spin-wait hints
onSpinWait() ajoutée dans la classe Thread
Méthode vide annotée avec @HotSpotIntrinsicCandidate
Pour éventuellement réduire la consommation CPU
Dans les boucles d’attente dans des threads
#Java9ModuloLesModules
Utilisation possible d’instructions du microprocesseur
Par le compilateur C2 de la JVM HotSpot
Exemple l’instruction PAUSE sur x86
Utilisée dans plusieurs implémentations de classes
Phaser, StampedLock, SynchronousQueue<E>
30
#DevoxxFR 31
Des mises à jour
des outils du JDK
#Java9ModuloLesModules
#DevoxxFR
JDK/JRE organisation des fichiers
Avant Java 9
JDK contient un JRE dans le sous-répertoire jre
le répertoire bin contient des outils de dev
mais aussi certaines commandes du JRE
Des fichiers jar dans jdk/lib et jre/lib
#Java9ModuloLesModules 32
#DevoxxFR
JDK/JRE organisation des fichiers
Avec Java 9
Plus de distinction JDK/JRE
Dans l’organisation des fichiers
Répertoires :
bin : les outils
conf : fichiers de config
lib:
jmods : les modules
#Java9ModuloLesModules 33
#DevoxxFR
JDK/JRE organisation des fichiers
Le mécanisme endorsed est retiré
utilisait JAVA_HOME/lib/endorsed
pour remplacer une version d’une API livrée en standard
Le mécanisme d’extension est retiré
utilisait JAVA_HOME/lib/ext
Les fichiers lib/rt.jar et lib/tools.jar sont retirés
+ lib/dt.jar d’autres fichiers jar
#Java9ModuloLesModules 34
#DevoxxFR
GNU style command Lines options
Les options des outils en ligne de commande de Java
ont de nombreuses particularités :
certaines versions longues utilisent un tiret (-version), d'autres deux (--version)
certains mots sont séparés par un tiret (--no-header), d'autres non (-javaagent)
certaines options courtes ont une lettre (-d), d'autres deux lettres (-cp)
Les valeurs sont précisées avec un = (-D<cle>=<valeur>), d'autres avec un espace
même l’option pour obtenir l’aide varie : -help, -?, --help
#Java9ModuloLesModules 35
#DevoxxFR
GNU style command Lines options
Le but est d’harmoniser les nouvelles options
avec une syntaxe utilisant style GNU
sensible à la classe
option longue : commence par --, chaque mot séparé par -
la valeur est séparée avec un espace ou un =
--module-path path
option courte : un seul caractère, commence par -
peuvent être groupée : -ea
la valeur est séparée avec un espace ou suit l'option
plusieurs valeurs séparées par une virgule, sauf fichiers/répertoires (; sous Windows sinon :)
Les anciennes options restent (compatibilité)
#Java9ModuloLesModules 36
#DevoxxFR
Remove GC options
Deprecated en Java 8 (JEP 273)
Ces combinaisons sont supprimées
#Java9ModuloLesModules 37
#DevoxxFR
Policy for retiring javac –source and -target
Java 8
Compilation avec d’anciennes versions
#Java9ModuloLesModules
public class TestAssert {
public int assert;
}
C:java>javac -source 1.3 TestAssert.java
warning: [options] bootstrap class path not set in conjunction with -source 1.3
warning: [options] source value 1.3 is obsolete and will be removed in a future release
warning: [options] target value 1.4 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
TestAssert.java:3: warning: as of release 1.4, 'assert' is a keyword, and may not be
used as an identifier
public int assert;
^
(use -source 1.4 or higher to use 'assert' as a keyword)
5 warnings
38
#DevoxxFR
Policy for retiring javac –source and -target
Java 9
Support de la version courante et de trois versions précédentes
#Java9ModuloLesModules
C:java>"C:Program FilesJavajdk-9bin"javac -source 8 -target 8
--boot-class-path "C:Program FilesJavajdk1.8.0_60jrelibrt.jar" Hello.java
warning: [options] source value 1.6 is obsolete and will be removed in a future
release
warning: [options] target value 1.6 is obsolete and will be removed in a future
release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-
options.
9 par défaut et 8 , 7 et 6 (warning si utilisé)
39
#DevoxxFR
Compile For Older Platform versions
Option --release N du compilateur
N peut prendre les valeurs de –source et -target
Equivalent à
javac -source N -target N –bootclasspath rtN.jar…
#Java9ModuloLesModules
C:java>"C:Program FilesJavajdk-9bin"javac --release 8 Hello.java
C:java>
40
#DevoxxFR
Multi-release jar files (MRJAR)
Avant Java 9
Un jar pour chaque version de Java
#Java9ModuloLesModules
Racine du fichier jar
MaClasse.class
META-INF
MANIFEST.MF
versions
9
MaClasse.class
10
MaClasse.class
Avec Java 9
Un jar peut contenir plusieurs .class pour chaque version
La version courante à la racine
Les autres versions, dans META-INF/versions/N
Multi-Release: true dans MANIFEST.MF
Mise à jour
Des outils jar, javac, java
De la classe java.util.jar.JarFile
Racine du fichier jar
MaClasse.class
META-INF
MANIFEST.MF
41
#DevoxxFR
JShell
Read Eval Print Loop
Interpréteur interactif en ligne de commandes
Projet Kulla
Evite d’avoir à ajouter une méthode main()
ou utiliser des fonctionnalités de l’IDE (ex: Scrapbook sous Eclipse)
#Java9ModuloLesModules 42
#DevoxxFR
Outils retirés de Java 9
jhat
Outil expérimental fourni avec Java 6
D’autres outils de visualisation du heap sont disponibles
#Java9ModuloLesModules 43
Java DB
Base de données Apache Derby
Fournie avec les JDK 7 et 8
Dans le sous-répertoire db
#DevoxxFR 44
Des améliorations
dans la JVM
#Java9ModuloLesModules
#DevoxxFR
New version String format
Le numéro de version n’a jamais été simple à comprendre
hormis pour les deux premières versions 1.0 et 1.1
#Java9ModuloLesModules
Les versions suivantes 1.2 à 1.5 ont été rebaptisées Java 2 :
J2SE pour Java 2 Standard Edition, J2EE, J2ME
A partir de la version 1.5, Java a été renuméroté Java 5
Cependant la version indiquée par la JVM est toujours de la forme 1.x.y
Oracle a introduit un nouveau format de version
pas forcement plus clair
45
#DevoxxFR
New version String format
Les versions non relatives à la sécurité (Limited Update Releases)
sont des multiples de 20
#Java9ModuloLesModules
Différentes représentations d’une même version d’un JDK
JDK 7 Update 60, 1.7.0_60, JDK 7u60
Les versions relatives à la sécurité (Critical Patch Updates)
valeurs multiples de 5 avec éventuellement l’ajout de 1 pour garantir une valeur impaire
par rapport à la version LUR sur laquelle elle se base, exemple :
LUR : 7u40
CPU suivantes : 7u45, 7u51, 7u55
46
#DevoxxFR
New version String format
Nouveau format inspiré de SemVer
Composé de quatre parties séparées par un point
$MAJOR : version majeure qui fait l’objet d’une spécification
$MINOR : version mineure concernant des bug fixes mais aussi des mises à jour des API standards
$SECURITY : version contenant des corrections critiques notamment relatives à la sécurité
$PATCH
#Java9ModuloLesModules 47
Une API est fournie pour obtenir des info sur le numéro de version
#DevoxxFR
G1 par défaut
Ramasse-miettes conçus pour réduire les temps de pause
Notamment pour des heaps de taille importante
Découpe une génération en régions de taille fixe
#Java9ModuloLesModules 48
Remplace le Parallel GC comme GC par défaut
pour les JVM 32 et 64 bits en mode server
#DevoxxFR
Compact Strings
Réduire l’empreinte mémoire
Nécessaire au stockage interne des chaînes de caractères
Important car une grosse part du heap
est utilisée pour stocker des chaînes de caractères
#Java9ModuloLesModules
Jusqu’à Java 8 :
Tableau de caractères (char[]), chacun sur 16 bits
Encodés en UTF-16
49
#DevoxxFR
Compact Strings
Java 6 : première tentative avortée (retirée en Java 7)
-XX:+UseCompressedStrings
#Java9ModuloLesModules
Java 9 :
Tableau d’octets (byte [])
Un octet précise le format : UTF16 ou Latin1
Important : aucun impact sur l’interface de la classe String
Désactivation avec -XX:-CompactStrings
50
#DevoxxFR
Indify String concatenation
Remplacer le byte-code généré par le compilateur
Pour concaténer des chaînes avec StringBuilder (invokevirtual)
En utilisant invoke dynamic
Permettra de futures optimisations sans changer le byte-code
généré par le compilateur
#Java9ModuloLesModules 51
#DevoxxFR 52
Le support
de standards
#Java9ModuloLesModules
#DevoxxFR
Unicode 7.0 et 8.0
Java 8 supporte Unicode 6.2
Java 9 support Unicode 6.3, 7.0 et 8.0
#Java9ModuloLesModules 53
#DevoxxFR
Javadoc
Maintenant en HTML5
javadoc –html5
Vue par packages ou modules
#Java9ModuloLesModules
Recherche dans la Javadoc
Implémentation en Javascript côté client
54
#DevoxxFR
PKCS12 dans le keystore
Utilisation par défaut dans le keystore
En remplacement de JKS
Améliore la sécurité
En utilisant des algorithmes plus forts
#Java9ModuloLesModules 55
#DevoxxFR
SHA-3
Implémentation de fonctions de hachage SHA-3
Selon les spécifications NIST-FIPS 202
Algorithmes implémentés :
SHA3-224, SHA3-256, SHA3-384 et SHA3-512
#Java9ModuloLesModules
String chaine = "Bonjour";
md = MessageDigest.getInstance("SHA3-256");
byte donnees[] = md.digest(chaine.getBytes());
56
#DevoxxFR
UTF-8 properties files
Avant Java 9
Les fichiers properties doivent être encodés en ISO-8859-1
L’outil native2ascii pour convertir l’encoding du fichier
En Java 9
La classe PropertyResourceBundle supporte l’encoding en UTF-8
Si une séquence d’octets invalide est détectée, relecture en ISO-8859-1
Option de la JVM pour forcer la lecture
-Djava.util.PropertyResourceBundle.encoding=ISO-8859-1
#Java9ModuloLesModules 57
#DevoxxFR 58
Les fonctionnalités
diverses
#Java9ModuloLesModules
#DevoxxFR
Enhanced deprecation
#Java9ModuloLesModules
Enrichir @Deprecated
boolean forRemoval() : prévue pour être retirée dans le future ?
false par défaut
String since() : version à partir de laquelle c’est deprecated
"" par défaut
Nouvel outil jdeprscan pour rechercher les API Deprecated utilisées
Plusieurs @Deprecated ont été
ajoutées, modifiées, supprimés ( java.awt.Component.show() et hide() )
59
#DevoxxFR
Incubator modules
Permet de développer et livrer des modules non standard
en cours de développement
#Java9ModuloLesModules
Ces modules sont préfixés par jdk.incubator
Les packages exportés sont aussi préfixés par jdk.incubator
Leur nom sera changé une fois finalisé
Leur utilisation requiert l’option --add-modules
Un seul module d’incubation dans Java 9
HTTP 2.0 dans le module jdk.incubator.httpclient
60
#DevoxxFR 61
Les fonctionnalités
deprecated ou retirées
#Java9ModuloLesModules
#DevoxxFR
Applet
L’API Applet est deprecated
java.applet.AppletStub, java.applet.Applet, java.applet.AudioClip,
java.applet.AppletContext, javax.swing.Japplet
L’outil appletviewer
#Java9ModuloLesModules
Le support du plug-in par les navigateurs
est retiré ou le retrait est planifié
Solution de remplacement : Java Web Start
Pas de planification de suppression de l’API dans le futur
62
#DevoxxFR
Demos et exemples
Obsolètes et non maintenus
Retirés dans Java 9
#Java9ModuloLesModules 63
#DevoxxFR
Remove JVM TI hprof agent
Les fonctionnalités utiles sont dans d’autres outils
Heap dump avec jmap –dump
Allocation profiling avec VisualVM
CPU profiling avec VisualVM ou Java Flight Recorder
#Java9ModuloLesModules 64
#DevoxxFR 65
Les fonctionnalités
reportées
#Java9ModuloLesModules
#DevoxxFR
Les fonctionnalités reportées
Initialement, Java 9 devrait aussi intégrer :
JEP 230 : Microbenchmark Suite basé sur JMH
JEP 198 : Light weight Json API
JEP 110 : client HTTP/2 et websocket (incubator)
JSR 354 : Money and currency API
Malheureusement celles-ci sont reportées
Dans une version ultérieure de Java
#Java9ModuloLesModules 66
#DevoxxFR 67
Conclusion
#Java9ModuloLesModules
#DevoxxFR
Conclusion
Java 9 propose aussi de nombreuses autres fonctionnalités :
JEP 266 : More concurrency updates CompletableFuture
JEP 193 : Variable Handles
JEP 274 : Enhanced methods handles
JEP 231 : Remove Launch-time JRE version selection
JEP 158 : Unified JVM Logging
JEP 271 : Unified GC Logging
JEP 246 : Leverage CPU Instructions for GHASH and RSA
JEP 265 : Marlin Graphics Renderer
JEP 197 : Segmented Code Cache
JEP 288 : Disable SHA-1 Certificates
JEP 219 : Datagram Transport Layer Security (DTLS)
JEP 268 : XML Catalogs
…
#Java9ModuloLesModules 68
#DevoxxFR
Conclusion
La release de Java est prévue pour le 27 juillet
Il est possible de télécharger les versions EA (Early Access)
https://jdk9.java.net/download/
Pour essayer ces fonctionnalités et les modules
Avec le support (encore expérimental) des principaux IDE
Consultez la documentation fournie par Oracle
http://docs.oracle.com/javase/9/index.html
#Java9ModuloLesModules 69
#DevoxxFR
Merci / Thank you
70#Java9ModuloLesModules

Más contenido relacionado

La actualidad más candente

Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Jérôme Tamborini
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautesAbdenour Bouateli
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Ippon
 
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation MavenArnaud Héritier
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes AgilesIppon
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileIppon
 
Java 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuchJava 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuchTarek Halloul
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Eric SIBER
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Ippon
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache MavenArnaud Héritier
 
Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)
Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)
Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)SmartnSkilled
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache MavenArnaud Héritier
 
Solutions Linux 2008 JavaScript
Solutions Linux 2008 JavaScriptSolutions Linux 2008 JavaScript
Solutions Linux 2008 JavaScriptRaphaël Semeteys
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPjulien pauli
 

La actualidad más candente (20)

Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
 
Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautes
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
JAVA 8
JAVA 8JAVA 8
JAVA 8
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
 
Java 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuchJava 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuch
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
 
Sonar-Hodson-Maven
Sonar-Hodson-MavenSonar-Hodson-Maven
Sonar-Hodson-Maven
 
Base11
Base11Base11
Base11
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 
Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)
Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)
Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Solutions Linux 2008 JavaScript
Solutions Linux 2008 JavaScriptSolutions Linux 2008 JavaScript
Solutions Linux 2008 JavaScript
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHP
 

Destacado

Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le webneuros
 
UX STRAT USA: Leah Buley, "The Role of UX / CX in Business"
UX STRAT USA: Leah Buley, "The Role of UX / CX in Business"UX STRAT USA: Leah Buley, "The Role of UX / CX in Business"
UX STRAT USA: Leah Buley, "The Role of UX / CX in Business"UX STRAT
 
Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...
Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...
Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...Zenika
 
HTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien LanduréHTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien LanduréZenika
 
Matinale DevOps / Docker
Matinale DevOps / DockerMatinale DevOps / Docker
Matinale DevOps / DockerZenika
 
Introducing HTTP/2
Introducing HTTP/2Introducing HTTP/2
Introducing HTTP/2Ido Flatow
 
What HTTP/2.0 Will Do For You
What HTTP/2.0 Will Do For YouWhat HTTP/2.0 Will Do For You
What HTTP/2.0 Will Do For YouMark Nottingham
 
JAX-RS and CDI Bike the (Reactive) Bridge
JAX-RS and CDI Bike the (Reactive) BridgeJAX-RS and CDI Bike the (Reactive) Bridge
JAX-RS and CDI Bike the (Reactive) BridgeJosé Paumard
 
JAX RS and CDI bike the reactive bridge
JAX RS and CDI bike the reactive bridgeJAX RS and CDI bike the reactive bridge
JAX RS and CDI bike the reactive bridgeJosé Paumard
 
NightClazz Java 8 Decouverte
NightClazz Java 8 DecouverteNightClazz Java 8 Decouverte
NightClazz Java 8 DecouverteZenika
 
Introduction to HTTP/2
Introduction to HTTP/2Introduction to HTTP/2
Introduction to HTTP/2Ido Flatow
 
WTF - What's The Fold - Bordeaux JUG 2013
WTF - What's The Fold - Bordeaux JUG 2013WTF - What's The Fold - Bordeaux JUG 2013
WTF - What's The Fold - Bordeaux JUG 2013Zenika
 
Better Product Definition with Lean UX and Design Thinking
Better Product Definition with Lean UX and Design ThinkingBetter Product Definition with Lean UX and Design Thinking
Better Product Definition with Lean UX and Design ThinkingJeff Gothelf
 
Séminaire en ligne - Email Kinetic - 30 Mai 2017
Séminaire en ligne - Email Kinetic - 30 Mai 2017Séminaire en ligne - Email Kinetic - 30 Mai 2017
Séminaire en ligne - Email Kinetic - 30 Mai 2017Experian
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Jean-Michel Doudoux
 
Monitoring Compteur EDF avec node.js
Monitoring Compteur EDF avec node.jsMonitoring Compteur EDF avec node.js
Monitoring Compteur EDF avec node.jslaurenthuet
 
The Case for HTTP/2
The Case for HTTP/2The Case for HTTP/2
The Case for HTTP/2Andy Davies
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoipkernevez
 

Destacado (20)

Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le web
 
UX STRAT USA: Leah Buley, "The Role of UX / CX in Business"
UX STRAT USA: Leah Buley, "The Role of UX / CX in Business"UX STRAT USA: Leah Buley, "The Role of UX / CX in Business"
UX STRAT USA: Leah Buley, "The Role of UX / CX in Business"
 
Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...
Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...
Agile Wake Up #1 du 01/12/2015 : L'agilité au service des projets Orange Fran...
 
HTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien LanduréHTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien Landuré
 
Matinale DevOps / Docker
Matinale DevOps / DockerMatinale DevOps / Docker
Matinale DevOps / Docker
 
Introducing HTTP/2
Introducing HTTP/2Introducing HTTP/2
Introducing HTTP/2
 
What HTTP/2.0 Will Do For You
What HTTP/2.0 Will Do For YouWhat HTTP/2.0 Will Do For You
What HTTP/2.0 Will Do For You
 
JAX-RS and CDI Bike the (Reactive) Bridge
JAX-RS and CDI Bike the (Reactive) BridgeJAX-RS and CDI Bike the (Reactive) Bridge
JAX-RS and CDI Bike the (Reactive) Bridge
 
JAX RS and CDI bike the reactive bridge
JAX RS and CDI bike the reactive bridgeJAX RS and CDI bike the reactive bridge
JAX RS and CDI bike the reactive bridge
 
How can your applications benefit from Java 9?
How can your applications benefit from Java 9?How can your applications benefit from Java 9?
How can your applications benefit from Java 9?
 
NightClazz Java 8 Decouverte
NightClazz Java 8 DecouverteNightClazz Java 8 Decouverte
NightClazz Java 8 Decouverte
 
Introduction to HTTP/2
Introduction to HTTP/2Introduction to HTTP/2
Introduction to HTTP/2
 
WTF - What's The Fold - Bordeaux JUG 2013
WTF - What's The Fold - Bordeaux JUG 2013WTF - What's The Fold - Bordeaux JUG 2013
WTF - What's The Fold - Bordeaux JUG 2013
 
Better Product Definition with Lean UX and Design Thinking
Better Product Definition with Lean UX and Design ThinkingBetter Product Definition with Lean UX and Design Thinking
Better Product Definition with Lean UX and Design Thinking
 
Séminaire en ligne - Email Kinetic - 30 Mai 2017
Séminaire en ligne - Email Kinetic - 30 Mai 2017Séminaire en ligne - Email Kinetic - 30 Mai 2017
Séminaire en ligne - Email Kinetic - 30 Mai 2017
 
Http2 right now
Http2 right nowHttp2 right now
Http2 right now
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016
 
Monitoring Compteur EDF avec node.js
Monitoring Compteur EDF avec node.jsMonitoring Compteur EDF avec node.js
Monitoring Compteur EDF avec node.js
 
The Case for HTTP/2
The Case for HTTP/2The Case for HTTP/2
The Case for HTTP/2
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
 

Similar a Java 9 modulo les modules devoxx fr 2017

devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfJean-Michel Doudoux
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketStéphane Legrand
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Jean-Michel Doudoux
 
Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Yannick Chartois
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 
Introduction java
Introduction javaIntroduction java
Introduction javaFouad Root
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web5pidou
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8lyonjug
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application javaAntoine Rey
 
Annotations pour les Geeks
Annotations pour les GeeksAnnotations pour les Geeks
Annotations pour les Geeksjviet
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Guillaume Laforge
 

Similar a Java 9 modulo les modules devoxx fr 2017 (20)

devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacket
 
Nouveautés Java 9-10-11
Nouveautés Java 9-10-11Nouveautés Java 9-10-11
Nouveautés Java 9-10-11
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
 
Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
Introduction java
Introduction javaIntroduction java
Introduction java
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
Présentation1
Présentation1Présentation1
Présentation1
 
Annotations pour les Geeks
Annotations pour les GeeksAnnotations pour les Geeks
Annotations pour les Geeks
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008
 

Más de Jean-Michel Doudoux

Les nouveautés de Java 21 - Rencontres dev Toulon octobre 2023.pdf
Les nouveautés de Java 21 - Rencontres dev Toulon octobre 2023.pdfLes nouveautés de Java 21 - Rencontres dev Toulon octobre 2023.pdf
Les nouveautés de Java 21 - Rencontres dev Toulon octobre 2023.pdfJean-Michel Doudoux
 
Les nouveautés de Java 21 - Devoxx MA 2023.pdf
Les nouveautés de Java 21 - Devoxx MA 2023.pdfLes nouveautés de Java 21 - Devoxx MA 2023.pdf
Les nouveautés de Java 21 - Devoxx MA 2023.pdfJean-Michel Doudoux
 
Les nouveautés de Java 19, 20 et 21 - RivieraDev 2023
Les nouveautés de Java 19, 20 et 21 - RivieraDev 2023Les nouveautés de Java 19, 20 et 21 - RivieraDev 2023
Les nouveautés de Java 19, 20 et 21 - RivieraDev 2023Jean-Michel Doudoux
 
En route vers Java 21 - Javaday Paris 2023
En route vers Java 21 - Javaday Paris 2023En route vers Java 21 - Javaday Paris 2023
En route vers Java 21 - Javaday Paris 2023Jean-Michel Doudoux
 
Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Jean-Michel Doudoux
 
Voxxeddays Lux 2022 - Profiling et monitoring avec le JDK
Voxxeddays Lux 2022 - Profiling et monitoring avec le JDKVoxxeddays Lux 2022 - Profiling et monitoring avec le JDK
Voxxeddays Lux 2022 - Profiling et monitoring avec le JDKJean-Michel Doudoux
 

Más de Jean-Michel Doudoux (6)

Les nouveautés de Java 21 - Rencontres dev Toulon octobre 2023.pdf
Les nouveautés de Java 21 - Rencontres dev Toulon octobre 2023.pdfLes nouveautés de Java 21 - Rencontres dev Toulon octobre 2023.pdf
Les nouveautés de Java 21 - Rencontres dev Toulon octobre 2023.pdf
 
Les nouveautés de Java 21 - Devoxx MA 2023.pdf
Les nouveautés de Java 21 - Devoxx MA 2023.pdfLes nouveautés de Java 21 - Devoxx MA 2023.pdf
Les nouveautés de Java 21 - Devoxx MA 2023.pdf
 
Les nouveautés de Java 19, 20 et 21 - RivieraDev 2023
Les nouveautés de Java 19, 20 et 21 - RivieraDev 2023Les nouveautés de Java 19, 20 et 21 - RivieraDev 2023
Les nouveautés de Java 19, 20 et 21 - RivieraDev 2023
 
En route vers Java 21 - Javaday Paris 2023
En route vers Java 21 - Javaday Paris 2023En route vers Java 21 - Javaday Paris 2023
En route vers Java 21 - Javaday Paris 2023
 
Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20
 
Voxxeddays Lux 2022 - Profiling et monitoring avec le JDK
Voxxeddays Lux 2022 - Profiling et monitoring avec le JDKVoxxeddays Lux 2022 - Profiling et monitoring avec le JDK
Voxxeddays Lux 2022 - Profiling et monitoring avec le JDK
 

Java 9 modulo les modules devoxx fr 2017

  • 1. #DevoxxFR 1 modulo les modules Jean-Michel Doudoux @jmdoudoux #Java9ModuloLesModules Devoxx France 2017
  • 2. #DevoxxFR Le contenu de Java 9 LE gros morceau de Java 9 C’est le projet Jigsaw Pour la mise en œuvre d’un système de modules Avec toutes les contraintes que cela va induire Ruptures (visibilité, accessibilité, organisation du code, …) Mode de compatibilité (modules/classpath) #Java9ModuloLesModules 2
  • 3. #DevoxxFR Le contenu de Java 9 Spécifications définies dans la JSR 379 + JSR 376 (modules system), … Intègre 89 JEPs #Java9ModuloLesModules Mais Java 9 propose de nombreuses autres fonctionnalités • Dans le langage • Dans les API • Dans la plate-forme • Dans la JVM 3
  • 4. #DevoxxFR 4 Jean-Michel Doudoux http://www.jmdoudoux.fr @jmdoudoux Co-fondateur du , membre du Auteur de 2 didacticiels Diffusés sous licence GNU FDL • Développons en Java (3400 pages) • Développons en Java avec Eclipse CTO chez #Java9ModuloLesModules
  • 5. #DevoxxFR Roadmap 5 • Les changements mineurs dans le langage • De nouvelles API • Des évolutions dans les API • Des mises à jour des outils du JDK • Des améliorations dans la JVM • Le support de standards • Des fonctionnalités diverses • Les fonctionnalités deprecated ou retirées • Les fonctionnalités reportées #Java9ModuloLesModules
  • 6. #DevoxxFR 6 Les changements mineurs dans le langage #Java9ModuloLesModules
  • 7. #DevoxxFR JEP 213 : Milling project Coin Quelques petites améliorations dans le langage #Java9ModuloLesModules Plus deux autres améliorations : • le caractère underscore est maintenant un mot clé réservé • le support des méthodes privées dans les interfaces Trois sont liées au projet Coin (JSR 334) partiellement livré en Java 7 • étendre l’utilisation de @SafeVarags sur des méthodes privées • étendre l’utilisation de l’opérateur diamant aux classes anonymes • améliorer l’utilisation du try with resources 7
  • 8. #DevoxxFR Try with resources Java 7 : introduit le try-with-resources Oblige à déclarer une nouvelle variable qui sera celle gérée #Java9ModuloLesModules // Java 9 public void ecrire(FileInputStream fis) throws Exception { try(fis) { // utilisation de fis } } Java 9 : Utilisation possible de variables finales ou effectivement finales Pour éviter de définir de nouvelles instances // Java 7 et 8 public void ecrire(FileInputStream fis) throws Exception { try(FileInputStream fisr = fis) { // utilisation de fisr } } 8
  • 9. #DevoxxFR <> avec les classes anonymes L’opérateur diamant peut être utilisé dans les classes anonymes #Java9ModuloLesModules Comparator<Personne> compareParTaille = new Comparator<>() { @Override public int compare(Personne p1, Personne p2) { return p2.getTaille() - p1.getTaille(); } }; public class Contenu<T> { private T valeur; public Contenu(T valeur) { this.valeur = valeur; } } <T> Contenu<T> creerContenu(T valeur) { return new Contenu<>(valeur) { }; } Contenu<?> creerContenuAvecListePersonne(Personne valeur) { List<?> liste = Arrays.asList(valeur); return new Contenu<List<?>>(liste) { }; } Le type générique doit pouvoir être inféré par le compilateur 9
  • 10. #DevoxxFR @SafeVarags Les annotations sont héritées uniquement sur des classes #Java9ModuloLesModules Avant Java 9, utilisable sur Des méthodes finales et statiques Et des constructeurs Java 9 : utilisable sur des méthodes privées Erreur de compilation dans les autres cas d’utilisation 10
  • 11. #DevoxxFR Méthodes privées dans les interfaces Permet de partager du code entre deux méthodes En respectant l’encapsulation #Java9ModuloLesModules public interface MonInterface { private static void m1() {} private void m2() {} private default void m3() {} // erreur private abstract void m4(); // erreur } Ne peuvent pas être privées : • Les méthodes par défaut • Les méthodes abstraites 11
  • 12. #DevoxxFR L’identifiant _ TestUnderscore.java:2: warning: '_' used as an identifier private int _ = 0; ^ (use of '_' as an identifier might not be supported in releases after Java SE 8) 1 warning public class TestUnderscore { private int _ = 0; } Java 8 : warning à la compilation #Java9ModuloLesModules Impossible d’utiliser _ dans les lambdas : erreur de compilation TestUnderscore.java:4: error: '_' used as an identifier BiFunction<Integer, Integer, Long> bf = (a, _) -> (long) a + _; ^ (use of '_' as an identifier is forbidden for lambda parameters) 12
  • 13. #DevoxxFR L’identifiant _ TestUnderscore.java:2: error: as of release 9, '_' is a keyword, and may not be used as an identifier private int _ = 0; ^ 1 error #Java9ModuloLesModules Java 9 : n’est plus valide, erreur de compilation en prévision d’une future utilisation dans les lambdas 13
  • 14. #DevoxxFR 14 De nouvelles API #Java9ModuloLesModules
  • 15. #DevoxxFR StackWalking API Architecture en couches et utilisation de frameworks Génère de très grosses stacktraces Généralement seules les frames de nos classes sont intéressantes #Java9ModuloLesModules API pour parcourir, filtrer et accéder aux infos de stacktraces L’interface StackWalker.StackFrame Encapsule des informations sur une frame de la pile String getClassName(), Class<?> getDeclaringClass(), String getFileName(), int getLineNumber(), String getMethodName(), … 15
  • 16. #DevoxxFR StackWalking API La classe thread-safe StackWalker surcharges de la fabrique static StackWalker getInstance() <T> T walk(Function<? super Stream<StackWalker.StackFrame>,? extends T> function) #Java9ModuloLesModules public static List<String> filtrerStackCourante() { return StackWalker.getInstance().walk(s -> s .map(frame -> frame.getClassName() + "." + frame.getMethodName() + "():" + frame.getLineNumber()) .filter(c -> c.startsWith("com.jmdoudoux")).limit(10) .collect(Collectors.toList())); } 16
  • 17. #DevoxxFR Platform specific desktop features Enrichir les possibilités d’interactions avec le système hôte Bureau, barre de tâches, événements, … #Java9ModuloLesModules Nouveau package java.awt.desktop dans le module java.desktop Nouvelles méthodes dans la classe java.awt.Desktop Toutes les fonctionnalités ne sont pas supportées Sur toutes les plateformes 17
  • 18. #DevoxxFR Reactive Stream (Flow API) Ensemble minimal de 4 interfaces et une classe Pour mettre en œuvre des Reactive Streams ( <> Stream de Java 8 ) #Java9ModuloLesModules L’interface fonctionnelle Flow.Producer<T> Pour le producteur d’éléments void subscribe(Flow.Subscriber<? super T>) Mécanismes de type publication/souscription asynchrone Pour consommer des éléments d’un flux au fur et à mesure de leur disponibilité Peut être vu comme une combinaison des patterns Iterator et Observer 18
  • 19. #DevoxxFR Reactive Stream (Flow API) L’interface Flow.Subscriber<T> Pour consommer des éléments d’un producteur void onNext(T) void onComplete() void onThrowable(Throwable) void onSubscribe(Flow.Subscription) #Java9ModuloLesModules L’interface Flow.Subscription Pour gérer la communication entre producteur et consommateur void cancel() void request(long) 19
  • 20. #DevoxxFR Reactive Stream (Flow API) L’interface fonctionnelle Flow.Processor<T, R> Pour transformer un flux en un autre Hérite de Flow.Publisher<T> et Flow.Subscriber<R> S’utilise entre un producteur et un consommateur #Java9ModuloLesModules Intérêts : Mécanisme de type back pressure Consommation de moins de ressources 20
  • 21. #DevoxxFR 21 Des évolutions dans les API #Java9ModuloLesModules
  • 22. #DevoxxFR L’API Process La gestion des processus en Java est limitée Avant Java 5 : Runtime.getRuntime().exec() Java 5 : ProcessBuilder #Java9ModuloLesModules Java 9 enrichi l’API avec l’interface ProcessHandle Pour obtenir le processus courant : static ProcessHandle current() Pour obtenir des infos : ProcessHandler.Info info() Terminer un processus : boolean destroy() et destroyForcibly() Pour obtenir tous les processus : Stream<ProcessHandle> allProcesses() Pour obtenir les processus fils : Stream<ProcessHandle> children() ou descendants() ProcessHandle toHandle() de la classe ProcessBuilder 22
  • 23. #DevoxxFR L’API Process L’API permet de déclencher des traitements à la fin d’un processus CompletableFuture<ProcessHandle> onExit() de ProcessHandle Méthode CompletableFuture<Process> onExit() de Process #Java9ModuloLesModules L’OS peut restreindre les possibilités d’accès ou de gestion des processus 23
  • 24. #DevoxxFR Fabriques pour collections Pas de solution simple pour créer des instances immuables #Java9ModuloLesModules Set<String> set = new HashSet<>(); set.add("a"); set.add("b"); set.add("c"); set.add("d"); set = Collections.unmodifiableSet(set); Set<String> set = Collections.unmodifiableSet(new HashSet<>(Arrays.asList("a", "b", "c", "d"))); Set<String> set = Collections.unmodifiableSet(new HashSet<String>() {{ add("a"); add("b"); add("c"); add("d"); }}); Set<String> set = Collections.unmodifiableSet(Stream.of("a", "b", "c", "d").collect(toSet())); 24
  • 25. #DevoxxFR Fabriques pour collections Ajout de fabriques statiques dans les interfaces List, Set et Map Pallier au fait qu’il n’existe pas de syntaxe littérale pour créer une collection Faciliter la création d’instances immuables #Java9ModuloLesModules Set<String> set = Set.of("a", "b", "c", "d"); 12 surcharges de la méthode of() pour 0, 1 ou plusieurs éléments 25
  • 26. #DevoxxFR Fabriques pour collections Les contraintes sur les instances obtenues : Sont des implémentations fournies par Java 9 inner classes statiques de java.util.ImmutableCollections Sont des values based Sont sérialisables si les éléments sont Serializable NPE si null est passé en paramètre de of() pour List et Set Pas null comme clé ou valeur en paramètre de of() pour Map #Java9ModuloLesModules Set<String> setImmuable = Set.of("a", "b", "c", "d"); Attention : pas d’interface dédiée pour immuable comme en Guava -> utiliser des conventions de nommage 26
  • 27. #DevoxxFR Trois nouvelles méthodes dans Optional #Java9ModuloLesModules Stream<T> stream() Renvoie un Stream vide ou contenant la valeur void ifPresentOrElse(Consumer action, Runnable emptyAction) Si une valeur est présente alors action est exécutée Sinon c’est emptyAction Optional<T> or(Supplier<? extends Optional<? extends T>>) Si une valeur est présente alors renvoie un Optional de la valeur Sinon renvoie l’Optional fourni par le Supplier 27
  • 28. #DevoxxFR Quatre nouvelles méthodes dans l’API Stream Les deux premières sont complémentaires à limit() et skip() #Java9ModuloLesModules Stream<Integer> chiffres = Stream.iterate(0, n -> n + 1); chiffres.takeWhile(n -> n < 10).forEach(System.out::println); Stream<Integer> chiffres = Stream.iterate(0, n -> n + 1); chiffres.dropWhile(n -> n <= 9).limit(10).forEach(System.out::println); Stream<T> dropWhile(Predicate<? Super T>) Ignore les éléments du Stream tant que le prédicat est vérifié Stream<T> takeWhile(Predicate<? Super T>) Renvoie les éléments du Stream tant que le prédicat est vérifié Lors de l’utilisation sur des Stream non ordonnés 28
  • 29. #DevoxxFR Quatre nouvelles méthodes dans l’API Stream static Stream<T> ofNullable(T) Renvoie un Stream avec l’élément ou vide s’il est null Equivalent à (e == null) ? Stream.empty() : Stream.of(e); #Java9ModuloLesModules Une nouvelle surcharge de la méthode iterate() avec Predicate static <T> Stream<T> iterate(T seed, Predicate<? super T> predicate, UnaryOperator<T> f) IntStream.iterate(1, i -> i <= 10, i -> i + 1).forEach(System.out::println); en Java 9 IntStream.iterate(1, i -> i + 1).limit(10).forEach(System.out::println); en Java 8 1 2 3 4 5 6 7 8 9 10 29
  • 30. #DevoxxFR Spin-wait hints onSpinWait() ajoutée dans la classe Thread Méthode vide annotée avec @HotSpotIntrinsicCandidate Pour éventuellement réduire la consommation CPU Dans les boucles d’attente dans des threads #Java9ModuloLesModules Utilisation possible d’instructions du microprocesseur Par le compilateur C2 de la JVM HotSpot Exemple l’instruction PAUSE sur x86 Utilisée dans plusieurs implémentations de classes Phaser, StampedLock, SynchronousQueue<E> 30
  • 31. #DevoxxFR 31 Des mises à jour des outils du JDK #Java9ModuloLesModules
  • 32. #DevoxxFR JDK/JRE organisation des fichiers Avant Java 9 JDK contient un JRE dans le sous-répertoire jre le répertoire bin contient des outils de dev mais aussi certaines commandes du JRE Des fichiers jar dans jdk/lib et jre/lib #Java9ModuloLesModules 32
  • 33. #DevoxxFR JDK/JRE organisation des fichiers Avec Java 9 Plus de distinction JDK/JRE Dans l’organisation des fichiers Répertoires : bin : les outils conf : fichiers de config lib: jmods : les modules #Java9ModuloLesModules 33
  • 34. #DevoxxFR JDK/JRE organisation des fichiers Le mécanisme endorsed est retiré utilisait JAVA_HOME/lib/endorsed pour remplacer une version d’une API livrée en standard Le mécanisme d’extension est retiré utilisait JAVA_HOME/lib/ext Les fichiers lib/rt.jar et lib/tools.jar sont retirés + lib/dt.jar d’autres fichiers jar #Java9ModuloLesModules 34
  • 35. #DevoxxFR GNU style command Lines options Les options des outils en ligne de commande de Java ont de nombreuses particularités : certaines versions longues utilisent un tiret (-version), d'autres deux (--version) certains mots sont séparés par un tiret (--no-header), d'autres non (-javaagent) certaines options courtes ont une lettre (-d), d'autres deux lettres (-cp) Les valeurs sont précisées avec un = (-D<cle>=<valeur>), d'autres avec un espace même l’option pour obtenir l’aide varie : -help, -?, --help #Java9ModuloLesModules 35
  • 36. #DevoxxFR GNU style command Lines options Le but est d’harmoniser les nouvelles options avec une syntaxe utilisant style GNU sensible à la classe option longue : commence par --, chaque mot séparé par - la valeur est séparée avec un espace ou un = --module-path path option courte : un seul caractère, commence par - peuvent être groupée : -ea la valeur est séparée avec un espace ou suit l'option plusieurs valeurs séparées par une virgule, sauf fichiers/répertoires (; sous Windows sinon :) Les anciennes options restent (compatibilité) #Java9ModuloLesModules 36
  • 37. #DevoxxFR Remove GC options Deprecated en Java 8 (JEP 273) Ces combinaisons sont supprimées #Java9ModuloLesModules 37
  • 38. #DevoxxFR Policy for retiring javac –source and -target Java 8 Compilation avec d’anciennes versions #Java9ModuloLesModules public class TestAssert { public int assert; } C:java>javac -source 1.3 TestAssert.java warning: [options] bootstrap class path not set in conjunction with -source 1.3 warning: [options] source value 1.3 is obsolete and will be removed in a future release warning: [options] target value 1.4 is obsolete and will be removed in a future release warning: [options] To suppress warnings about obsolete options, use -Xlint:-options. TestAssert.java:3: warning: as of release 1.4, 'assert' is a keyword, and may not be used as an identifier public int assert; ^ (use -source 1.4 or higher to use 'assert' as a keyword) 5 warnings 38
  • 39. #DevoxxFR Policy for retiring javac –source and -target Java 9 Support de la version courante et de trois versions précédentes #Java9ModuloLesModules C:java>"C:Program FilesJavajdk-9bin"javac -source 8 -target 8 --boot-class-path "C:Program FilesJavajdk1.8.0_60jrelibrt.jar" Hello.java warning: [options] source value 1.6 is obsolete and will be removed in a future release warning: [options] target value 1.6 is obsolete and will be removed in a future release warning: [options] To suppress warnings about obsolete options, use -Xlint:- options. 9 par défaut et 8 , 7 et 6 (warning si utilisé) 39
  • 40. #DevoxxFR Compile For Older Platform versions Option --release N du compilateur N peut prendre les valeurs de –source et -target Equivalent à javac -source N -target N –bootclasspath rtN.jar… #Java9ModuloLesModules C:java>"C:Program FilesJavajdk-9bin"javac --release 8 Hello.java C:java> 40
  • 41. #DevoxxFR Multi-release jar files (MRJAR) Avant Java 9 Un jar pour chaque version de Java #Java9ModuloLesModules Racine du fichier jar MaClasse.class META-INF MANIFEST.MF versions 9 MaClasse.class 10 MaClasse.class Avec Java 9 Un jar peut contenir plusieurs .class pour chaque version La version courante à la racine Les autres versions, dans META-INF/versions/N Multi-Release: true dans MANIFEST.MF Mise à jour Des outils jar, javac, java De la classe java.util.jar.JarFile Racine du fichier jar MaClasse.class META-INF MANIFEST.MF 41
  • 42. #DevoxxFR JShell Read Eval Print Loop Interpréteur interactif en ligne de commandes Projet Kulla Evite d’avoir à ajouter une méthode main() ou utiliser des fonctionnalités de l’IDE (ex: Scrapbook sous Eclipse) #Java9ModuloLesModules 42
  • 43. #DevoxxFR Outils retirés de Java 9 jhat Outil expérimental fourni avec Java 6 D’autres outils de visualisation du heap sont disponibles #Java9ModuloLesModules 43 Java DB Base de données Apache Derby Fournie avec les JDK 7 et 8 Dans le sous-répertoire db
  • 44. #DevoxxFR 44 Des améliorations dans la JVM #Java9ModuloLesModules
  • 45. #DevoxxFR New version String format Le numéro de version n’a jamais été simple à comprendre hormis pour les deux premières versions 1.0 et 1.1 #Java9ModuloLesModules Les versions suivantes 1.2 à 1.5 ont été rebaptisées Java 2 : J2SE pour Java 2 Standard Edition, J2EE, J2ME A partir de la version 1.5, Java a été renuméroté Java 5 Cependant la version indiquée par la JVM est toujours de la forme 1.x.y Oracle a introduit un nouveau format de version pas forcement plus clair 45
  • 46. #DevoxxFR New version String format Les versions non relatives à la sécurité (Limited Update Releases) sont des multiples de 20 #Java9ModuloLesModules Différentes représentations d’une même version d’un JDK JDK 7 Update 60, 1.7.0_60, JDK 7u60 Les versions relatives à la sécurité (Critical Patch Updates) valeurs multiples de 5 avec éventuellement l’ajout de 1 pour garantir une valeur impaire par rapport à la version LUR sur laquelle elle se base, exemple : LUR : 7u40 CPU suivantes : 7u45, 7u51, 7u55 46
  • 47. #DevoxxFR New version String format Nouveau format inspiré de SemVer Composé de quatre parties séparées par un point $MAJOR : version majeure qui fait l’objet d’une spécification $MINOR : version mineure concernant des bug fixes mais aussi des mises à jour des API standards $SECURITY : version contenant des corrections critiques notamment relatives à la sécurité $PATCH #Java9ModuloLesModules 47 Une API est fournie pour obtenir des info sur le numéro de version
  • 48. #DevoxxFR G1 par défaut Ramasse-miettes conçus pour réduire les temps de pause Notamment pour des heaps de taille importante Découpe une génération en régions de taille fixe #Java9ModuloLesModules 48 Remplace le Parallel GC comme GC par défaut pour les JVM 32 et 64 bits en mode server
  • 49. #DevoxxFR Compact Strings Réduire l’empreinte mémoire Nécessaire au stockage interne des chaînes de caractères Important car une grosse part du heap est utilisée pour stocker des chaînes de caractères #Java9ModuloLesModules Jusqu’à Java 8 : Tableau de caractères (char[]), chacun sur 16 bits Encodés en UTF-16 49
  • 50. #DevoxxFR Compact Strings Java 6 : première tentative avortée (retirée en Java 7) -XX:+UseCompressedStrings #Java9ModuloLesModules Java 9 : Tableau d’octets (byte []) Un octet précise le format : UTF16 ou Latin1 Important : aucun impact sur l’interface de la classe String Désactivation avec -XX:-CompactStrings 50
  • 51. #DevoxxFR Indify String concatenation Remplacer le byte-code généré par le compilateur Pour concaténer des chaînes avec StringBuilder (invokevirtual) En utilisant invoke dynamic Permettra de futures optimisations sans changer le byte-code généré par le compilateur #Java9ModuloLesModules 51
  • 52. #DevoxxFR 52 Le support de standards #Java9ModuloLesModules
  • 53. #DevoxxFR Unicode 7.0 et 8.0 Java 8 supporte Unicode 6.2 Java 9 support Unicode 6.3, 7.0 et 8.0 #Java9ModuloLesModules 53
  • 54. #DevoxxFR Javadoc Maintenant en HTML5 javadoc –html5 Vue par packages ou modules #Java9ModuloLesModules Recherche dans la Javadoc Implémentation en Javascript côté client 54
  • 55. #DevoxxFR PKCS12 dans le keystore Utilisation par défaut dans le keystore En remplacement de JKS Améliore la sécurité En utilisant des algorithmes plus forts #Java9ModuloLesModules 55
  • 56. #DevoxxFR SHA-3 Implémentation de fonctions de hachage SHA-3 Selon les spécifications NIST-FIPS 202 Algorithmes implémentés : SHA3-224, SHA3-256, SHA3-384 et SHA3-512 #Java9ModuloLesModules String chaine = "Bonjour"; md = MessageDigest.getInstance("SHA3-256"); byte donnees[] = md.digest(chaine.getBytes()); 56
  • 57. #DevoxxFR UTF-8 properties files Avant Java 9 Les fichiers properties doivent être encodés en ISO-8859-1 L’outil native2ascii pour convertir l’encoding du fichier En Java 9 La classe PropertyResourceBundle supporte l’encoding en UTF-8 Si une séquence d’octets invalide est détectée, relecture en ISO-8859-1 Option de la JVM pour forcer la lecture -Djava.util.PropertyResourceBundle.encoding=ISO-8859-1 #Java9ModuloLesModules 57
  • 59. #DevoxxFR Enhanced deprecation #Java9ModuloLesModules Enrichir @Deprecated boolean forRemoval() : prévue pour être retirée dans le future ? false par défaut String since() : version à partir de laquelle c’est deprecated "" par défaut Nouvel outil jdeprscan pour rechercher les API Deprecated utilisées Plusieurs @Deprecated ont été ajoutées, modifiées, supprimés ( java.awt.Component.show() et hide() ) 59
  • 60. #DevoxxFR Incubator modules Permet de développer et livrer des modules non standard en cours de développement #Java9ModuloLesModules Ces modules sont préfixés par jdk.incubator Les packages exportés sont aussi préfixés par jdk.incubator Leur nom sera changé une fois finalisé Leur utilisation requiert l’option --add-modules Un seul module d’incubation dans Java 9 HTTP 2.0 dans le module jdk.incubator.httpclient 60
  • 61. #DevoxxFR 61 Les fonctionnalités deprecated ou retirées #Java9ModuloLesModules
  • 62. #DevoxxFR Applet L’API Applet est deprecated java.applet.AppletStub, java.applet.Applet, java.applet.AudioClip, java.applet.AppletContext, javax.swing.Japplet L’outil appletviewer #Java9ModuloLesModules Le support du plug-in par les navigateurs est retiré ou le retrait est planifié Solution de remplacement : Java Web Start Pas de planification de suppression de l’API dans le futur 62
  • 63. #DevoxxFR Demos et exemples Obsolètes et non maintenus Retirés dans Java 9 #Java9ModuloLesModules 63
  • 64. #DevoxxFR Remove JVM TI hprof agent Les fonctionnalités utiles sont dans d’autres outils Heap dump avec jmap –dump Allocation profiling avec VisualVM CPU profiling avec VisualVM ou Java Flight Recorder #Java9ModuloLesModules 64
  • 66. #DevoxxFR Les fonctionnalités reportées Initialement, Java 9 devrait aussi intégrer : JEP 230 : Microbenchmark Suite basé sur JMH JEP 198 : Light weight Json API JEP 110 : client HTTP/2 et websocket (incubator) JSR 354 : Money and currency API Malheureusement celles-ci sont reportées Dans une version ultérieure de Java #Java9ModuloLesModules 66
  • 68. #DevoxxFR Conclusion Java 9 propose aussi de nombreuses autres fonctionnalités : JEP 266 : More concurrency updates CompletableFuture JEP 193 : Variable Handles JEP 274 : Enhanced methods handles JEP 231 : Remove Launch-time JRE version selection JEP 158 : Unified JVM Logging JEP 271 : Unified GC Logging JEP 246 : Leverage CPU Instructions for GHASH and RSA JEP 265 : Marlin Graphics Renderer JEP 197 : Segmented Code Cache JEP 288 : Disable SHA-1 Certificates JEP 219 : Datagram Transport Layer Security (DTLS) JEP 268 : XML Catalogs … #Java9ModuloLesModules 68
  • 69. #DevoxxFR Conclusion La release de Java est prévue pour le 27 juillet Il est possible de télécharger les versions EA (Early Access) https://jdk9.java.net/download/ Pour essayer ces fonctionnalités et les modules Avec le support (encore expérimental) des principaux IDE Consultez la documentation fournie par Oracle http://docs.oracle.com/javase/9/index.html #Java9ModuloLesModules 69
  • 70. #DevoxxFR Merci / Thank you 70#Java9ModuloLesModules