{"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\/sk\/blog\/news\/vypusk-java-se-20","title":{"rendered":"Vydanie Java SE 20","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Po \u0161iestich mesiacoch v\u00fdvoja spolo\u010dnos\u0165 Oracle vydala platformu Java SE 20 (Java Platform, Standard Edition 20), pri\u010dom ako referen\u010dn\u00e1 implement\u00e1cia sa pou\u017e\u00edva otvoren\u00fd projekt OpenJDK. S v\u00fdnimkou odstr\u00e1nenia niektor\u00fdch zastaran\u00fdch funkci\u00ed si Java SE 20 zachov\u00e1va sp\u00e4tn\u00fa kompatibilitu s predch\u00e1dzaj\u00facimi vydaniami platformy Java \u2014 v\u00e4\u010d\u0161ina predt\u00fdm naprogramovan\u00fdch Java projektov bude bez zmien funk\u010dn\u00e1 pri spusten\u00ed pod spr\u00e1vou novej verzie. Pripraven\u00e9 na in\u0161tal\u00e1ciu zostavy Java SE 20 (JDK, JRE a Server JRE) s\u00fa k dispoz\u00edcii pre Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Referen\u010dn\u00e1 implement\u00e1cia Java 20 vyvinut\u00e1 v r\u00e1mci projektu OpenJDK je plne otvoren\u00e1 pod licenciou GPLv2 s v\u00fdnimkami GNU ClassPath, ktor\u00e9 umo\u017e\u0148uj\u00fa dynamick\u00e9 prepojenie s komer\u010dn\u00fdmi produktmi.     <\/p>\n<p>Java SE 20 patr\u00ed do kateg\u00f3rie vydan\u00ed s be\u017enou dobou podpory, pri\u010dom aktualiz\u00e1cie bud\u00fa vyd\u00e1van\u00e9 do \u010fal\u0161ieho vydania. Ako vetva s dlhodobou podporou (LTS) by sa mala pou\u017e\u00edva\u0165 Java SE 17, pre ktor\u00fa bud\u00fa aktualiz\u00e1cie vyd\u00e1van\u00e9 do roku 2029. Pripom\u00edname, \u017ee od vydania Java 10 projekt pre\u0161iel na nov\u00fd proces v\u00fdvoja, ktor\u00fd predpoklad\u00e1 krat\u0161\u00ed cyklus vyd\u00e1vania nov\u00fdch verzi\u00ed. Nov\u00e9 funkcie sa teraz vyv\u00edjaj\u00fa v jednej neust\u00e1le aktualizovanej master vetve, do ktorej sa prid\u00e1vaj\u00fa u\u017e hotov\u00e9 zmeny a od ktorej sa ka\u017ed\u00fdch \u0161es\u0165 mesiacov odde\u013euj\u00fa vetvy na stabiliz\u00e1ciu nov\u00fdch vydan\u00ed.     <\/p>\n<p>Medzi novinky Java 20 patr\u00ed:  <\/p>\n<ul>\n<li class=\"l\"> Bola navrhnut\u00e1 predbe\u017en\u00e1 podpora obmedzen\u00fdch hodn\u00f4t (Scoped Values), ktor\u00e9 umo\u017e\u0148uj\u00fa zdie\u013eanie nemenn\u00fdch \u00fadajov v vl\u00e1knach a efekt\u00edvnu v\u00fdmenu \u00fadajov medzi podriaden\u00fdmi vl\u00e1knami (hodnoty sa zdedia). Scoped Values sa vyv\u00edjaj\u00fa ako n\u00e1hrada za mechanizmus lok\u00e1lnych premenn\u00fdch vl\u00e1kna (thread-local variables) a s\u00fa \u00fa\u010dinnej\u0161ie pri pou\u017eit\u00ed ve\u013emi ve\u013ek\u00e9ho po\u010dtu virtu\u00e1lnych vl\u00e1kien (tis\u00edce a mili\u00f3ny vl\u00e1kien). Hlavn\u00fd rozdiel medzi Scoped Values a lok\u00e1lnymi premenn\u00fdmi vl\u00e1kna je ten, \u017ee prv\u00e9 sa zapisuj\u00fa iba raz, nesk\u00f4r sa nem\u00f4\u017eu meni\u0165 a zost\u00e1vaj\u00fa dostupn\u00e9 iba po\u010das behu vl\u00e1kna. 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\"> Pridan\u00e1 druh\u00e1 predbe\u017en\u00e1 realiz\u00e1cia vzorov z\u00e1znamov (record pattern), ktor\u00e1 roz\u0161iruje mo\u017enos\u0165 vzorov\u00e9ho porovn\u00e1vania, ktor\u00e1 sa objavila v Jave 16, pomocou prostriedkov na anal\u00fdzu hodn\u00f4t tried typu record. Napr\u00edklad:       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\"> Pridan\u00e1 \u0161tvrt\u00e1 predbe\u017en\u00e1 implement\u00e1cia zhodnotenia pomocou vzoru vo v\u00fdrazoch &#171;switch&#187;, ktor\u00e1 umo\u017e\u0148uje v etiket\u00e1ch &#171;case&#187; pou\u017e\u00edva\u0165 nie presn\u00e9 hodnoty, ale flexibiln\u00e9 vzory, ktor\u00e9 pokr\u00fdvaj\u00fa s\u00e9riu hodn\u00f4t, pre ktor\u00e9 by predt\u00fdm bolo potrebn\u00e9 pou\u017ei\u0165 objemn\u00e9 re\u0165azce v\u00fdrazov &#171;if&#8230;else&#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\"> Pridan\u00e1 druh\u00e1 predbe\u017en\u00e1 implement\u00e1cia API FFM (Foreign Function &#038; Memory), ktor\u00e1 umo\u017e\u0148uje organizova\u0165 interakciu Java programov s extern\u00fdm k\u00f3dom a \u00fadajmi prostredn\u00edctvom volania funkci\u00ed z extern\u00fdch kni\u017en\u00edc a pr\u00edstupu k pam\u00e4ti mimo JVM.\n<li class=\"l\"> Pridala sa druh\u00e1 predbe\u017en\u00e1 implement\u00e1cia virtu\u00e1lnych tokov, ktor\u00e9 s\u00fa \u013eahk\u00e9 a v\u00fdrazne zjednodu\u0161uj\u00fa p\u00edsanie a \u00fadr\u017ebu vysoko v\u00fdkonn\u00fdch viacvl\u00e1knov\u00fdch aplik\u00e1ci\u00ed.\n<li class=\"l\"> Pridan\u00e1 druh\u00e1 verzia experiment\u00e1lneho API pre \u0161trukt\u00farovan\u00fa paraleliz\u00e1ciu, ktor\u00e1 zjednodu\u0161uje v\u00fdvoj viacvl\u00e1knov\u00fdch aplik\u00e1ci\u00ed spracovan\u00edm viacer\u00fdch \u00faloh vykon\u00e1van\u00fdch v r\u00f4znych flow ako jedn\u00e9ho bloku.\n<li class=\"l\"> Pridan\u00e1 piata predbe\u017en\u00e1 implement\u00e1cia API Vector, ktor\u00e1 poskytuje funkcie pre vektorov\u00e9 v\u00fdpo\u010dty, ktor\u00e9 sa vykon\u00e1vaj\u00fa pomocou vektorov\u00fdch in\u0161trukci\u00ed procesorov x86_64 a AArch64 a umo\u017e\u0148uj\u00fa s\u00fa\u010dasne aplikova\u0165 oper\u00e1cie na nieko\u013eko hodn\u00f4t (SIMD). Na rozdiel od mo\u017enost\u00ed automatickej vektoriz\u00e1cie skalarov\u00fdch oper\u00e1ci\u00ed poskytnut\u00fdch JIT kompil\u00e1torom HotSpot, nov\u00e9 API umo\u017e\u0148uje explicitne riadi\u0165 vektorovanie pre paraleln\u00e9 spracovanie \u00fadajov.   <\/ul>\n<p>Zdroj: <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.4 - 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\/sk\/blog\/news\/vypusk-java-se-20\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\/sk\/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\udd47Vydanie Java SE 20 | ProHoster","description":"Po \u0161iestich mesiacoch v\u00fdvoja spolo\u010dnos\u0165 Oracle vydala platformu Java SE 20 (Java Platform, Standard Edition 20), pri\u010dom ako referen\u010dn\u00e1 implement\u00e1cia sa pou\u017e\u00edva otvoren\u00fd projekt OpenJDK.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/news\/vypusk-java-se-20","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/107370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=107370"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/107370\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=107370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=107370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=107370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}