IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

La version définitive du JDK 13 est publiée avec la prise en charge d'Unicode 12.1
Et de nombreuses améliorations

Le , par Bill Fassinou

295PARTAGES

13  0 
La version définitive du JDK 13, la deuxième version majeure du kit de développement Java pour le compte de l’année 2019, vient d’être publiée. Comme prévu, le JDK 13 apporte cinq nouvelles fonctionnalités majeures, notamment une nouvelle implémentation de l’API de socket héritée (legacy socket API), l’amélioration du ramasse-miettes ZGC pour restituer la mémoire non allouée et l’ajout des blocs de texte. Il y a aussi dans cette version un aperçu des expressions switch et l’archivage dynamique des classes d'application à l'aide d'AppCDS dans HotSpot.

Le développement du JDK 13 a commencé plus tôt dans l’année, en même temps que la publication de la RC1 du JDK 12. Le JDK 13 est la deuxième version du kit développement Java qui est publiée cette année d’après le nouveau modèle de développement adopté par l’OpenJDK. Ce modèle prévoit deux différentes versions du JDK par an. En juillet 2019, OpenJDK a rendu publique la liste des fonctionnalités les plus importantes du JDK 13. Une release candidate (RC) a été publiée le 8 août passé et la version stable du JDK 13 a été publiée ce mardi 17 septembre.


Cette version du JDK introduit cinq nouvelles fonctionnalités pour le langage. On a, en général, la réimplémentation de l’API de socket héritée (legacy socket API), l’archivage dynamique des classes, l’ajout d’un aperçu des blocs de texte, un second aperçu des expressions switch (switch expressions) et l’amélioration de ZGC (Z Garbage Collector) pour restituer au système d’exploitation la mémoire non allouée. Voyons plus en détail de quoi il s’agit dans cette nouvelle version du langage.

La réimplémentation de l’API de socket héritée (legacy socket API)

Les API java.net.Socket et java.net.ServerSocket, ainsi que leurs implémentations sous-jacentes, remontent au JDK 1.0. L'implémentation est un mélange de code Java et C traditionnels qui est difficile à maintenir et à déboguer. L'implémentation utilise la pile de threads comme tampon d'E/S, une approche qui a nécessité d'augmenter à plusieurs reprises la taille de la pile de threads par défaut. L'implémentation utilise une structure de données native pour prendre en charge la fermeture asynchrone, source de fiabilité subtile et de problèmes de portage.

L'implémentation présente également plusieurs problèmes de concurrence qui nécessitent une refonte. Pour cela, dans le JDK 13, l'implémentation sous-jacente pour les API java.net.Socket et java.net.ServerSocket a été remplacée par une implémentation plus simple, plus moderne, plus facile à gérer et plus facile à déboguer. La nouvelle implémentation sera facile à adapter pour fonctionner avec des threads en mode utilisateur.

L’archivage dynamique des classes

L'archivage dynamique des classes d'application à l'aide d'AppCDS dans HotSpot offre des avantages supplémentaires en matière de temps de démarrage par rapport à l'archive CDS par défaut. Il améliore la convivialité d'AppCDS en éliminant la nécessité pour les utilisateurs de faire des essais pour créer une liste de classes pour chaque application. Toutefois, une procédure en trois étapes est actuellement requise pour utiliser AppCDS pour une application Java. La procédure fonctionne pour les applications utilisant uniquement des chargeurs de classes intégrés.

Il existe un autre support expérimental pour l'archivage des classes dans HotSpot, mais son utilisation n'est pas facile. L'archivage dynamique activé par une option de ligne de commande simplifiera l'utilisation d'AppCDS en éliminant les essais et prendra en charge les chargeurs de classes intégrés et les chargeurs de classes définis par l'utilisateur de manière efficace et uniforme. À l’avenir, d’autres améliorations pourront permettre la génération automatique d'archives lors de la première exécution d'une application.

Un aperçu des blocs de texte

