{"id":865,"date":"2019-01-23T16:58:55","date_gmt":"2019-01-23T14:58:55","guid":{"rendered":"http:\/\/www.loicmathieu.fr\/wordpress\/?p=865"},"modified":"2020-05-06T10:01:09","modified_gmt":"2020-05-06T08:01:09","slug":"java-12-quoi-de-neuf","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-12-quoi-de-neuf\/","title":{"rendered":"Java 12 : quoi de neuf ?"},"content":{"rendered":"<p>Maintenant que Java 12 est features complete (Rampdown Phase 2 au jour d&rsquo;\u00e9criture de l&rsquo;article), c&rsquo;est le moment de faire le tour des fonctionnalit\u00e9s qu&rsquo;apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs.<\/p>\n<p>Cet article fait parti d&rsquo;une suite d&rsquo;article sur les nouveaut\u00e9s des derni\u00e8res version de Java, pour ceux qui voudrait les lires en voici les liens : <a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-11-quoi-de-neuf\/\">Java 11<\/a>, <a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-10-quoi-de-neuf\/\">Java 10,<\/a>&nbsp;et&nbsp;<a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/les-nouveautes-de-java-9-pour-les-developeurs\/\">Java 9<\/a>.<\/p>\n<p>Et force est de constater qu&rsquo;\u00e0 part les switch expression, il n&rsquo;y a pas beaucoup de nouveaut\u00e9s \u00e0 destination des d\u00e9veloppeurs, on a faillit avoir des <a href=\"https:\/\/openjdk.java.net\/jeps\/326\">Raw String<\/a> (string multi-ligne) mais la fonctionnalit\u00e9 a \u00e9t\u00e9 supprim\u00e9e de la release au dernier moment, esp\u00e9rons qu&rsquo;elle r\u00e9appara\u00eetra bient\u00f4t &#8230;<\/p>\n<h3>JEP 325: Switch Expressions<\/h3>\n<p>C&rsquo;est la principale nouvelle fonctionnalit\u00e9 de Java 12, les switch expressions permettent de d\u00e9finir des switchs en tant qu&rsquo;expression pour en r\u00e9cup\u00e9rer le r\u00e9sultats dans une variable, le switch ne va donc plus \u00eatre juste une structure de contr\u00f4le (ensemble de if\/else) mais permettre de calculer un r\u00e9sultats.<\/p>\n<p>Une nouvelle syntaxe des switchs a \u00e9t\u00e9 ajout\u00e9e, plus pratique d&rsquo;utilisation et plus concise, qui utilise l&rsquo;op\u00e9rateur arrow d\u00e9j\u00e0 utilis\u00e9 dans les lambda : &lsquo;-&gt;&rsquo;. On peut utiliser cette nouvelle syntaxe aussi bien dans un switch classique que dans un switch expression.<\/p>\n<p>Voici un exemple de la nouvelle syntaxe qui utilise l&rsquo;op\u00e9rateur arrow, on peut noter que le break n&rsquo;est plus n\u00e9cessaire ici, cette nouvelle forme de switch ayant un break implicite :<\/p>\n<pre><code>switch (day) {\n    case MONDAY, FRIDAY, SUNDAY -&gt; System.out.println(6);\n    case TUESDAY                -&gt; System.out.println(7);\n    case THURSDAY, SATURDAY     -&gt; System.out.println(8);\n    case WEDNESDAY              -&gt; System.out.println(9);\n}<\/code><\/pre>\n<p>Voici un exemple de switch expression qui permet de calculer un entier repr\u00e9sentant le num\u00e9ro de jour, notez la pr\u00e9sence du &lsquo;;&rsquo; en fin d&rsquo;expression qui indique bien que nous ne sommes plus ici dans une structure de contr\u00f4le mais bien une expression :<\/p>\n<pre><code>int numLetters = switch (day) {\n    case MONDAY, FRIDAY, SUNDAY -&gt; 6;\n    case TUESDAY                -&gt; 7;\n    case THURSDAY, SATURDAY     -&gt; 8;\n    case WEDNESDAY              -&gt; 9;\n};<\/code><\/pre>\n<p>Dans cet exemple, chaque case \u00e9tant sur une ligne, on a un break implicite de la variable (ici un entier litt\u00e9ral).<\/p>\n<p>Il est possible d&rsquo;\u00e9crire des case sur plusieurs lignes, on doit alors \u00e9crire un break \u00e0 la fin du bloque de code avec la valeur que doit retourner l&rsquo;expression :<\/p>\n<pre><code>int j = switch (day) {\n    case MONDAY  -&gt; 0;\n    case TUESDAY -&gt; 1;\n    default      -&gt; {\n        int k = day.toString().length();\n        int result = f(k);\n        break result;\n    }\n};<\/code><\/pre>\n<p>Pour l&rsquo;instant, ce nouveau switch est en mode preview, pour l&rsquo;utiliser il faut ajouter l&rsquo;option <strong>&#8211;enable-preview<\/strong> \u00e0 la ligne de commande Java, esp\u00e9rons qu&rsquo;il sera en final dans la prochaine version &#8230;<\/p>\n<p>Plus d&rsquo;info dans la JEP : <a href=\"https:\/\/openjdk.java.net\/jeps\/325\"><a href=\"https:\/\/openjdk.java.net\/jeps\/325\">https:\/\/openjdk.java.net\/jeps\/325<\/a><\/a><\/p>\n<h3>Divers ajouts :<\/h3>\n<p>&#8211;&nbsp;<a href=\"https:\/\/bugs.openjdk.java.net\/browse\/JDK-8200435\"><a href=\"https:\/\/bugs.openjdk.java.net\/browse\/JDK-8200435\">https:\/\/bugs.openjdk.java.net\/browse\/JDK-8200435<\/a><\/a> <strong>String::align<\/strong> et <strong>String::indent<\/strong> : permet d&rsquo;aligner une string multi-ligne ou de l&rsquo;indenter.\n&#8211;&nbsp;<a href=\"https:\/\/bugs.openjdk.java.net\/browse\/JDK-8203442\"><a href=\"https:\/\/bugs.openjdk.java.net\/browse\/JDK-8203442\">https:\/\/bugs.openjdk.java.net\/browse\/JDK-8203442<\/a><\/a> <strong>String::transform<\/strong> : cr\u00e9\u00e9 une nouvelle String par transformation de la premi\u00e8re via une lambda fonction.\n&#8211;<a href=\"https:\/\/bugs.openjdk.java.net\/browse\/JDK-8202285\"> <a href=\"https:\/\/bugs.openjdk.java.net\/browse\/JDK-8202285\">https:\/\/bugs.openjdk.java.net\/browse\/JDK-8202285<\/a><\/a> :&nbsp;<strong>Files::isSameFile<\/strong> : permet de comparer deux fichiers pour savoir s&rsquo;ils sont identique (m\u00eame contenu).\n&#8211;&nbsp;<a href=\"https:\/\/bugs.openjdk.java.net\/browse\/JDK-8205461\"><a href=\"https:\/\/bugs.openjdk.java.net\/browse\/JDK-8205461\">https:\/\/bugs.openjdk.java.net\/browse\/JDK-8205461<\/a><\/a> : <strong>Collectors::teeing<\/strong> : cr\u00e9\u00e9 un collecteur qui est la composition de deux autres\n&#8211;&nbsp;<a href=\"https:\/\/bugs.openjdk.java.net\/browse\/JDK-8177552\"><a href=\"https:\/\/bugs.openjdk.java.net\/browse\/JDK-8177552\">https:\/\/bugs.openjdk.java.net\/browse\/JDK-8177552<\/a><\/a> :&nbsp;<strong>java.text.CompactNumberFormat<\/strong> permet de formater des nombres dans une forme compacte telle que d\u00e9finie par la norme&nbsp;<a href=\"http:\/\/unicode.org\/reports\/tr35\/tr35-numbers.html#Compact_Number_Formats\">LDML<\/a> : 1000 -&gt; 1K, 1000000 -&gt; 1M, &#8230;<\/p>\n<h3>JEP 341: Default CDS Archives<\/h3>\n<p><a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/vm\/class-data-sharing.html\">CDS : Class Data Sharing<\/a> est une fonctionnalit\u00e9 de la JVM qui permet de r\u00e9duire le temps de d\u00e9marrage de celle-ci, en enregistrant dans un fichier les metadatas des classes (leur repr\u00e9sentation dans la JVM), pour une r\u00e9utilisation lors du prochain lancement de la JVM. Avec la JEP 341, les classes du JDK seront pr\u00e9-process\u00e9 via le m\u00e9canisme CDS au moment de la cr\u00e9ation de la JVM, et charg\u00e9es par d\u00e9faut au d\u00e9marrage (pas besoin d&rsquo;argument sp\u00e9cifique dans la ligne de commande). On profitera donc <em>gratuitement<\/em> du m\u00e9canisme de CDS pour les classes du JDK!<\/p>\n<p>Plus d&rsquo;info dans la JEP: <a href=\"https:\/\/openjdk.java.net\/jeps\/341\"><a href=\"https:\/\/openjdk.java.net\/jeps\/341\">https:\/\/openjdk.java.net\/jeps\/341<\/a><\/a><\/p>\n<h3>JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector<\/h3>\n<p>Le petit nouveau Garbage Collector (GC): <strong>Shenandoah<\/strong>. D\u00e9velopp\u00e9 par Redhat et d\u00e9j\u00e0 inclus depuis plusieurs mois dans leur JVM, il est int\u00e9gr\u00e9 en tant que fonctionnalit\u00e9 exp\u00e9rimentale dans Java 12.<\/p>\n<p>Comme ZGC, c&rsquo;est un GC qui est concurrent \u00e0 l&rsquo;application et qui promets des pauses minimale (de l&rsquo;ordre de la milliseconde) pour des heap de tr\u00e8s grande taille (plusieurs centaines de Go). Il vise les heaps de grande taille et les machines \u00e0 plusieurs c\u0153urs.<\/p>\n<p>Pour l&rsquo;activer :<\/p>\n<p><code>-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC<\/code>.<\/p>\n<p>Plus d&rsquo;info dans la JEP:&nbsp;<a href=\"https:\/\/openjdk.java.net\/jeps\/189\"><a href=\"https:\/\/openjdk.java.net\/jeps\/189\">https:\/\/openjdk.java.net\/jeps\/189<\/a><\/a><\/p>\n<h3>JEP 346: Promptly Return Unused Committed Memory from G1<\/h3>\n<p>Une fonctionnalit\u00e9 qui permet au Garbage Collector G1 de retourner \u00e0 l&rsquo;OS de la m\u00e9moire quand il n&rsquo;en a plus besoin. Pour cela il ajoute un cycle de GC p\u00e9riodique, et se base sur le load average de la machine pour savoir son utilisation, et ainsi d\u00e9cider de retourner ou pas de la m\u00e9moire \u00e0 l&rsquo;OS. Cette fonctionnalit\u00e9 est d\u00e9sactiv\u00e9e par d\u00e9faut et peut \u00eatre activ\u00e9e via :<\/p>\n<p><code>-XX:G1PeriodicGCInterval=5000&amp;nbsp;-XX:G1PeriodicGCSystemLoadThreshold=1<\/code><\/p>\n<p>Plus d&rsquo;info dans la JEP: <a href=\"https:\/\/openjdk.java.net\/jeps\/346\"><a href=\"https:\/\/openjdk.java.net\/jeps\/346\">https:\/\/openjdk.java.net\/jeps\/346<\/a><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Maintenant que Java 12 est features complete (Rampdown Phase 2 au jour d&rsquo;\u00e9criture de l&rsquo;article), c&rsquo;est le moment de faire le tour des fonctionnalit\u00e9s qu&rsquo;apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait parti d&rsquo;une suite d&rsquo;article sur les nouveaut\u00e9s des derni\u00e8res version de Java, pour ceux qui voudrait les lires en voici les liens : Java 11, Java 10,&nbsp;et&nbsp;Java 9. Et force est de constater qu&rsquo;\u00e0 part les switch expression, il n&rsquo;y a pas beaucoup de nouveaut\u00e9s&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-12-quoi-de-neuf\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[11,164,163],"class_list":["post-865","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-java","tag-java12","tag-whatsnew"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":947,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-13-quoi-de-neuf\/","url_meta":{"origin":865,"position":0},"title":"Java 13 : quoi de neuf ?","author":"admin","date":"mardi 13 ao\u00fbt 2019","format":false,"excerpt":"Maintenant que Java 13 est features complete (Release Candidate au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res version de Java, pour ceux qui voudraient\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1112,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-15-quoi-de-neuf\/","url_meta":{"origin":865,"position":1},"title":"Java 15 : quoi de neuf ?","author":"admin","date":"jeudi  2 juillet 2020","format":false,"excerpt":"Maintenant que Java 15 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1284,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-17-quoi-de-neuf\/","url_meta":{"origin":865,"position":2},"title":"Java 17 : quoi de neuf ?","author":"admin","date":"jeudi  5 ao\u00fbt 2021","format":false,"excerpt":"Maintenant que Java 17 est features complete (Rampdown Phase Two au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1684,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-21-quoi-de-neuf\/","url_meta":{"origin":865,"position":3},"title":"Java 21 : quoi de neuf ?","author":"admin","date":"mardi  8 ao\u00fbt 2023","format":false,"excerpt":"Maintenant que Java 21 est features complete (Rampdown Phase Two au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"Java Collection API hierarchy","src":"https:\/\/i0.wp.com\/cr.openjdk.org\/~smarks\/collections\/SequencedCollectionDiagram20220216.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/cr.openjdk.org\/~smarks\/collections\/SequencedCollectionDiagram20220216.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/cr.openjdk.org\/~smarks\/collections\/SequencedCollectionDiagram20220216.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/cr.openjdk.org\/~smarks\/collections\/SequencedCollectionDiagram20220216.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/cr.openjdk.org\/~smarks\/collections\/SequencedCollectionDiagram20220216.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/cr.openjdk.org\/~smarks\/collections\/SequencedCollectionDiagram20220216.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":722,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-10-quoi-de-neuf\/","url_meta":{"origin":865,"position":4},"title":"Java 10 : quoi de neuf ?","author":"admin","date":"lundi 26 mars 2018","format":false,"excerpt":"Maintenant que Java 10 est sorti, il est temps de se pencher sur les nouveaut\u00e9s de cette version. Comme pour mon pr\u00e9c\u00e9dent article sur java 9, je vais me pencher principalement sur les changements qui impacterons les d\u00e9veloppeurs utilisant Java en laissant de c\u00f4t\u00e9 les changements internes\/anecdotique\/sur des API peu\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1375,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-18-quoi-de-neuf\/","url_meta":{"origin":865,"position":5},"title":"Java 18 : quoi de neuf ?","author":"admin","date":"mardi  4 janvier 2022","format":false,"excerpt":"Maintenant que Java 18 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/865","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=865"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/865\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}