logo

Fonctionnalités Java 8

Oracle a publié une nouvelle version de Java sous le nom de Java 8 le 18 mars 2014. Il s'agissait d'une version révolutionnaire de Java pour la plate-forme de développement logiciel. Il comprend diverses mises à niveau de la programmation Java, de la JVM, des outils et des bibliothèques.

Améliorations du langage de programmation Java 8

Java 8 fournit les fonctionnalités suivantes pour la programmation Java :

  • Expressions lambda,
  • Références de méthodes,
  • Interfaces fonctionnelles,
  • API de flux,
  • Méthodes par défaut,
  • Décodage d'encodage Base64,
  • Méthodes statiques en interface,
  • Cours optionnel,
  • Cours de collectionneurs,
  • Méthode ForEach(),
  • Moteur JavaScript Rhino,
  • Tri en réseau parallèle,
  • Taper et répéter les annotations,
  • Améliorations des E/S,
  • Améliorations de la concurrence,
  • Améliorations JDBC, etc.

Expressions lambda

L'expression Lambda nous aide à écrire notre code dans un style fonctionnel. Il fournit un moyen clair et concis d’implémenter l’interface SAM (Single Abstract Method) en utilisant une expression. Il est très utile dans la bibliothèque de collections dans laquelle il permet d'itérer, de filtrer et d'extraire des données.

Pour plus d’informations et d’exemples : Cliquez ici


Références de méthodes

Java 8 La référence à la méthode est utilisée pour faire référence à la méthode de l'interface fonctionnelle . Il s’agit d’une forme compacte et simple d’expression lambda. Chaque fois que vous utilisez une expression lambda pour simplement faire référence à une méthode, vous pouvez remplacer votre expression lambda par une référence de méthode.

Pour plus d’informations et d’exemples : Cliquez ici


Interface fonctionnelle

Une interface qui ne contient qu’une seule méthode abstraite est appelée interface fonctionnelle. Il peut avoir un certain nombre de méthodes par défaut et statiques. Il peut également déclarer des méthodes de classe d'objet.

Les interfaces fonctionnelles sont également connues sous le nom d'interfaces de méthode abstraite unique (interfaces SAM).

Pour plus d’informations et d’exemples : Cliquez ici


Facultatif

Java a introduit une nouvelle classe facultative dans Java 8. Il s'agit d'une classe finale publique utilisée pour gérer NullPointerException dans l'application Java. Il faut importer java.util package pour utiliser cette classe. Il fournit des méthodes pour vérifier la présence d’une valeur pour une variable particulière.

Pour plus d’informations et d’exemples : Cliquez ici


pour chaque

Java fournit une nouvelle méthode forEach() pour itérer les éléments. Il est défini dans les interfaces Iterable et Stream.

Il s'agit d'une méthode par défaut définie dans l'interface Iterable. Les classes de collection qui étendent l’interface Iterable peuvent utiliser la méthode forEach() pour itérer les éléments.

Cette méthode prend un seul paramètre qui est une interface fonctionnelle. Ainsi, vous pouvez passer l’expression lambda comme argument.

Pour plus d’informations et d’exemples : Cliquez ici


API Date/Heure

Java a introduit une nouvelle API de date et d'heure depuis Java 8. Le package java.time contient les classes de date et d'heure Java 8.

Pour plus d’informations et d’exemples : Cliquez ici


Méthodes par défaut

Java fournit une fonctionnalité permettant de créer des méthodes par défaut dans l'interface. Les méthodes définies dans l'interface et étiquetées avec le mot-clé default sont appelées méthodes par défaut. Ces méthodes sont des méthodes non abstraites et peuvent avoir un corps de méthode.

Pour plus d’informations et d’exemples : cliquez ici


Moteur JavaScript de Rhino

Nashorn est un moteur JavaScript. Il est utilisé pour exécuter dynamiquement du code JavaScript sur JVM (Java Virtual Machine). Java fournit un outil en ligne de commande etc. qui est utilisé pour exécuter du code JavaScript.

Vous pouvez exécuter du code JavaScript de deux manières :

  1. À l'aide de l'outil de ligne de commande jjs, et
  2. En l'intégrant dans le code source Java.

Pour plus d’informations et d’exemples : cliquez ici


Menuisier de chaînes

Java a ajouté une nouvelle classe finale StringJoiner dans le package java.util. Il permet de construire une séquence de caractères séparés par un délimiteur. Maintenant, vous pouvez créer une chaîne en passant des délimiteurs comme une virgule (,), un trait d'union (-), etc.

objectif java

Pour plus d’informations et d’exemples : cliquez ici


