Skip to content

startechsofteam/java9-presentation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 

Repository files navigation

Java 9

1. Overview

  • Date de release 2017/03/23

2. New features planned

2.1. Jigsaw

2.2. HTTP/2

La version actuellement supportée est toujours la 1.1, datant de 1999.
La nouvelle API supportant la version 2 sera bien plus simple à utiliser (utilisatio du pattern Builder)

2.3. Process API

Mise à jour de l’API Process afin de simplifier la récupération et la gestion des processus systèmes :

// Get PIDs of own or started processes
out.println("Your pid is " + ProcessHandle.current().getPid());

Process p = Runtime.getRuntime().exec("sleep 1h");
ProcessHandle h = ProcessHandle.of(p.getPid())  // Optional
        .orElseThrow(IllegalStateException::new);

// Do things on exiting process          // CompletableFuture
h.onExit().thenRun( ()-> out.println("Sleeper exited") );

// Get info on process
out.printf("[%d] %s - %s\n", h.getPid(),
           h.info().user().orElse("unknown"),
           h.info().commandLine().orElse("none"));

// Kill a process
h.destroy();

2.4. REPL (JShell)

REPL = Read Eval Print Loop

Correspond au projet Kulla, maintenant connu comme JShell.

L’API et l’outil JShell fourniront un moyen d’évaluer de manière interactive les déclarations, les instructions et les expressions du langage de programmation Java dans le JShell State. Le State JShell comprend un code évolutif et un Executin State. Pour faciliter l’investigation et le codage rapides, les Statements et les expressions ne doivent pas apparaître dans une méthode, les expressions n’ont pas besoin d’effets secondaires, les variables ne doivent pas apparaître dans une classe et les méthodes ne doivent pas apparaître dans une classe ou une interface.

L’outil jshell sera un outil de command-line avec des features pour faciliter l’interaction, y compris : historique de l’édition, tab-completion, l’ajout automatique des points-virgules du terminal et configurabilité prédéfinie des imports et définitions.

2.5. Immutable collection factories

Parmi les nombreux reproches faits à Java, son côté super verbeux revient souvent. On souffre le martyre pour une simple instanciation d’une collection de String : Voici un exemple :

Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
set = Collections.unmodifiableSet(set);

Une collection aussi triviale devait s’instancier en une ligne de code !

Il a fallu attendre Java 9 pour cela (avec une forte inspiration de Guava) :

/* Comment sections would break ... */
List<Integer> listOfNumbers = List.of(1, 2, 3, 4, 5/*, null*/);

Set<Integer> setOfNumbers = Set.of(1, 2, 3, 4, 5/*, 1*/);

Map<String, String> mapOfString =
    Map.of("key1", "value1", "key2", "value2");

Map<String, String> moreMapOfString =
    Map.ofEntries(
        Map.entry("key1", "value1"),
        Map.entry("key2", "value2")/*,
        Map.entry("key1", "value3")*/
);

Pour résumer, on peut déclarer une collection, non modifiable, dans laquelle on peut initialiser quelques élements. ATTENTION :

  • on ne peut pas utiliser null comme élément

2.6. HTML5 Javadoc

Amélioration de l’outil javadoc pour générer du code conforme à la spécification HTML 5, et un nouveau champ de recherche a notamment était ajouté à la Javadoc désormais compatible HTML5/CSS3 !

Source :

2.7. Garbage Collector G1

Devient le garbage collector par défaut.

Limiter GC pause times est, en général, plus important que de maximiser le throughput. Le Switch vers un collector à low-pause tel que G1 devrait fournir une meilleure expérience globale, pour la plupart des utilisateurs, qu’un collector orienté throughput, tel que le Parallel GC, qui est actuellement la valeur par défaut.

De nombreuses améliorations de performance ont été apportées à G1 dans JDK 8 et à ses update releases, et d’autres améliorations sont prévues pour JDK 9. L’introduction du cconcurrent class unloading (JEP 156) dans JDK 8u40 a fait G1 un fully-featured garbage collector, prêt à être le par défaut.

2.8. Autres améliorations

Stephen Colebourne, le papa de Joda Time, a annoncé de nouvelles améliorations du Java Time dans Java SE9.

  1. Ajout de méthodes LocalDate.datesUntil et LocalDate.datesUntil(LocalDate,Period) renvoyant des streams de dates.

  2. Plus de précision dans la Clock.systemUTC().

  3. Ajout d’une méthode getDateTimeMillis()

  4. Ajout de méthodes de calcul de "Duration" en date, heure, sec etc…​

  5. Méthode pour tronquer une duration Duration.truncatedTo(TemporalUnit)

  6. Méthode pour diviser une duration Duration.dividedBy(Duration).

  7. Nouvelle Factory pour simplifier la conversion de Instant à LocalTime et LocalDate

  8. Ajout d’une méthode de conversion toEpochSecond

About

Présentation des nouveautés Java 9

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published