En Java, incorporer un extrait de code HTML, XML, SQL ou JSON dans une chaîne littérale nécessite généralement une édition importante avec des échappements et des concaténations avant que le code contenant l'extrait ne soit compilé. Le fragment est souvent difficile à lire et difficile à maintenir. Cela ne devrait plus être le cas avec les blocs de texte. D’après l’équipe de développement du JDK 13, cette fonctionnalité n’est pas totalement stable, mais une version de prévisualisation a été fournie dans le JDK 3.

Un bloc de texte est une chaîne de caractères à plusieurs lignes qui évite d'avoir besoin de la plupart des séquences d'échappement. Un bloc de texte formate automatiquement la chaîne de caractères d'une manière prévisible et donne aux développeurs le contrôle du format. Les développeurs du JDK 13 ont cité un certain nombre d'objectifs derrière l'ajout de blocs de texte à Java. L'un des objectifs est de simplifier l'écriture des programmes Java en facilitant l'écriture des chaînes de caractères couvrant plusieurs lignes et en évitant le plus possible les séquences d'échappement.
Un deuxième objectif est d'améliorer la lisibilité des chaînes de caractères dans les programmes qui indiquent que le code écrit provient d'autres langages.

Les améliorations apportées à ZGC (Z Garbage Collector)

ZGC est un ramasse-miettes évolutif et à faible latence. Il ne renvoie pas actuellement la mémoire inutilisée au système d'exploitation, même si la mémoire n'a pas été utilisée depuis longtemps. Ce comportement n'est pas optimal pour certaines applications et certains environnements, en particulier ceux où l'empreinte mémoire est un problème, comme les conteneurs ou les environnements où une application peut rester inactive pendant longtemps et partager ou concurrencer des ressources avec d'autres applications. Mais ce comportement a été amélioré.

Des améliorations ont été apportées au ramasse-miettes ZGC (Z Garbage Collector) pour retourner la mémoire inutilisée au système d'exploitation. Lorsque l’équipe a présenté un aperçu du JDK 13 en juillet dernier, elle avait indiqué que d'autres éboueurs (ramasse-miettes ou garbage collector) de HotSpot, tels que G1 et Shenandoah, fournissent déjà cette capacité que certaines catégories d'utilisateurs ont trouvée très utile. De cette manière, l'ajout de cette capacité à ZGC pourrait également être bien accueilli par le même groupe d'utilisateurs.

Un deuxième aperçu des expressions switch

Les expressions switch ont été proposées pour la première fois en décembre 2017 par le JEP 325. Elles ont été ciblées sur le JDK 12 en août 2018 à titre de prévisualisation. Des commentaires ont d'abord été sollicités sur la conception de la fonctionnalité, puis sur l'utilisation des expressions switch et de l'instruction switch améliorée. Un aperçu a été rendu disponible dans le JDK 12, mais de nouveaux changements ont été apportés depuis cette version. Le JDK 13 apporte une modification à la fonctionnalité pour générer une valeur à partir d'une expression switch.


L’instruction « break with value » est supprimée au profit d'une nouvelle instruction « yield ». En effet, l'intention est d'étendre switch pour qu'il puisse être utilisé soit comme une instruction, soit comme une expression, de sorte que les deux formes peuvent soit utiliser la casse traditionnelle ou la nouvelle casse, avec une nouvelle instruction pour donner une valeur à partir d'une expression switch. Ces modifications simplifieront le codage quotidien et ouvriront la voie à l’utilisation du filtrage par motif dans switch.

La prise en charge d’Unicode 12.1

Cette version du JDK met à jour le support Unicode de Java vers la version 12.1 de la norme Unicode qui inclut les éléments suivants :

  • java.lang.Character supporte la base de données de caractères d’Unicode 12.1, dans laquelle 12.0 ajoute 554 caractères depuis 11.0, portant le total de caractères à 137 928. Ces ajouts comprennent 4 nouveaux scripts, pour un total de 150 scripts, ainsi que 61 nouveaux caractères emoji ;
  • les classes java.text.Bidi et java.text.Normalizer supportent les niveaux #9 et #15 des annexes standard Unicode (Unicode Standard Annex) de la norme Unicode 12.0 ;
  • le paquet java.util.regex supporte les clusters de graphèmes étendus basés sur le niveau #29 des annexes standard Unicode (Unicode Standard Annex) de la norme Unicode 12.0.