Collectionneurs

Collectors est une classe finale qui étend la classe Object. Il propose des opérations de réduction, telles que l'accumulation d'éléments dans des collections, la synthèse d'éléments selon divers critères, etc.

Pour plus d’informations et d’exemples : Cliquez ici


API de flux

Le package Java 8 java.util.stream se compose de classes, d'interfaces et d'une énumération pour permettre des opérations de style fonctionnel sur les éléments. Il effectue un calcul paresseux. Ainsi, il ne s’exécute que lorsque cela est nécessaire.

Pour plus d’informations et d’exemples : Cliquez ici


Filtre de flux

Le flux Java fournit une méthode filter() pour filtrer les éléments du flux en fonction d'un prédicat donné. Supposons que vous souhaitiez obtenir uniquement les éléments pairs de votre liste, vous pouvez le faire facilement à l'aide de la méthode filter().

Cette méthode prend le prédicat comme argument et renvoie un flux d'éléments résultants.

Pour plus d’informations et d’exemples : Cliquez ici


Encodage et décodage Java Base64

Java fournit une classe Base64 pour gérer le chiffrement et le déchiffrement. Vous devez importer la classe java.util.Base64 dans votre fichier source pour utiliser ses méthodes.

Cette classe fournit trois encodeurs et décodeurs différents pour crypter les informations à chaque niveau.

Pour plus d’informations et d’exemples : Cliquez ici


Tri de tableaux parallèles Java

Java fournit une nouvelle fonctionnalité supplémentaire dans la classe Arrays qui est utilisée pour trier les éléments du tableau en parallèle. La méthode parallelSort() a été ajoutée à la classe java.util.Arrays qui utilise le pool commun de parallélisme Fork/Join JSR 166 pour fournir le tri des tableaux. C'est une méthode surchargée.

Pour plus d’informations et d’exemples : cliquez ici


Améliorations de la sécurité Java 8

1) Le fournisseur Java Secure Socket Extension (JSSE) active les protocoles Transport Layer Security (TLS) 1.1 et TLS 1.2 par défaut côté client.

2) Une méthode améliorée AccessController.doPrivileged a été ajoutée qui permet au code d'affirmer un sous-ensemble de ses privilèges, sans empêcher la traversée complète de la pile pour vérifier d'autres autorisations.

3) Les algorithmes Advanced Encryption Standard (AES) et Password-Based Encryption (PBE), tels que PBEWithSHA256AndAES_128 et PBEWithSHA512AndAES_256, ont été ajoutés au fournisseur SunJCE.

4) Java Secure Socket Extension (SunJSSE) a activé l'extension Server Name Indication (SNI) pour les applications client par défaut dans JDK 7 et JDK 8 prend en charge l'extension SNI pour les applications serveur. L'extension SNI est une fonctionnalité qui étend les protocoles SSL/TLS pour indiquer le nom du serveur auquel le client tente de se connecter lors de l'établissement de liaison.

5) SunJSSE est amélioré pour prendre en charge les algorithmes de chiffrement authentifié avec données associées (AEAD). Le fournisseur Java Cryptography Extension (SunJCE) a été amélioré pour prendre en charge l'implémentation du chiffrement AES/GCM/NoPadding ainsi que les paramètres de l'algorithme Galois/Counter Mode (GCM).

6) Un nouvel indicateur de commande -importpassword est ajouté à l'utilitaire keytool. Il est utilisé pour accepter un mot de passe et le stocker en toute sécurité sous forme de clé secrète. Des classes telles que java.security.DomainLoadStoreParameter et java.security.PKCS12Attribute sont ajoutées pour prendre en charge le type de magasin de clés DKS.

7) Dans JDK 8, les algorithmes cryptographiques ont été améliorés avec la variante SHA-224 de la famille SHA-2 d'implémentations de résumé de message.

8) Prise en charge améliorée de la cryptographie NSA Suite B qui comprend :

  • Enregistrement OID pour les algorithmes de cryptographie NSA Suite B
  • Prise en charge de la génération de paires de clés DSA de 2 048 bits et d'algorithmes de signature supplémentaires pour les clés DSA de 2 048 bits telles que SHA224withDSA et SHA256withDSA.
  • Levée de la restriction de taille de clé de 1024 à 2048 pour l'algorithme Diffie-Hellman (DH).

9) La classe SecureRandom permet de générer des nombres aléatoires cryptographiquement forts qui sont utilisés pour les clés privées ou publiques, les chiffrements et les messages signés. La méthode getInstanceStrong() a été introduite dans JDK 8, qui renvoie une instance du SecureRandom le plus puissant. Il doit être utilisé lorsque vous devez créer une clé privée et publique RSA. SecureRandom inclut les autres modifications suivantes :

  • Deux nouvelles implémentations ont été introduites pour les plates-formes UNIX, qui offrent un comportement bloquant et non bloquant.

