{"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\/pl\/blog\/news\/vypusk-java-se-20","title":{"rendered":"Wydanie Java SE 20","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Po sze\u015bciu miesi\u0105cach prac rozwojowych firma Oracle wyda\u0142a platform\u0119 Java SE 20 (Java Platform, Standard Edition 20), kt\u00f3rej etalonow\u0105 implementacj\u0105 jest otwarty projekt OpenJDK. Z wyj\u0105tkiem usuni\u0119cia niekt\u00f3rych przestarza\u0142ych funkcji, Java SE 20 zachowuje kompatybilno\u015b\u0107 wsteczn\u0105 z wcze\u015bniejszymi wersjami platformy Java \u2014 wi\u0119kszo\u015b\u0107 wcze\u015bniej napisanych projekt\u00f3w Java b\u0119dzie dzia\u0142a\u0107 bez zmian w nowej wersji. Gotowe do zainstalowania pakiety Java SE 20 (JDK, JRE i Server JRE) s\u0105 dost\u0119pne dla system\u00f3w Linux (x86_64, AArch64), Windows (x86_64) i macOS (x86_64, AArch64). Etanolowa implementacja Java 20, opracowana w ramach projektu OpenJDK, jest ca\u0142kowicie otwarta na licencji GPLv2 z wyj\u0105tkami GNU ClassPath, kt\u00f3re umo\u017cliwiaj\u0105 dynamiczne powi\u0105zanie z produktami komercyjnymi.     <\/p>\n<p>Java SE 20 zaliczana jest do wydania z normalnym okresem wsparcia, dla kt\u00f3rego aktualizacje b\u0119d\u0105 wydawane do nast\u0119pnej wersji. Do tego celu nale\u017cy stosowa\u0107 wersj\u0119 Java SE 17, kt\u00f3ra jest wersj\u0105 z d\u0142ugoterminowym wsparciem (LTS) i aktualizacje dla niej b\u0119d\u0105 wydawane do 2029 roku. Przypomnijmy, \u017ce od wersji Java 10 projekt przeszed\u0142 na nowy proces rozwoju, kt\u00f3ry przewiduje kr\u00f3tszy cykl wprowadzania nowych wyda\u0144. Nowe funkcjonalno\u015bci s\u0105 teraz opracowywane w jednej stale aktualizowanej ga\u0142\u0119zi master, do kt\u00f3rej w\u0142\u0105czane s\u0105 gotowe zmiany, a co sze\u015b\u0107 miesi\u0119cy odga\u0142\u0119ziaj\u0105 si\u0119 nowe ga\u0142\u0119zie dla stabilizacji nowych wyda\u0144.     <\/p>\n<p>W\u015br\u00f3d nowo\u015bci Java 20 mo\u017cna wyr\u00f3\u017cni\u0107:  <\/p>\n<ul>\n<li class=\"l\"> Zaproponowano wst\u0119pne wsparcie dla ograniczonych warto\u015bci (Scoped Values), kt\u00f3re umo\u017cliwiaj\u0105 wsp\u00f3\u0142dzielenie niemutowalnych danych w w\u0105tkach oraz efektywn\u0105 wymian\u0119 danych pomi\u0119dzy w\u0105tkami podrz\u0119dnymi (warto\u015bci s\u0105 dziedziczone). Scoped Values s\u0105 rozwijane w celu zast\u0105pienia mechanizmu zmiennych lokalnych dla w\u0105tk\u00f3w (thread-local variables) i s\u0105 bardziej efektywne przy u\u017cyciu bardzo du\u017cej liczby wirtualnych w\u0105tk\u00f3w (tysi\u0105ce i miliony w\u0105tk\u00f3w). G\u0142\u00f3wna r\u00f3\u017cnica mi\u0119dzy Scoped Values a zmiennymi lokalnymi dla w\u0105tk\u00f3w polega na tym, \u017ce te pierwsze s\u0105 zapisywane tylko raz, nie mog\u0105 by\u0107 zmieniane w dalszym etapie i pozostaj\u0105 dost\u0119pne tylko w czasie wykonywania w\u0105tku. 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(&#8230;); } }\n<li class=\"l\"> Dodano drug\u0105 wst\u0119pn\u0105 realizacj\u0119 wzorc\u00f3w rekord\u00f3w (record pattern), rozszerzaj\u0105c\u0105 mo\u017cliwo\u015bci\u0105 dopasowywania z u\u017cyciem mechanizm\u00f3w rozk\u0142adu warto\u015bci klas typu record, kt\u00f3ra pojawi\u0142a si\u0119 w Javie 16. Na przyk\u0142ad: 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\"> Dodano czwarte wst\u0119pne wdro\u017cenie pasowania wed\u0142ug wzorca w wyra\u017ceniach &#171;switch&#187;, kt\u00f3re pozwala na u\u017cycie w etykietach &#171;case&#187; nieprecyzyjnych warto\u015bci, ale elastycznych wzorc\u00f3w obejmuj\u0105cych jednocze\u015bnie szereg warto\u015bci, dla kt\u00f3rych wcze\u015bniej trzeba by\u0142o stosowa\u0107 niepor\u0119czne \u0142a\u0144cuchy wyra\u017ce\u0144 &#171;if\u2026else&#187;.       static String formatterPatternSwitch(Object obj) {         return switch (obj) {             case Integer i -&gt; String.format(&#171;int %d&#187;, i);             case Long l    -&gt; String.format(&#171;long %d&#187;, l);             case Double d  -&gt; String.format(&#171;double %f&#187;, d);             case String s  -&gt; String.format(&#171;String %s&#187;, s);             default        -&gt; o.toString();         };     }\n<li class=\"l\"> Dodano drugie wst\u0119pne wdro\u017cenie API FFM (Foreign Function &#038; Memory), kt\u00f3re umo\u017cliwia organizacj\u0119 interakcji program\u00f3w Java z zewn\u0119trznym kodem i danymi poprzez wywo\u0142ywanie funkcji z zewn\u0119trznych bibliotek oraz dost\u0119p do pami\u0119ci poza JVM.\n<li class=\"l\"> Dodano drug\u0105 wersj\u0119 wst\u0119pnej realizacji wirtualnych w\u0105tk\u00f3w, kt\u00f3re s\u0105 lekkimi w\u0105tkami, znacznie u\u0142atwiaj\u0105cymi pisanie i utrzymanie wysoko wydajnych aplikacji wielow\u0105tkowych.\n<li class=\"l\"> Dodano drug\u0105 wersj\u0119 eksperymentalnego API dla strukturalnego wsp\u00f3\u0142bie\u017cno\u015bci, kt\u00f3re u\u0142atwia rozw\u00f3j aplikacji wielow\u0105tkowych poprzez przetwarzanie wielu zada\u0144 wykonywanych w r\u00f3\u017cnych w\u0105tkach jako jednego bloku.\n<li class=\"l\"> Dodano pi\u0105t\u0105 wersj\u0119 wst\u0119pnej realizacji API Vector, oferuj\u0105cego funkcje do oblicze\u0144 wektorowych, kt\u00f3re s\u0105 wykonywane z u\u017cyciem instrukcji wektorowych procesor\u00f3w x86_64 i AArch64, pozwalaj\u0105c na jednoczesne stosowanie operacji na wielu warto\u015bciach (SIMD). W przeciwie\u0144stwie do mo\u017cliwo\u015bci automatycznej wektoryzacji operacji skalarnych oferowanych przez kompilator JIT HotSpot, nowe API umo\u017cliwia wyra\u017ane zarz\u0105dzanie wektoryzacj\u0105 dla r\u00f3wnoleg\u0142ego przetwarzania danych.   <\/ul>\n<p>\u0179r\u00f3d\u0142o: <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.1.1 - 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\/pl\/blog\/news\/vypusk-java-se-20\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\/pl\/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\udd47 Wydanie Java SE 20 | ProHoster","description":"Po sze\u015bciu miesi\u0105cach prac rozwojowych, firma Oracle wyda\u0142a platform\u0119 Java SE 20 (Java Platform, Standard Edition 20), kt\u00f3rej etalonow\u0105 realizacj\u0105 jest otwarty projekt OpenJDK.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/news\/vypusk-java-se-20","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/107370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=107370"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/107370\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=107370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=107370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=107370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}