Source : Note de version du JDK 13

Et vous ?

Que pensez-vous du JDK 13 ?

Voir aussi

JDK 13 : toutes les fonctionnalités de la prochaine version du langage Java ont été verrouillées et une RC est prévue pour le 8 août prochain

Java : une version à accès anticipé du JDK 13 est publiée, Oracle veut unifier les deux méthodes de la classe GraphicsEnvironment

Les littéraux de chaîne bruts ont été supprimés de Java 12 comme l'a suggéré la proposition d'amélioration JDK (JEP)

Java : Oracle publie la première release candidate du JDK 12 avec toutes les fonctionnalités majeures annoncées sauf les littéraux de chaînes bruts

Java 12 disponible avec les expressions Switch, un nouveau récupérateur de mémoire à faible temps de pause et diverses améliorations pour G1

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de bouye
Rédacteur/Modérateur https://www.developpez.com
Le 19/09/2019 à 4:23
Une preview est disponible et ce devrait être fourni avec le JDK 14 sauf imprevu.
1  0 
Avatar de la.lune
Membre chevronné https://www.developpez.com
Le 04/11/2019 à 17:42
Juste une remarque. Il serait intéressant pour celui qui publie l'article de donner de petits bouts de code d’illustration que plus de littératures car les codeurs aiment le code et cela permettra d'apprendre facilement le basique de ses nouvelles fonctionnalités sans faire trop de recherches.

Alors moi personnellement j'ai aimé la facilité de l'expression switch suivant le style lambda avec la facilité du code par exemple
Code java : Sélectionner tout
1
2
3
4
5
6
7
8
  
    int resultat = switch (expStr){ 
     case "ab" -> 10; 
     case "cd",  "efg" -> 20 ; 
     case "hi" -> 30; 
     default -> 100; 
}; 
}

Pour ce qui est la galère d'écrire du texte dans une chaîne de caractère et le devoir de mettre toujours des \ pour les caractère spéciaux , ou perdre la bonne vue lors de l'impression au lieu de mettre des "\n" pour aller à la ligne ou le soucis des espace. Donc imaginez des expression comme ça, :
Code : Sélectionner tout
1
2
3
4
5
 String html="<html>\n"+                "       <body>\n" + 
                "           <p>\"Hello, world\"</p>\n" + 
                "       </body>\n" + 
 
               "  </html>";
En Java 13 on peut faire
Code : Sélectionner tout
1
2
3
4
5
6
7
 String html = """                <html> 
                  <body> 
                      <p>"Hello, world"</p> 
                  </body> 
                </html> 
                """; 
System.out.println(html);
ça va afficher intégralement tel qu'on l'a écrit en gardant même les espaces.
Code xml : Sélectionner tout
1
2
3
4
5
6
  
<html> 
  <body> 
      <p>"Hello, world"</p> 
  </body> 
</html>
Et cette galère
Code : Sélectionner tout
1
2
3
String json="\{ \"liste\" :"+ 
                             "\{ \"prenom\" : \"Fabien\"\}"+ 
                              "\}"
Peut être remplacé par
Code json : Sélectionner tout
1
2
3
4
5
String json=""" 
                   { "liste" : 
                             { "prenom" : "Fabien"} 
                     } 
                       """
1  0 
Avatar de deltree
Membre confirmé https://www.developpez.com
Le 18/09/2019 à 17:14
Tient je m'attendais voir apparaitre la commande "jPackage", la JEP 343 https://openjdk.java.net/jeps/343 qui était disponible en early. mais elle est toujours en candidate.

Pour info c'est un outils de packaging qui peut fonctionner avec les version actuelle en le téléchargeant séparément. Je le trouve intéressant pour une chaine de continuous delivery, notamment la possibilité de livrer de DEB/RPM/MSI. Mais pour une prochaine version donc.
0  0 
Avatar de wax78
Modérateur https://www.developpez.com
Le 19/09/2019 à 14:38
Les "blocs de texte" ... enfin ^^
0  0