10) Une nouvelle classe PKIXRevocationChecker est incluse qui vérifie l'état de révocation des certificats avec l'algorithme PKIX. Il prend en charge la vérification au mieux, la vérification des certificats d'entité finale et les options spécifiques au mécanisme.

11) Les normes de cryptographie à clé publique 11 (PKCS) ont été étendues pour inclure la prise en charge 64 bits pour Windows.

12) Deux nouveaux types de cache sont ajoutés à Kerberos 5. Le type none signifie qu'il n'y a pas de cache du tout et le type dfl signifie le cache basé sur un fichier de style DFL. De plus, la sous-clé demandée par l'accepteur est désormais prise en charge. Ils sont configurés à l'aide des propriétés système sun.security.krb5.rcache et sun.security.krb5.acceptor.subkey.

13) Dans JDK 8, la transition du protocole Kerberos 5 et la délégation contrainte sont prises en charge dans le même domaine.

14) Java 8 a désactivé le cryptage faible par défaut. Les types de chiffrement Kerberos 5 liés au DES ne sont pas pris en charge par défaut. Ces types de cryptage peuvent être activés en ajoutant allow_weak_crypto=true dans le fichier krb5.conf.

15) Vous pouvez définir le nom du serveur sur null pour désigner un serveur indépendant. Cela signifie qu'un client peut demander le service en utilisant n'importe quel nom de serveur. Une fois le contexte établi, le serveur peut récupérer le nom en tant que propriété négociée avec le nom de clé SASL.BOUND_SERVER_NAME.

16) Le pont Java Native Interface (JNI) vers le service de sécurité générique Java (JGSS) natif est désormais pris en charge sur Mac OS X. Vous pouvez définir la propriété système sun.security.jgss.native sur true pour l'activer.

17) Une nouvelle propriété système, jdk.tls.ephemeralDHKeySize est définie pour personnaliser les tailles de clés DH éphémères. La taille minimale de clé DH acceptable est de 1 024 bits, sauf pour les suites de chiffrement exportables ou le mode hérité (jdk.tls.ephemeralDHKeySize=legacy).

18) Le fournisseur Java Secure Socket Extension (JSSE) honore par défaut la préférence de suite de chiffrement du client. Cependant, le comportement peut être modifié pour respecter les préférences de suite de chiffrement du serveur en appelant SSLParameters.setUseCipherSuitesOrder(true) sur le serveur.


Améliorations des outils Java 8

1) Une commande jjs est introduite, qui invoque le moteur Nashorn soit en mode shell interactif, soit pour interpréter des fichiers de script.

2) La commande java est capable de lancer des applications JavaFX, à condition que l'application JavaFX soit correctement packagée.

3) La page de manuel de la commande Java (nroff et HTML) a été entièrement retravaillée. Les options avancées sont désormais divisées en Runtime, Compiler, Garbage Collection et Serviceability, en fonction du domaine qu'elles affectent. Plusieurs options auparavant manquantes sont maintenant décrites. Il existe également une section pour les options obsolètes ou supprimées depuis la version précédente.

4) Le nouvel outil de ligne de commande jdeps permet au développeur d'analyser les fichiers de classe pour déterminer les dépendances au niveau du package ou de la classe.

5) Vous pouvez accéder à distance aux commandes de diagnostic, qui n'étaient auparavant accessibles que localement via l'outil jcmd. L'accès à distance est fourni à l'aide de Java Management Extensions (JMX), de sorte que les commandes de diagnostic sont exposées à un MBean de plate-forme enregistré sur le serveur MBean de plate-forme. Le MBean est l'interface com.sun.management.DiagnosticCommandMBean.

6) Une nouvelle option -tsapolicyid est incluse dans l'outil jarsigner qui vous permet de demander un horodatage signé à une autorité d'horodatage et de le joindre à un fichier JAR signé.

7) Une nouvelle méthode java.lang.reflect.Executable.getParameters est incluse qui vous permet d'accéder aux noms des paramètres formels de n'importe quelle méthode ou constructeur. Cependant, les fichiers .class ne stockent pas les noms de paramètres formels par défaut. Pour stocker les noms de paramètres formels dans un fichier .class particulier et permettre ainsi à l'API Reflection de récupérer les noms de paramètres formels, compilez le fichier source avec l'option -parameters du compilateur javac.

