Nouvelles fonctionnalités de Java 10

Cet article fait partie d'une série: • Inférence de type Java 10 LocalVariable

• Améliorations des performances de Java 10

• Nouvelles fonctionnalités de Java 10 (article actuel)

1. Introduction

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

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

2. Inférence de type de variable locale

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

Inférence de type de variable locale Java 10

3. Collections non modifiables

Il y a quelques changements liés aux collections non modifiables dans Java 10.

3.1. copie de()

java.util.List , java.util.Map et java.util.Set ont chacun une nouvelle méthode statique copyOf (Collection) .

Il renvoie la copie non modifiable de la collection donnée :

@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 d'exécution java.lang.UnsupportedOperationException .

3.2. toUnmodifiable * ()

java.util.stream.Collectors obtient des méthodes supplémentaires pour collecter un flux dans une liste , une carte ou un ensemble non modifiable :

@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 d'exécution java.lang.UnsupportedOperationException .

4. Facultatif * .orElseThrow ()

java.util.Optional , java.util.OptionalDouble , java.util.OptionalInt et java.util.OptionalLong ont chacun une nouvelle méthode orElseThrow () qui ne prend aucun argument et lance NoSuchElementException si 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)); }

C'est synonyme de et c'est maintenant l'alternative préférée à la méthode get () existante .

5. Améliorations des performances

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

Améliorations des performances de Java 10

6. Connaissance des conteneurs

Les machines virtuelles Java sont désormais conscientes de leur exécution dans un conteneur Docker et extraire la configuration spécifique au conteneur au lieu d'interroger le système d'exploitation lui-même - cela s'applique à des données telles que le nombre de processeurs et la mémoire totale alloués au conteneur.

Cependant, cette prise en charge n'est disponible que pour les plates-formes Linux. Ce nouveau support est activé par défaut et peut être désactivé dans la ligne de commande avec l'option JVM:

-XX:-UseContainerSupport

En outre, cette modification ajoute une option JVM qui offre la possibilité de spécifier le nombre de processeurs que la JVM utilisera:

-XX:ActiveProcessorCount=count

En outre, trois nouvelles options JVM ont été ajoutées pour permettre aux utilisateurs de conteneurs Docker d'obtenir un contrôle plus fin sur la quantité de mémoire système qui sera utilisée pour le tas Java:

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

7. Certificats racine

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

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

Avec Java 10, Oracle a ouvert les certificats racine dans le programme Oracle Java SE Root CA afin de rendre les builds OpenJDK plus attrayants 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'outil javah a été supprimé de Java 10, ce qui a généré des en-têtes C et des fichiers sources nécessaires pour implémenter des méthodes natives - maintenant, javac -h peut être utilisé à la place.

policytool était 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 simple éditeur de texte pour effectuer cette opération.

Suppression de l' option java -Xprof . L'option a été utilisée pour profiler le programme en cours d'exécution et envoyer les données de profilage vers la sortie standard. L'utilisateur doit maintenant utiliser l' outil jmap à la place.

8.2. Apis

Le package java.security.acl obsolète a été marqué forRemoval = true et est susceptible d'être supprimé dans une future version de Java SE. Il a été remplacé par java.security.Policy et les classes associées.

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

9. Gestion des versions de version en fonction du temps

Starting with Java 10, Oracle has moved to the time-based release of Java. This has following implications:

  1. A new Java release every six months. The March 2018 release is JDK 10, the September 2018 release is JDK 11, and so forth. These are called feature releases and are expected to contain at least one or two significant features
  2. Support for the feature release will last only for six months, i.e., until next feature release
  3. Long-term support release will be marked as LTS. Support for such release will be for three years
  4. Java 11 will be an LTS release

java -version will now contain the GA date, making it easier to identify how old the release is:

$ 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

In this article, we saw the new features and changes brought in by Java 10.

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

« Précédent Améliorations des performances de Java 10