{"id":107370,"date":"2023-03-22T00:48:09","date_gmt":"2023-03-21T22:48:09","guid":{"rendered":"https:\/\/prohoster.info\/?p=107370"},"modified":"2023-03-22T11:10:35","modified_gmt":"2023-03-22T09:10:35","slug":"vypusk-java-se-20","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/news\/vypusk-java-se-20","title":{"rendered":"Sortie de Java SE 20","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Apr\u00e8s six mois de d\u00e9veloppement, Oracle a lanc\u00e9 la plateforme Java SE 20 (Java Platform, Standard Edition 20), dont l'impl\u00e9mentation de r\u00e9f\u00e9rence repose sur le projet OpenJDK. \u00c0 l'exception de la suppression de certaines fonctionnalit\u00e9s obsol\u00e8tes, Java SE 20 conserve la compatibilit\u00e9 avec les versions pr\u00e9c\u00e9dentes de la plateforme Java \u2014 la plupart des projets Java pr\u00e9alablement \u00e9crits fonctionneront sans modifications sur la nouvelle version. Des distributions pr\u00eates \u00e0 installer de Java SE 20 (JDK, JRE et Server JRE) ont \u00e9t\u00e9 pr\u00e9par\u00e9es pour Linux (x86_64, AArch64), Windows (x86_64) et macOS (x86_64, AArch64). L'impl\u00e9mentation de r\u00e9f\u00e9rence de Java 20, d\u00e9velopp\u00e9e dans le cadre du projet OpenJDK, est enti\u00e8rement ouverte sous la licence GPLv2 avec des exceptions GNU ClassPath permettant la liaison dynamique avec des produits commerciaux.     <\/p>\n<p>Java SE 20 est class\u00e9 comme une version avec un cycle de support normal, avec des mises \u00e0 jour qui seront publi\u00e9es jusqu'\u00e0 la prochaine version. Pour une version avec un cycle de support prolong\u00e9 (LTS), il est recommand\u00e9 d'utiliser Java SE 17, avec des mises \u00e0 jour publi\u00e9es jusqu'en 2029. Rappelons qu'\u00e0 partir de la version Java 10, le projet a adopt\u00e9 un nouveau processus de d\u00e9veloppement, avec des cycles de sorties plus courts. Les nouvelles fonctionnalit\u00e9s sont d\u00e9sormais d\u00e9velopp\u00e9es dans une branche master constamment mise \u00e0 jour, int\u00e9grant les changements d\u00e9j\u00e0 pr\u00eats, puis des branches sont cr\u00e9\u00e9es tous les six mois pour stabiliser les nouvelles versions.     <\/p>\n<p>Parmi les nouveaut\u00e9s de Java 20, on peut noter :  <\/p>\n<ul>\n<li class=\"l\"> Un soutien pr\u00e9liminaire pour des valeurs limit\u00e9es (Scoped Values) a \u00e9t\u00e9 propos\u00e9, permettant de partager des donn\u00e9es immuables entre les threads et d'\u00e9changer efficacement des donn\u00e9es entre les threads enfants (les valeurs sont h\u00e9rit\u00e9es). Les Scoped Values sont en cours de d\u00e9veloppement pour remplacer le m\u00e9canisme des variables locales au fil d'ex\u00e9cution (thread-local variables) et sont plus efficaces lors de l'utilisation d'un tr\u00e8s grand nombre de threads virtuels (des milliers et des millions de threads). La principale diff\u00e9rence entre les Scoped Values et les variables locales au fil d'ex\u00e9cution est que les premi\u00e8res sont \u00e9crites une fois, ne peuvent pas \u00eatre modifi\u00e9es par la suite et ne restent accessibles que pendant l'ex\u00e9cution du fil. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request.isAuthorized() ? ADMIN : GUEST); var user = new User(level); ScopedValue.where(CURRENT_USER, user) .run(() -&gt; Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) throw new InvalidUserException(); return new DBConnection(...); } }\n<li class=\"l\"> Une seconde mise en \u0153uvre pr\u00e9liminaire des mod\u00e8les d'enregistrement (record pattern) a \u00e9t\u00e9 ajout\u00e9e, \u00e9largissant la fonctionnalit\u00e9 de correspondance d\u00e9j\u00e0 introduite dans Java 16 pour l'analyse des valeurs des classes de type record. Par exemple : record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = p.x(); int y = p.y(); System.out.println(x+y); } }\n<li class=\"l\"> Une quatri\u00e8me mise en \u0153uvre pr\u00e9liminaire du mapping par mod\u00e8le a \u00e9t\u00e9 ajout\u00e9e dans les expressions \u00ab switch \u00bb, permettant d'utiliser dans les \u00e9tiquettes \u00ab case \u00bb des valeurs non pr\u00e9cises, mais des mod\u00e8les flexibles, couvrant toute une s\u00e9rie de valeurs pour lesquelles il fallait auparavant utiliser de lourdes cha\u00eenes d'expressions \u00ab if\u2026else \u00bb.         static String formatterPatternSwitch(Object obj) {         return switch (obj) {             case Integer i -&gt; String.format(\"int %d\", i);             case Long l    -&gt; String.format(\"long %d\", l);             case Double d  -&gt; String.format(\"double %f\", d);             case String s  -&gt; String.format(\"String %s\", s);             default        -&gt; o.toString();         };     }\n<li class=\"l\"> Une deuxi\u00e8me mise en \u0153uvre pr\u00e9liminaire de l'API FFM (Foreign Function &amp; Memory) a \u00e9t\u00e9 ajout\u00e9e, permettant d'organiser l'interaction des programmes Java avec du code et des donn\u00e9es externes via l'appel de fonctions depuis des biblioth\u00e8ques externes et l'acc\u00e8s \u00e0 la m\u00e9moire en dehors de la JVM.\n<li class=\"l\"> Une seconde pr\u00e9version des flux virtuels a \u00e9t\u00e9 ajout\u00e9e, repr\u00e9sentant des flux l\u00e9gers qui simplifient consid\u00e9rablement l'\u00e9criture et la maintenance d'applications multithreads \u00e0 haute performance.\n<li class=\"l\"> Un deuxi\u00e8me variant d'API exp\u00e9rimentale pour le parall\u00e9lisme structur\u00e9, simplifiant le d\u00e9veloppement d'applications multithreads en traitant plusieurs t\u00e2ches ex\u00e9cut\u00e9es dans diff\u00e9rents threads comme un seul bloc, a \u00e9t\u00e9 ajout\u00e9.\n<li class=\"l\"> Une cinqui\u00e8me pr\u00e9version de l'API Vector a \u00e9t\u00e9 ajout\u00e9e, fournissant des fonctionnalit\u00e9s pour le calcul vectoriel utilisant des instructions vectorielles des processeurs x86_64 et AArch64, permettant d'appliquer simultan\u00e9ment des op\u00e9rations \u00e0 plusieurs valeurs (SIMD). Contrairement aux capacit\u00e9s d'auto-vectorisation des op\u00e9rations scalaires fournies par le compilateur JIT HotSpot, la nouvelle API permet de g\u00e9rer explicitement la vectorisation pour le traitement parall\u00e8le des donn\u00e9es.   <\/ul>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/opennews\/art.shtml?num=58837\">opennet.ru<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e\u0441\u043b\u0435 \u0448\u0435\u0441\u0442\u0438 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Oracle \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Java SE 20 (Java Platform, Standard Edition 20), \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 OpenJDK. \u0417\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0432 Java SE 20 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u043f\u0440\u043e\u0448\u043b\u044b\u043c\u0438 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Java &#8212; \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0430\u043d\u0435\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 Java-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u043e\u0434 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-107370","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e\u0441\u043b\u0435 \u0448\u0435\u0441\u0442\u0438 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Oracle \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Java SE 20 (Java Platform, Standard Edition 20), \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 OpenJDK.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/news\/vypusk-java-se-20\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0412\u044b\u043f\u0443\u0441\u043a Java SE 20 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e\u0441\u043b\u0435 \u0448\u0435\u0441\u0442\u0438 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Oracle \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Java SE 20 (Java Platform, Standard Edition 20), \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 OpenJDK.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/news\/vypusk-java-se-20\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2023-03-21T22:48:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2023-03-22T09:10:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Lancement de Java SE 20 | ProHoster","description":"Apr\u00e8s six mois de d\u00e9veloppement, Oracle a lanc\u00e9 la plateforme Java SE 20 (Java Platform, Standard Edition 20), dont le projet OpenJDK est utilis\u00e9 comme r\u00e9f\u00e9rence.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/news\/vypusk-java-se-20","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0412\u044b\u043f\u0443\u0441\u043a Java SE 20 | ProHoster","og:description":"\u041f\u043e\u0441\u043b\u0435 \u0448\u0435\u0441\u0442\u0438 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Oracle \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Java SE 20 (Java Platform, Standard Edition 20), \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 OpenJDK.","og:url":"https:\/\/prohoster.info\/fr\/blog\/news\/vypusk-java-se-20","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2023-03-21T22:48:09+00:00","article:modified_time":"2023-03-22T09:10:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":[],"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/107370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=107370"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/107370\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=107370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=107370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=107370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}