8) Les règles de type pour les comparaisons binaires dans la section 15.21 de la spécification du langage Java (JLS) seront désormais correctement appliquées par javac.

9) Dans cette version, l'outil apt et son API associée contenus dans le package com.sun.mirror ont été supprimés.

Améliorations de Javadoc

Dans Java SE 8, les nouvelles API suivantes ont été ajoutées à l'outil Javadoc.

  • Une nouvelle API DocTree introduit un scanner qui vous permet de parcourir le code source représenté par un arbre de syntaxe abstrait. Cela étend l'API Compiler Tree pour fournir un accès structuré au contenu des commentaires javadoc.
  • Le package javax.tools contient des classes et des interfaces qui vous permettent d'appeler l'outil Javadoc directement depuis une application Java, sans exécuter de nouveau processus.
  • La section 'Résumé de la méthode' de la documentation générée d'une classe ou d'une interface a été restructurée. Les descriptions de méthodes dans cette section sont regroupées par type. Par défaut, toutes les méthodes sont répertoriées. Vous pouvez cliquer sur un onglet pour afficher les méthodes d'un type particulier (statique, instance, abstraite, concrète ou obsolète, si elles existent dans la classe ou l'interface).
  • L'outil javadoc prend désormais en charge la vérification du contenu des commentaires javadoc pour détecter les problèmes susceptibles d'entraîner divers problèmes, tels qu'un code HTML non valide ou des problèmes d'accessibilité, dans les fichiers générés par javadoc. La fonctionnalité est activée par défaut et peut également être contrôlée par la nouvelle option -Xdoclint.

Améliorations du Pack200

Le format de fichier de classe Java a été mis à jour en raison de JSR 292 qui prend en charge les langages typés dynamiquement sur la plate-forme Java.

Le moteur Pack200 a été mis à jour pour garantir que les fichiers de classe Java SE 8 sont compressés efficacement. Désormais, il peut reconnaître les entrées de pool constantes et les nouveaux bytecodes introduits par JSR 292. Par conséquent, les fichiers compressés créés avec cette version de l'outil pack200 ne seront pas compatibles avec les anciennes versions de l'outil unpack200.


Améliorations des E/S Java 8

Dans Java 8, plusieurs améliorations ont été apportées aux implémentations java.nio.charset.Charset et jeu de caractères étendu. Il comprend les éléments suivants :

  • Un nouveau SelectorProvider qui peut améliorer les performances ou l'évolutivité du serveur. Le /dev/poll SelectorProvider reste la valeur par défaut. Pour utiliser le mécanisme de port d'événement Solaris, exécutez avec la propriété système java.nio.channels.spi.Selector définie sur la valeur sun.nio.ch.EventPortSelectorProvider.
  • La taille du fichier /jre/lib/charsets.jar est réduite.
  • Les performances ont été améliorées pour le constructeur java.lang.String(byte[], ∗) et la méthode java.lang.String.getBytes().

Améliorations du réseau Java 8

1) Une nouvelle classe java.net.URLPermission a été ajoutée. Il représente une autorisation d'accès à une ressource définie par une URL donnée.

2) Un package jdk.net a été ajouté. Il contient des options de socket spécifiques à la plate-forme et un mécanisme permettant de définir ces options sur tous les types de socket standard. Les options de socket sont définies dans jdk.net.ExtendedSocketOptions.

3) Dans la classe HttpURLConnection, si un gestionnaire de sécurité est installé, et si une méthode est appelée qui aboutit à une tentative d'ouverture de connexion, l'appelant doit posséder soit une autorisation 'connect'SocketPermission à la combinaison hôte/port de l'URL de destination, soit une URLPermission qui autorise cette demande.

Si la redirection automatique est activée et que cette demande est redirigée vers une autre destination, l'appelant doit également avoir l'autorisation de se connecter à l'hôte/à l'URL redirigé.

fichier de modification Linux

Améliorations de la concurrence Java 8

Le package java.util.concurrent a ajouté deux nouvelles interfaces et quatre nouvelles classes.

Interfaces Java.util.concurrentes

Interface Description
interface statique publique CompletableFuture.AsynchronousCompletionTask Il s'agit d'une interface de marqueur utilisée pour identifier les tâches asynchrones produites par des méthodes asynchrones. Cela peut être utile pour surveiller, déboguer et suivre les activités asynchrones.
interface publique CompletionStage Il crée une étape d'un calcul éventuellement asynchrone, qui exécute une action ou calcule une valeur lorsqu'un autre CompletionStage se termine.

Classes Java.util.concurrent

