Présentations des nouveautés principales de Java 8 (programmation fonctionnelle, lambdas, streams, Date/Time, CompletableFuture, etc) et introduction à celles de Java 9.
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
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
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
• Lisibilité du code • Supporté par la Reflection API, e.g.: field.getAnnotatedType() • Exploitable via Java Annotation Processor comme Checker Framework Annotation de types @fbeaufume
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
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
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
• 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
• « 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