Guide de Java 10

Guide de Java 10

1. introduction

JDK 10, qui est une implémentation de Java SE 10, a été publié le 20 mars 2018.

Dans cet article, nous aborderons et explorerons les nouvelles fonctionnalités et modifications introduites dans JDK 10.

2. Inférence de type de variable locale

Suivez le lien pour un article détaillé sur cette fonctionnalité:

3. Collections non modifiables

Quelques modifications ont été apportées aux collections non modifiables dans Java 10.

3.1. copyOf()

java.util.List,java.util.Map andjava.util.Set each a obtenu une nouvelle méthode statiquecopyOf(Collection).

Il renvoie la copie non modifiable desCollection: donnés

@Test(expected = UnsupportedOperationException.class)
public void whenModifyCopyOfList_thenThrowsException() {
    List copyList = List.copyOf(someIntList);
    copyList.add(4);
}

Toute tentative de modification d'une telle collection entraînerait une exception sruntimejava.lang.UnsupportedOperationException.

3.2. toUnmodifiable*()

java.util.stream.Collectors get méthodes supplémentaires pour collecter unStream into non modifiableList,Map orSet:

@Test(expected = UnsupportedOperationException.class)
public void whenModifyToUnmodifiableList_thenThrowsException() {
    List evenList = someIntList.stream()
      .filter(i -> i % 2 == 0)
      .collect(Collectors.toUnmodifiableList());
    evenList.add(4);
}

Toute tentative de modification d'une telle collection entraînerait une exception sruntimejava.lang.UnsupportedOperationException.

4. Optional.ouElseThrow () *

java.util.Optional,java.util.OptionalDouble,java.util.OptionalIntandjava.util.OptionalLongeach a obtenu une nouvelle méthodeorElseThrow()qui ne prend aucun argument et lanceNoSuchElementExceptionsi aucune valeur n'est présente:

@Test
public void whenListContainsInteger_OrElseThrowReturnsInteger() {
    Integer firstEven = someIntList.stream()
      .filter(i -> i % 2 == 0)
      .findFirst()
      .orElseThrow();
    is(firstEven).equals(Integer.valueOf(2));
}

Elle est synonyme de et est désormais l'alternative préférée à la méthodeget()existante.

5. Amélioration des performances

Suivez le lien pour un article détaillé sur cette fonctionnalité:

6. Conscience des conteneurs

JVMs are now aware of being run in a Docker container and extraira la configuration spécifique au conteneur au lieu d'interroger le système d'exploitation lui-même - il s'applique aux données telles que le nombre de processeurs et la mémoire totale alloués au conteneur.

Toutefois, cette prise en charge est uniquement disponible pour les plates-formes basées sur Linux. Cette nouvelle prise en charge est activée par défaut et peut être désactivée dans la ligne de commande avec l'option JVM:

-XX:-UseContainerSupport

De plus, cette modification ajoute une option JVM permettant de spécifier le nombre de processeurs que la machine virtuelle utilisera:

-XX:ActiveProcessorCount=count

En outre, trois nouvelles options de machine virtuelle Java ont été ajoutées pour permettre aux utilisateurs du conteneur Docker d’obtenir un contrôle plus précis de la quantité de mémoire système qui sera utilisée pour le segment de mémoire Java:

-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage

7. Certificats racine

Le fichier de clés cacerts, qui était initialement vide jusqu'à présent, est destiné à contenir un ensemble de certificats racine pouvant être utilisés pour établir la confiance dans les chaînes de certificats utilisées par divers protocoles de sécurité.

Par conséquent, les composants de sécurité critiques tels que TLS ne fonctionnaient pas par défaut sous les versions OpenJDK.

With Java 10, Oracle has open-sourced the root certificates in le programme Java SE Root CA d'Oracle afin de rendre les builds OpenJDK plus attractifs pour les développeurs et de réduire les différences entre ces builds et les builds Oracle JDK.

8. Dépréciations et suppressions

8.1. Options et outils de ligne de commande

L'outiljavah has a été supprimé de Java 10, ce qui a généré des en-têtes C et des fichiers source qui étaient nécessaires pour implémenter des méthodes natives - maintenant, l'analysejavac -h peut être utilisée à la place.

policytool was l'outil basé sur l'interface utilisateur pour la création et la gestion des fichiers de stratégie. Cela a maintenant été supprimé. L'utilisateur peut utiliser un éditeur de texte simple pour effectuer cette opération.

Suppression de l'optionjava -Xprof. L'option a été utilisée pour profiler le programme en cours et envoyer les données de profilage à la sortie standard. L'utilisateur doit maintenant utiliser le tabouretjmap à la place.

8.2. APIs

Le package java.security.acl obsolète a été marqué pourRemoval = true et doit être supprimé dans une future version de Java SE. Il a été remplacé parjava.security.Policy classes liées au sable.

De même, les API java.security. \ {Certificate, Identity, IdentityScope, Signer} sont marquéesforRemoval=true.

9. Gestion des versions de version en fonction du temps

À partir de Java 10, Oracle est passé à la version Java de Time. Cela a des implications suivantes:

  1. A new Java release every six months. La version de mars 2018 est JDK 10, la version de septembre 2018 est JDK 11, et ainsi de suite. Celles-ci sont appelées fonctionnalités et devraient contenir au moins une ou deux fonctionnalités importantes.

  2. Support for the feature release will last only for six months, c'est-à-dire jusqu'à la prochaine version de la fonctionnalité

  3. La version de support à long terme sera marquée comme LTS. Le support pour une telle publication sera de trois ans

  4. Java 11 sera une version LTS

java -version will now contain the GA date, ce qui permet d'identifier plus facilement l'âge de la version:

$ java -version
openjdk version "10" 2018-03-20
OpenJDK Runtime Environment 18.3 (build 10+46)
OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)

10. Conclusion

Dans cet article, nous avons vu les nouvelles fonctionnalités et les modifications apportées par Java 10.

Comme d'habitude, des extraits de code peuvent être trouvésover on GitHub.