Classe Description
classe publique CompletableFuture étend l'objet implémente Future, CompletionStage Il s'agit d'un futur qui peut être explicitement complété et peut être utilisé comme CompletionStage, prenant en charge les fonctions dépendantes et les actions qui se déclenchent à son achèvement.
classe statique publique ConcurrentHashMap.KeySetView étend l'objet implémente Set, sérialisable Il s'agit d'une vue d'un ConcurrentHashMap sous la forme d'un ensemble de clés, dans lequel les ajouts peuvent éventuellement être activés par mappage sur une valeur commune.
la classe abstraite publique CountedCompleter étend ForkJoinTask Une ForkJoinTask avec une action d’achèvement effectuée lorsqu’elle est déclenchée et il n’y a plus d’actions en attente.
la classe publique CompletionException étend RuntimeException Il lève une exception lorsqu'une erreur ou une autre exception est rencontrée au cours de l'exécution d'un résultat ou d'une tâche.

Nouvelles méthodes dans la classe java.util.concurrent.ConcurrentHashMap

La classe ConcurrentHashMap introduit plusieurs nouvelles méthodes dans sa dernière version. Il comprend diverses méthodes forEach (forEach, forEachKey, forEachValue et forEachEntry), des méthodes de recherche (search, searchKeys, searchValues ​​et searchEntries) et un grand nombre de méthodes de réduction (reduce, réduireToDouble, réduireToLong etc.). D'autres méthodes diverses (mappingCount et newKeySet) ont également été ajoutées.

Nouvelles classes dans java.util.concurrent.atomic

La dernière version introduit une prise en charge variable, évolutive et actualisable via un petit ensemble de nouvelles classes DoubleAccumulator, DoubleAdder, LongAccumulator et LongAdder. Il utilise en interne des techniques de réduction des conflits qui offrent d'énormes améliorations de débit par rapport aux variables atomiques.

Classe Description
la classe publique DoubleAccumulator étend Number implémente Serialisable Il est utilisé pour une ou plusieurs variables qui, ensemble, maintiennent une double valeur courante mise à jour à l'aide d'une fonction fournie.
la classe publique DoubleAdder étend Number implémente Serialisable Il est utilisé pour une ou plusieurs variables qui, ensemble, maintiennent une double somme initialement nulle.
classe publique LongAccumulator étend Number implémente Serialisable Il est utilisé pour une ou plusieurs variables qui, ensemble, maintiennent une valeur longue en cours mise à jour à l'aide d'une fonction fournie.
la classe publique LongAdder étend Number implémente Serialisable Il est utilisé pour une ou plusieurs variables qui, ensemble, maintiennent une somme longue initialement nulle.

Nouvelles méthodes dans la classe java.util.concurrent.ForkJoinPool

Cette classe a ajouté deux nouvelles méthodes getCommonPoolParallelism() et commonPool(), qui renvoient respectivement le niveau de parallélisme ciblé du pool commun ou de l'instance de pool commun.

Méthode Description
public statique ForkJoinPool commonPool() Il renvoie l'instance de pool commun.
Int statique public getCommonPoolParallelism() Il renvoie le niveau de parallélisme ciblé du pool commun.

Nouvelle classe java.util.concurrent.locks.StampedLock

Une nouvelle classe StampedLock est ajoutée et est utilisée pour ajouter un verrouillage basé sur les capacités avec trois modes de contrôle de l'accès en lecture/écriture (écriture, lecture et lecture optimiste). Cette classe prend également en charge les méthodes qui fournissent conditionnellement des conversions dans les trois modes.

Classe Description
la classe publique StampedLock étend l'objet implémente sérialisable Cette classe représente un verrou basé sur les capacités avec trois modes pour contrôler l'accès en lecture/écriture.

API Java pour le traitement XML (JAXP) 1.6 Améliorations

Dans Java 8, l'API Java est ajoutée pour XML Processing (JAXP) 1.6. Cela nécessite l'utilisation de la fonction de chargement du fournisseur de services définie par java.util.ServiceLoader pour charger les services à partir des fichiers de configuration de service.

La raison en est de permettre une modularisation future de la plate-forme Java SE où les fournisseurs de services pourront être déployés par des moyens autres que les fichiers JAR et peut-être sans les fichiers de configuration du service.


Améliorations de la machine virtuelle Java

La vérification des instructions InvokeSpecial a été renforcée afin que seule une méthode d'initialisation d'instance dans la classe actuelle ou sa super classe directe puisse être invoquée.


Java Mission Control 5.3 est inclus dans Java 8

Java Mission Control (JMC) est un ensemble d'outils avancés qui permettent une analyse efficace et détaillée des données et offrent une surveillance et une gestion Java avancées et discrètes. JMC fournit des sections pour les domaines d'analyse courants tels que les performances du code, la mémoire et la latence.

saisir une chaîne en java

Les packs linguistiques Babel en japonais et en chinois simplifié sont désormais inclus par défaut dans Java Mission Control inclus dans le JDK 8.


Améliorations de l'internationalisation de Java 8

1) Améliorations Unicode

Le JDK 8 inclut la prise en charge d'Unicode 6.2.0. Il contient les fonctionnalités suivantes.

  • 733 nouveaux caractères, dont le signe de la livre turque.
  • 7 nouveaux scripts :
    • Hiéroglyphes méroïtiques
    • Cursive méroïtique
    • Sora Sompeng
    • Chakma
    • Sharada
    • Takri
    • Miao
  • 11 nouveaux blocs : dont 7 blocs pour les nouveaux scripts listés ci-dessus et 4 blocs pour les scripts existants suivants :
  • Arabe étendu-A
  • Supplément sundanais
  • Réunion des extensions Meek
  • Symboles alphabétiques mathématiques arabes

Adoption des données Unicode CLDR et de la propriété système java.locale.providers

Le Consortium Unicode a publié le projet CLDR (Common Locale Data Repository) pour « prendre en charge les langues du monde, avec le référentiel standard le plus grand et le plus complet de données locales disponibles ». Le CLDR est en train de devenir la norme de facto pour les données locales. Les données locales basées sur XML du CLDR ont été incorporées dans la version JDK 8, mais elles sont désactivées par défaut.

Il existe quatre sources distinctes pour les données locales :

  • CLDR représente les données de paramètres régionaux fournies par le projet Unicode CLDR.
  • HOST représente la personnalisation par l'utilisateur actuel des paramètres du système d'exploitation sous-jacent. Il fonctionne uniquement avec les paramètres régionaux par défaut de l'utilisateur et les paramètres personnalisables peuvent varier en fonction du système d'exploitation, mais les formats de date, d'heure, de nombre et de devise sont principalement pris en charge.
  • SPI représente les services sensibles aux paramètres régionaux implémentés dans les fournisseurs SPI installés.
  • JRE représente les données de paramètres régionaux compatibles avec les versions précédentes de JRE.

Pour sélectionner la source de données de paramètres régionaux souhaitée, utilisez la propriété système java.locale.providers. listant les sources de données dans l’ordre préféré. Par exemple : java.locale.providers=HOST,SPI,CLDR,JRE Le comportement par défaut est équivalent au paramètre suivant : java.locale.providers=JRE,SPI


Java 8 Nouvelles API de calendrier et de paramètres régionaux

Le JDK 8 inclut deux nouvelles classes, plusieurs nouvelles méthodes et une nouvelle valeur de retour pour une méthode statique existante.

Deux nouvelles classes abstraites pour les fournisseurs de services sont ajoutées au package java.util.spi.

Classe Description
la classe abstraite publique CalendarDataProvider étend LocaleServiceProvider Il s'agit d'une classe abstraite destinée aux fournisseurs de services qui fournissent des paramètres de calendrier dépendants des paramètres régionaux.
la classe abstraite publique CalendarNameProvider étend LocaleServiceProvider Il s'agit d'une classe abstraite destinée aux fournisseurs de services qui fournissent des représentations sous forme de chaîne localisées (noms d'affichage) des valeurs des champs du calendrier.

Une méthode statique est désormais capable de reconnaître Locale.UNICODE_LOCALE_EXTENSION pour le système de numérotation.

Méthode Description
public static final DecimalFormatSymbols getInstance (Locale locale) Il est utilisé pour obtenir l'instance DecimalFormatSymbols pour les paramètres régionaux spécifiés. Cette méthode permet d'accéder aux instances DecimalFormatSymbols pour les paramètres régionaux pris en charge par le runtime Java lui-même ainsi que pour ceux pris en charge par les implémentations DecimalFormatSymbolsProvider installées. Il lève NullPointerException si les paramètres régionaux sont nuls.

Ajout de nouvelles méthodes dans l'API du calendrier :

Méthode Description
public booléen isSupportedLocale(Locale locale) Il renvoie vrai si les paramètres régionaux donnés sont pris en charge par ce fournisseur de services de paramètres régionaux. Les paramètres régionaux donnés peuvent contenir des extensions qui doivent être prises en compte pour la détermination de la prise en charge. Il est défini dans la classe java.util.spi.LocaleServiceProvider
chaîne publique getCalendarType() Il renvoie le type de calendrier de ce calendrier. Les types de calendrier sont définis par la spécification Unicode Locale Data Markup Language (LDML). Il est défini dans la classe java.util.Calendar.

De nouveaux spécificateurs de style sont ajoutés pour les méthodes Calendar.getDisplayName et Calendar.getDisplayNames afin de déterminer le format du nom du calendrier.


Spécificateur Description
public statique final int SHORT_FORMAT Il s'agit d'un spécificateur de style pour getDisplayName et getDisplayNames indiquant un nom court utilisé pour le format.
public statique final int LONG_FORMAT Il s'agit d'un spécificateur de style pour getDisplayName et getDisplayNames indiquant un nom long utilisé pour le format.
public statique final int SHORT_STANDALONE Il s'agit d'un spécificateur de style pour getDisplayName et getDisplayNames indiquant un nom court utilisé indépendamment, tel qu'une abréviation de mois comme en-têtes de calendrier.
public statique final int LONG_STANDALONE Il s'agit d'un spécificateur de style pour getDisplayName et getDisplayNames indiquant un nom long utilisé indépendamment, tel qu'un nom de mois comme en-tête de calendrier.

Deux nouvelles méthodes Locale pour gérer les extensions (facultatif) d'une locale.

Méthode Description
public booléen hasExtensions() Il renvoie vrai si ce paramètre régional a des extensions.
paramètres régionaux publics stripExtensions() Il renvoie une copie de ces paramètres régionaux sans extensions. Si ce Locale n'a pas d'extensions, ce Locale est renvoyé lui-même.

Deux nouvelles méthodes Locale.filter renvoient une liste d'instances Locale qui correspondent aux critères spécifiés, tels que définis dans la RFC 4647 :

Méthode Description
filtre de liste statique public (liste prioritaire, collections locales) Il renvoie une liste d'instances Locale correspondantes à l'aide du mécanisme de filtrage défini dans la RFC 4647. Cela équivaut à filter(List, Collection, FilteringMode) lorsque le mode est Locale.FilteringMode.AUTOSELECT_FILTERING.
Filtre de liste statique public (liste prioritaire, collections locales, mode Locale.FilteringMode) Il renvoie une liste d'instances Locale correspondantes à l'aide du mécanisme de filtrage défini dans la RFC 4647.

Deux nouvelles méthodes Locale.filterTags renvoient une liste de balises de langue qui correspondent aux critères spécifiés, tels que définis dans la RFC 4647.

Méthode Description
filtre de liste statique publiqueTags (liste prioritaire, balises de collection) Il renvoie une liste de balises de langues correspondantes en utilisant le mécanisme de filtrage de base défini dans la RFC 4647. Ceci est équivalent à filterTags(List, Collection, FilteringMode) lorsque le mode est Locale.FilteringMode.AUTOSELECT_FILTERING.
liste statique publique filterTags (liste prioritaire, balises de collection, mode Locale.FilteringMode) Il renvoie une liste de balises de langues correspondantes en utilisant le mécanisme de filtrage de base défini dans la RFC 4647.

Deux nouvelles méthodes de recherche renvoient la balise de langue ou de langue la mieux adaptée à l'aide du mécanisme de recherche défini dans la RFC 4647.

Méthode Description
Recherche de paramètres régionaux statiques publics (liste de priorités, collections de paramètres régionaux) Il renvoie une instance Locale pour la balise de langue la mieux adaptée à l'aide du mécanisme de recherche défini dans la RFC 4647.
LookupTag de chaîne statique publique (liste de priorité, balises de collection) Il renvoie la balise de langue la mieux adaptée à l'aide du mécanisme de recherche défini dans la RFC 4647.

Autres améliorations de la version Java 8

Améliorations du JDK 8u5

1) La fréquence à laquelle les invites de sécurité s'affichent pour une application a été réduite.


Améliorations du JDK 8u11

1) Une option permettant de supprimer les offres des sponsors lorsque le JRE est installé ou mis à jour est disponible dans l'onglet Avancé du panneau de configuration Java.

2) L'attribut Entry-Point peut être inclus dans le manifeste du fichier JAR pour identifier une ou plusieurs classes comme point d'entrée valide pour votre RIA (application Internet riche).


Améliorations du JDK 8u20

1) L'outil javafxpackager a été renommé javapackager. Cet outil a été amélioré avec de nouveaux arguments pour les bundles d'applications autonomes.

Les améliorations suivantes sont liées à l'outil Java :

  • Une option expérimentale du compilateur JIT liée à la mémoire transactionnelle restreinte (RTM) a été ajoutée.
  • Plusieurs options liées à la déduplication de chaînes ont été ajoutées.
  • Plusieurs options liées aux intrinsèques Advanced Encryption Standard (AES) ont été ajoutées.
  • Les combinaisons d’options de garbage collection sont obsolètes.

2) Le guide de réglage du Garbage Collection a été ajouté à la machine virtuelle Java HotSpot. Il décrit les garbage collector inclus avec la machine virtuelle Java HotSpot et vous aide à décider quel garbage collector peut le mieux optimiser les performances de votre application, en particulier s'il gère de grandes quantités de données (plusieurs gigaoctets), comporte de nombreux threads et a des taux de transaction élevés. .


Améliorations du JDK 8u31

1) Dans cette version, le protocole SSLv3 est supprimé des options avancées du panneau de configuration Java.


Améliorations du JDK 8u40

Outil Java

1) Le -XX:+CheckEndorsedAndExtDirs a été ajouté car le mécanisme de remplacement des normes approuvées (JDK-8065675) et le mécanisme d'extension (JDK-8065702) sont obsolètes. L'option permet d'identifier toutes les utilisations existantes de ces mécanismes et est prise en charge dans JDK 7u80 et JDK 8u40.

2) Java Flight Recorder (JFR) offre diverses façons de débloquer des fonctionnalités commerciales et d'activer JFR pendant l'exécution d'une application.

Il comprend des options de ligne de commande Java telles que les commandes de diagnostic jcmd et les contrôles d'interface utilisateur graphique (GUI) dans Java Mission Control. Cette flexibilité vous permet de fournir les options appropriées au démarrage ou d'interagir avec JFR ultérieurement.

3) L'option -XX:StartFlightRecording=parameter=value a un nouveau paramètre, dumponexit=true, qui spécifie si un fichier de vidage des données JFR doit être généré lorsque la JVM se termine de manière contrôlée.

4) Les options liées à la mémoire transactionnelle restreinte (RTM) ne sont plus expérimentales. Ces options incluent -XX:RTMAbortRatio=abort_ratio, -XX:RTMRetryCount=number_of_retries, -XX:+UseRTMDeopt et -XX:+UseRTMLocking.

5) Dans Java 8, le partage de données de classe d'application (AppCDS) a été introduit. AppCDS étend CDS (Class Data Sharing) pour permettre aux classes des répertoires d'extensions standard et au chemin de classe de l'application d'être placées dans l'archive partagée. Il s'agit d'une fonctionnalité commerciale et n'est plus considérée comme expérimentale.

6) De nouvelles options -XX:+ResourceManagement et -XX:ResourceManagementSampleInterval=value ont été ajoutées.

7) Des informations supplémentaires sur les grandes pages ont été ajoutées. Les grandes pages, également appelées pages énormes, sont des pages mémoire nettement plus grandes que la taille standard des pages mémoire. Les grandes pages optimisent les tampons de traduction et de recherche du processeur. Les options Linux -XX:+UseHugeTLBFS, -XX:+UseSHM et -XX:+UseTransparentHugePages ont été documentées.

8) L'option -XX:ObjectAlignmentInBytes=alignment a été documentée.

Outil JJS

1) L'option --optimistic-types=[true|false] a été ajoutée. Il active ou désactive les hypothèses de type optimistes avec une recompilation désoptimisante.

2) L'option --langue=[es5] a été ajoutée à l'outil jjs. Il spécifie la version du langage ECMAScript.

Outil JavaPackager

1) De nouveaux arguments sont disponibles pour les bundles OS X. L'argument mac.CFBundleVersion identifie le numéro de version interne à utiliser.

2) L'argument mac.dmg.simple indique si les étapes de personnalisation DMG qui dépendent de l'exécution du code AppleScript sont ignorées.

Outil Jcmd

L'outil Jcmd est utilisé pour interagir dynamiquement avec Java Flight Recorder (JFR). Vous pouvez l'utiliser pour déverrouiller des fonctionnalités commerciales, activer/démarrer/arrêter les enregistrements de vol et obtenir divers messages d'état du système.

Outil Jstat

L'outil jstat a été mis à jour avec des informations sur l'espace de classe compressé qui est une partie spéciale du métaespace.

Machine virtuelle

La fonctionnalité HotSpot VM de suivi de la mémoire native évolutive permet de diagnostiquer les fuites de mémoire de la VM et de clarifier les utilisateurs lorsque les fuites de mémoire ne se trouvent pas dans la VM. Native Memory Tracker peut être exécuté sans arrêt automatique sur les grands systèmes et sans entraîner d'impact significatif sur les performances au-delà de ce qui est considéré comme acceptable pour les petits programmes.