{"id":16769,"date":"2023-09-19T16:37:32","date_gmt":"2023-09-19T14:37:32","guid":{"rendered":"https:\/\/vived.io\/?p=16769"},"modified":"2023-09-19T16:39:07","modified_gmt":"2023-09-19T14:39:07","slug":"jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/","title":{"rendered":"Jednozdaniowe opracowanie ka\u017cdego nowego JEPa z JDK 21 &#8211; JVM Weekly vol. 149"},"content":{"rendered":"\n<p>Dzisiaj temat m\u00f3g\u0142 by\u0107 tylko jeden. Premiera JDK 21.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"262\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/giphy-1.gif\" alt=\"\" class=\"wp-image-16772\"\/><\/figure><\/div>\n\n\n<p>Oficjalny blog post <a href=\"https:\/\/inside.java\/2023\/09\/19\/the-arrival-of-java-21\/\">znajdziecie tutaj<\/a>, a oficjalny stream z zapowiedzi <a href=\"https:\/\/www.youtube.com\/watch?v=E8NV68ihJyY\">tutaj<\/a>, ale ja mam dla Was odrobink\u0119 wi\u0119cej.<\/p>\n\n\n\n<p>Z uwagi na liczb\u0119 nowych funkcji, nie mog\u0119 zag\u0142\u0119bia\u0107 si\u0119 w ka\u017cd\u0105 z nich. Postanowi\u0142em wi\u0119c przeprowadzi\u0107 ma\u0142y eksperyment &#8211; zamierzam przedstawi\u0107 ka\u017cd\u0105 funkcj\u0119 w jednym zdaniu oraz poprzez fragment kodu (dla stabilnych funkcjonalno\u015bci). Stali czytelnicy ju\u017c tego typu opracowanie widzieli, ale \u017ceby nie by\u0142o \u017ce si\u0119 lenie &#8211; dodatkowo, do do prawie wszystkich stabilnych funkcjonalno\u015bci do\u0142o\u017cy\u0142em zestaw materia\u0142\u00f3w dodatkowych, kt\u00f3re pozwalaj\u0105 lepiej zrozumie\u0107 poszczeg\u00f3lne &#8222;featury&#8221;.<\/p>\n\n\n\n<p>Dlatego bez zb\u0119dnego przed\u0142u\u017cania, zaczynamy, bo i tak du\u017co przed nami:<\/p>\n\n\n\n<h2 id=\"stabilne\" data-num=1>Stabilne<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/431\">431: Sequenced Collections<\/a><\/h3>\n\n\n\n<p>W wypadku uporz\u0105dkowanych kolekcji, wprowadzono sp\u00f3jny interfejs do pobierania pierwszego i ostatniego elementu, a tak\u017ce odwracania sekwencji.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface SequencedCollection&lt;E&gt; extends Collection&lt;E&gt; {\n    \/\/ new method\n    SequencedCollection&lt;E&gt; reversed();\n    \/\/ methods promoted from Deque\n    void addFirst(E);\n    void addLast(E);\n    E getFirst();\n    E getLast();\n    E removeFirst();\n    E removeLast();\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=9G_0el3RWPE\">Java 21&#8217;s New (Sequenced) Collections<\/a> &#8211; Prezentacja wideo z Inside Java Newscast, prezentuj\u0105ca oryginalny JEP. Posiada te\u017c <a href=\"https:\/\/nipafx.dev\/inside-java-newscast-45\/\">tekstowy suplement<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/439\">439: Generational ZGC<\/a><\/h3>\n\n\n\n<p>Jako, \u017ce prawdopodobie\u0144stwo konieczno\u015bci &#8222;sprz\u0105tania&#8221; przez GC zmniejsza si\u0119 wraz z czasem \u017cycia danego obiektu, posiadanie innego pipeline dla kr\u00f3tko i d\u0142ugo \u017cyj\u0105cych obiekt\u00f3w jest standardem w GC, a teraz trafia te\u017c do ZGC.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/17\/gctuning\/garbage-collector-implementation.html#GUID-71D796B3-CBAB-4D80-B5C3-2620E45F6E5D\">Garbage Collector Implementation &#8211; Generational Garbage Collection<\/a> &#8211; Tekst Oracle opisuj\u0105cy hipotez\u0119 generacyjn\u0105 w kontek\u015bcie HotSpot VM.<\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/377\">JEP 377: ZGC: A Scalable Low-Latency Garbage Collector<\/a> &#8211; oryginalny JEP wprowadzaj\u0105cy samo ZGC.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.baeldung.com\/jvm-zgc-garbage-collector\">An Introduction to ZGC: A Scalable and Experimental Low-Latency Garbage Collector<\/a> &#8211; Przyst\u0119pne wprowadzenie do samego ZGC. Wprawdzie ZGC ju\u017c nie jest tak bardzo &#8222;experimental&#8221;, ale sam tekst jest regularnie aktualizowany (ostatni raz w poniedzia\u0142ek 18 pa\u017adziernika).<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=bLJJ3CY1aE8&amp;t=1069s\">An Introduction to ZGC: A Scalable and Experimental Low<\/a> &#8211; Prezentacja z JavaOne na temat ZGC.<\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2022\/06\/29\/podcast-024\/\">Inside Java Podcast &#8211; Episode 24 \u201cTowards Generational ZGC!\u201d<\/a> &#8211; Oficjalny Podcast Javy, opisuj\u0105ce &#8222;kuchnie&#8221; pracy nad Generacyjnym ZGC.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/440\">440: Record Patterns<\/a><\/h3>\n\n\n\n<p>Mo\u017cliwo\u015b\u0107 \u0142atwej dekonstrukcja Rekord\u00f3w, umo\u017cliwiaj\u0105ca wyci\u0105gni\u0119cie z nich konkretnych p\u00f3l, a tak\u017ce u\u017cywanie w pattern matchingu (kolejny JEP).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (obj instanceof Point(int x, int y)) {\n    System.out.println(x+y);\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/gavinray97.github.io\/blog\/what-good-are-record-patterns?utm_source=vived.substack.com\">What good are Record Patterns in Java? An example based on Spark&#8217;s Catalyst Optimizer and it&#8217;s Tree Rewriting Rules<\/a> &#8211; artyku\u0142 z nietrywialnymi przyk\u0142adami.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/articles\/data-oriented-programming-java\/?utm_source=vived.substack.com\">Data Oriented Programming in Java<\/a> &#8211; tekst prezentuj\u0105cy za\u0142o\u017cenia stoj\u0105ce za rekordami, pattern matchingiem i innymi nowymi elementami sk\u0142adni j\u0119zyka w Javie. IMHO lektura obowi\u0105zkowa do lepszego zrozumienia jego ewolucji \ud83d\udea8. Aplikuje si\u0119 te\u017c do poni\u017cszego\ud83d\udc47<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/441\">441: Pattern Matching for switch<\/a><\/h3>\n\n\n\n<p>Mo\u017cliwo\u015b\u0107 u\u017cycia switch do pattern matchingu, z uwzgl\u0119dnieniem zaawansowanych opcji.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>static String formatterPatternSwitch(Object obj) {\n    return switch (obj) {\n        case Integer i -&gt; String.format(&quot;int %d&quot;, i);\n        case Long l    -&gt; String.format(&quot;long %d&quot;, l);\n        case Double d  -&gt; String.format(&quot;double %f&quot;, d);\n        case String s  -&gt; String.format(&quot;String %s&quot;, s);\n        default        -&gt; obj.toString();\n    };\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.infoq.com\/articles\/data-oriented-programming-java\/\">Data Oriented Programming in Java<\/a> &#8211; tak jak do JEP 440, tak i tutaj bardzo zach\u0119cam do zapoznania si\u0119.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/444\">444: Virtual Threads<\/a><\/h3>\n\n\n\n<p>Wprowadzenie do JVM konceptu w\u0105tk\u00f3w zarz\u0105dzanych nie przez system operacyjny, a przez sam\u0105 maszyn\u0119 wirtualn\u0105.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Thread.builder().virtual().factory();<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/spring.io\/blog\/2023\/09\/09\/all-together-now-spring-boot-3-2-graalvm-native-images-java-21-and-virtual\">All together now: Spring Boot 3.2, GraalVM native images, Java 21, and virtual threads with Project Loom<\/a> &#8211; Tekst prezentuj\u0105cy stanowisko Springa, je\u015bli chodzi o implementacje Projekt Loom.<\/li>\n\n\n\n<li><a href=\"https:\/\/helidon.io\/nima\">Helidon N\u00edma<\/a> &#8211; Pierwszy Javowy Framework napisany od podstaw pod k\u0105tem wsparcia Wirtualnych W\u0105tk\u00f3w &#8211; pojawi si\u0119 jako cz\u0119\u015b\u0107 Helidon 4.0.0<\/li>\n\n\n\n<li><a href=\"https:\/\/quarkus.io\/guides\/virtual-threads\">Virtual Thread Support Reference in Quarkus<\/a> &#8211; opis wsparcia Wirtualnych W\u0105tk\u00f3w trzeci z du\u017cych javowych framework\u00f3w.<\/li>\n\n\n\n<li><a href=\"https:\/\/blog.softwaremill.com\/what-is-blocking-in-loom-5d4e6a36c24e\">What is blocking in Loom?<\/a> &#8211; Tekst opisuj\u0105cy z detalami problem &#8222;pinningu&#8221; thread\u00f3w.<\/li>\n\n\n\n<li><a href=\"https:\/\/softwaremill.com\/implementing-raft-using-project-loom\/#zio-vs-loom-the-verdict\">Implementing Raft using Project Loom<\/a> &#8211; Jak w tytule, przyk\u0142ad u\u017cycia wirtualnych w\u0105tk\u00f3w do implementacji Rafta.<\/li>\n\n\n\n<li><a href=\"https:\/\/blog.rockthejvm.com\/ultimate-guide-to-java-virtual-threads\/\">The Ultimate Guide to Java Virtual Threads<\/a> &#8211; \u015bwietny kurs Virtual Threads z <a href=\"https:\/\/blog.rockthejvm.com\/ultimate-guide-to-java-virtual-threads\/\">Rock the JVM Blog<\/a>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/449\">449: Deprecate the Windows 32-bit x86 Port for Removal<\/a><\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"216\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/d0854f71-2f51-40a0-9644-65f3b2e70fa7_text.gif\" alt=\"\" class=\"wp-image-16774\"\/><\/figure><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/451\">451: Prepare to Disallow the Dynamic Loading of Agents<\/a><\/h3>\n\n\n\n<p>W celu zwi\u0119kszenia bezpiecze\u0144stwa Javy, tw\u00f3rcy planuj\u0105 w przysz\u0142o\u015bci zabroni\u0107 \u0142adowania pewnych kategorii Agent\u00f3w Maszyny Wirtualnej bez podania specjalnej flagi.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.javaadvent.com\/2019\/12\/a-beginners-guide-to-java-agents.html\">A beginner&#8217;s guide to Java agents<\/a> &#8211; Szybkie wprowadzenie do tematu Agent\u00f3w Javowych z Java Advent Calendar (bardzo fajna coroczna inicjatywa, ciekawe co szykuj).<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=oflzFGONG08\">The definitive guide to Java agents by Rafael Winterhalter<\/a> &#8211; To samo, tylko mocno poszerzone i w formie wideo \ud83d\ude03<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/452\">452: Key Encapsulation Mechanism API<\/a><\/h3>\n\n\n\n<p>Wprowadzenie do Javy standardowego API pozwalaj\u0105cego na u\u017cycie techniki znanej jako KEM, wykorzystywanej min. w algorytmach kryptografii kwantowej.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"259\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-8-1024x259.png\" alt=\"\" class=\"wp-image-16778\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-8-1024x259.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-8-300x76.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-8-768x194.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-8.png 1410w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/blog.cloudflare.com\/post-quantum-key-encapsulation\/\">Deep dive into a post-quantum key encapsulation algorithm<\/a> &#8211; artyku\u0142 od Cloudflare opisuj\u0105cy w przyst\u0119pny spos\u00f3b jak dzia\u0142a KEM.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"preview\" data-num=2>Preview<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/430\">430: String Templates (Preview)<\/a><\/h3>\n\n\n\n<p>Mo\u017cliwo\u015b\u0107 tworzenia w Javie blok\u00f3w tekstu, daj\u0105cych du\u017co wi\u0119ksze mo\u017cliwo\u015bci i bezpiecze\u0144stwo ni\u017c interpolacja string\u00f3w.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JSONObject doc = JSON_VALIDATE.&quot;&quot;&quot;\n    {\n        &quot;name&quot;:    \\{name},\n        &quot;phone&quot;:   \\{phone},\n        &quot;address&quot;: \\{address}\n    };\n    &quot;&quot;&quot;;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/445\">445: Unnamed Classes and Instance Main Methods (Preview)<\/a><\/h3>\n\n\n\n<p>Zmiana Launch Protocol w Javie, umo\u017cliwiaj\u0105ca pisania mocno uproszczonych klas Java, g\u0142\u00f3wnie na potrzeby edukacji.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void main() {\n    System.out.println(&quot;Hello, World!&quot;);\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/442\">442: Foreign Function &amp; Memory API (Third Preview)<\/a><\/h3>\n\n\n\n<p>Wprowadzenie typowanej interoperacyjno\u015bci z programami napisanymi w C (a w przysz\u0142o\u015bci te\u017c innych j\u0119zyk\u00f3w kompilowanych), a tak\u017ce natywnej pami\u0119ci systemu operacyjnego.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/443\">443: Unnamed Patterns and Variables (Preview)<\/a><\/h3>\n\n\n\n<p>Wprowadzenie do j\u0119zyka wildcard _, u\u017cywanego wtedy, gdy nie chcemy w pattern matchingu definiowa\u0107 konkretnej oczekiwanej warto\u015bci\/typu, a tak\u017ce jako hint dla linter\u00f3w, gdy wiemy \u017ce zadeklarowana zmienna jest niepotrzebna.<\/p>\n\n\n\n<p><code>if(r instanceof Point(_, int y))<\/code><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/453\">453: Structured Concurrency (Preview)<\/a><\/h3>\n\n\n\n<p>Zestaw struktur umo\u017cliwiaj\u0105cych zarz\u0105dzanie w\u0105tkami (nie tylko wirtualnymi), a zw\u0142aszcza potencjalnymi b\u0142\u0119dami.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {\n        Supplier&lt;String&gt;  user  = scope.fork(() -&gt; findUser());\n        Supplier&lt;Integer&gt; order = scope.fork(() -&gt;fetchOrder());\n\n        scope.join().throwIfFailed();\n\n        return new Response(user.get(), order.get());\n    }<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/446\">446: Scoped Values (Preview)<\/a><\/h3>\n\n\n\n<p>Alternatywa dla <code>ThreadLocala<\/code>, zaprojektowana g\u0142\u00f3wnie z my\u015bl\u0105 o wirtualnych w\u0105tkach.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>final static ScopedValue&lt;...&gt; V = ScopedValue.newInstance();\nScopedValue.where(V, &lt;value&gt;).run(() -&gt; {  V.get() });<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"inkubacja\" data-num=3>Inkubacja<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/448\">448: Vector API (Sixth Incubator)<\/a><\/h3>\n\n\n\n<p>Czekaj\u0105ce na Valhalle API umo\u017cliwiaj\u0105ce operacje wektorowe, udost\u0119pniane przez nowoczesne procesory.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"a-na-koniec-troche-ogolnych-linkow\" data-num=4>A na koniec, troch\u0119 og\u00f3lnych link\u00f3w<\/h2>\n\n\n\n<p>Wydanie nowej wersji JDK towarzyszy\u0142 stream, kt\u00f3ry pozwoli\u0142 na pocieszenie si\u0119 z ca\u0142\u0105 reszt\u0105 community premier\u0105:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"All About Java 21 - Launch Event\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/E8NV68ihJyY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p>Jedno z nich to \u015bwietne opracowanie ze strony kana\u0142u Inside Java, w kt\u00f3rym Nicolai Parlog w 20 minutowym filmiku w szerszym stopniu opisuje ka\u017cdy z JEP-\u00f3w:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"All That is in Java 21?! \ud83d\ude31 - Inside Java Newscast #50\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/qGaUZ1Z34jw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p>Dodatkowo, ostatnimi tygodniami ukaza\u0142a si\u0119 na oficjalnym kanale Java ca\u0142a <a href=\"https:\/\/www.youtube.com\/playlist?list=PLX8CzqL3ArzVHAHWowaXwYFlLk78D8RvL\">seria filmik\u00f3w #RoadTo21<\/a>, kt\u00f3re prezentuj\u0105 kolejne nowo\u015bci w nieco szerszym opracowaniu.<\/p>\n\n\n\n<p>Nicolai opublikowa\u0142 te\u017c tekst <a href=\"https:\/\/nipafx.dev\/talk-java-action\/\">Modern Java in Action<\/a>, kt\u00f3ry pozwala zapozna\u0107 si\u0119 z tym, jak te wszystkie nowe funkcjonalno\u015bci mo\u017cna u\u017cy\u0107 na przyk\u0142adzie realnej aplikacji.<\/p>\n\n\n\n<p>A je\u017celi potrzebujecie czego\u015b kr\u00f3tszego, &#8222;dla kolegi&#8221; kt\u00f3ry ma przestarza\u0142\u0105 opinie o Javie, to dla mnie okazja, aby przemyci\u0107 jeden z moich ulubionych kana\u0142\u00f3w programistycznych na YouTube. Je\u015bli cenicie sobie lekk\u0105, &#8222;memiczn\u0105&#8221; formu\u0142\u0119 opracowa\u0144, to Fireship zdecydowanie powinien przypa\u015b\u0107 Wam do gustu. Zawarto\u015b\u0107 tego kana\u0142u to przede wszystkim kr\u00f3tkie, poni\u017cej pi\u0119ciominutowe filmy.<\/p>\n\n\n\n<p>Autor skupia si\u0119 na najistotniejszych tematach ze \u015bwiata programowania. Dla mnie zawsze jest to fantastyczny spos\u00f3b na \u015bledzenie nowo\u015bci z obszar\u00f3w poza moj\u0105 g\u0142\u00f3wn\u0105 specjalizacj\u0105, jak na przyk\u0142ad nowe j\u0119zyki programowania czy innowacje typu bazy wektorowe.<\/p>\n\n\n\n<p>Podkre\u015blam to, poniewa\u017c niedawno na kanale Fireship ukaza\u0142o si\u0119 video po\u015bwi\u0119cone JDK 21. Zach\u0119cam do sprawdzenia, czy taki format odpowiada te\u017c&nbsp;Wam. Moim zdaniem, warto da\u0107 mu szans\u0119:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"Java is mounting a huge comeback\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/Ibjm2KHfymo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p>A za tydzie\u0144 porozmawiamy sobie o towarzysz\u0105cych JDK 21 premierach: <strong>JavaFX<\/strong> oraz <strong>GraalVM<\/strong>, kt\u00f3ry te\u017c mia\u0142 publiczny launch nowej wersji, zreszt\u0105 pewnie w ci\u0105gu najbli\u017cszego tygodnia doczekamy si\u0119 wysypu nowych mo\u017cliwo\u015bci j\u0119zyka. Zapis streamu znajdziecie poni\u017cej:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"GraalVM for JDK 21 Release Stream \ud83d\ude80\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/L2xtYwFRAPo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Dzisiaj mamy premier\u0119 d\u0142ugo oczekiwanej JDK 21. Dlatego te\u017c dzisiejsz\u0105 edycje skupimy sobie na niej.<\/p>\n","protected":false},"author":10,"featured_media":16781,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259,1],"tags":[],"class_list":["post-16769","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl","category-no-category"],"acf":{"estimated_reading_time":"7","feature_image_blog":{"ID":16782,"id":16782,"title":"JVM Weekly 1200x628_V2","filename":"JVM-Weekly-1200x628_V2-2.png","filesize":297315,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png","link":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/jvm-weekly-1200x628_v2-57-2\/","alt":"","author":"10","description":"","caption":"","name":"jvm-weekly-1200x628_v2-57-2","status":"inherit","uploaded_to":16769,"date":"2023-09-19 14:29:36","modified":"2023-09-19 14:39:08","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1200,"height":628,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2-300x157.png","medium-width":300,"medium-height":157,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2-768x402.png","medium_large-width":768,"medium_large-height":402,"large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2-1024x536.png","large-width":1024,"large-height":536,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png","1536x1536-width":1200,"1536x1536-height":628,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png","2048x2048-width":1200,"2048x2048-height":628,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":157,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png","gform-image-choice-md-width":400,"gform-image-choice-md-height":209,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":314}},"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Jednozdaniowe opracowanie ka\u017cdego nowego JEPa z JDK 21 - JVM Weekly vol. 149 - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Jednozdaniowe opracowanie ka\u017cdego nowego JEPa z JDK 21 - JVM Weekly vol. 149 - Vived\" \/>\n<meta property=\"og:description\" content=\"Dzisiaj mamy premier\u0119 d\u0142ugo oczekiwanej JDK 21. Dlatego te\u017c dzisiejsz\u0105 edycje skupimy sobie na niej.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-09-19T14:37:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-19T14:39:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Jednozdaniowe opracowanie ka\u017cdego nowego JEPa z JDK 21 &#8211; JVM Weekly vol. 149\",\"datePublished\":\"2023-09-19T14:37:32+00:00\",\"dateModified\":\"2023-09-19T14:39:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/\"},\"wordCount\":1270,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png\",\"articleSection\":[\"JVM\",\"No category\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/\",\"url\":\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/\",\"name\":\"Jednozdaniowe opracowanie ka\u017cdego nowego JEPa z JDK 21 - JVM Weekly vol. 149 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png\",\"datePublished\":\"2023-09-19T14:37:32+00:00\",\"dateModified\":\"2023-09-19T14:39:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Jednozdaniowe opracowanie ka\u017cdego nowego JEPa z JDK 21 &#8211; JVM Weekly vol. 149\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\",\"name\":\"Artur Skowro\u0144ski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"caption\":\"Artur Skowro\u0144ski\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Jednozdaniowe opracowanie ka\u017cdego nowego JEPa z JDK 21 - JVM Weekly vol. 149 - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/","og_locale":"pl_PL","og_type":"article","og_title":"Jednozdaniowe opracowanie ka\u017cdego nowego JEPa z JDK 21 - JVM Weekly vol. 149 - Vived","og_description":"Dzisiaj mamy premier\u0119 d\u0142ugo oczekiwanej JDK 21. Dlatego te\u017c dzisiejsz\u0105 edycje skupimy sobie na niej.","og_url":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/","og_site_name":"Vived","article_published_time":"2023-09-19T14:37:32+00:00","article_modified_time":"2023-09-19T14:39:07+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png","type":"image\/png"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Jednozdaniowe opracowanie ka\u017cdego nowego JEPa z JDK 21 &#8211; JVM Weekly vol. 149","datePublished":"2023-09-19T14:37:32+00:00","dateModified":"2023-09-19T14:39:07+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/"},"wordCount":1270,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png","articleSection":["JVM","No category"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/","url":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/","name":"Jednozdaniowe opracowanie ka\u017cdego nowego JEPa z JDK 21 - JVM Weekly vol. 149 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png","datePublished":"2023-09-19T14:37:32+00:00","dateModified":"2023-09-19T14:39:07+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/JVM-Weekly-1200x628_V2-2.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jednozdaniowe-opracowanie-kazdego-nowego-jepa-z-jdk-21-jvm-weekly-vol-149\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Jednozdaniowe opracowanie ka\u017cdego nowego JEPa z JDK 21 &#8211; JVM Weekly vol. 149"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dzisiaj temat m\u00f3g\u0142 by\u0107 tylko jeden. Premiera JDK 21.<\/p>\n","innerContent":["\n<p>Dzisiaj temat m\u00f3g\u0142 by\u0107 tylko jeden. Premiera JDK 21.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16772,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/giphy-1.gif\" alt=\"\" class=\"wp-image-16772\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/giphy-1.gif\" alt=\"\" class=\"wp-image-16772\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oficjalny blog post <a href=\"https:\/\/inside.java\/2023\/09\/19\/the-arrival-of-java-21\/\">znajdziecie tutaj<\/a>, a oficjalny stream z zapowiedzi <a href=\"https:\/\/www.youtube.com\/watch?v=E8NV68ihJyY\">tutaj<\/a>, ale ja mam dla Was odrobink\u0119 wi\u0119cej.<\/p>\n","innerContent":["\n<p>Oficjalny blog post <a href=\"https:\/\/inside.java\/2023\/09\/19\/the-arrival-of-java-21\/\">znajdziecie tutaj<\/a>, a oficjalny stream z zapowiedzi <a href=\"https:\/\/www.youtube.com\/watch?v=E8NV68ihJyY\">tutaj<\/a>, ale ja mam dla Was odrobink\u0119 wi\u0119cej.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z uwagi na liczb\u0119 nowych funkcji, nie mog\u0119 zag\u0142\u0119bia\u0107 si\u0119 w ka\u017cd\u0105 z nich. Postanowi\u0142em wi\u0119c przeprowadzi\u0107 ma\u0142y eksperyment - zamierzam przedstawi\u0107 ka\u017cd\u0105 funkcj\u0119 w jednym zdaniu oraz poprzez fragment kodu (dla stabilnych funkcjonalno\u015bci). Stali czytelnicy ju\u017c tego typu opracowanie widzieli, ale \u017ceby nie by\u0142o \u017ce si\u0119 lenie - dodatkowo, do do prawie wszystkich stabilnych funkcjonalno\u015bci do\u0142o\u017cy\u0142em zestaw materia\u0142\u00f3w dodatkowych, kt\u00f3re pozwalaj\u0105 lepiej zrozumie\u0107 poszczeg\u00f3lne \"featury\".<\/p>\n","innerContent":["\n<p>Z uwagi na liczb\u0119 nowych funkcji, nie mog\u0119 zag\u0142\u0119bia\u0107 si\u0119 w ka\u017cd\u0105 z nich. Postanowi\u0142em wi\u0119c przeprowadzi\u0107 ma\u0142y eksperyment - zamierzam przedstawi\u0107 ka\u017cd\u0105 funkcj\u0119 w jednym zdaniu oraz poprzez fragment kodu (dla stabilnych funkcjonalno\u015bci). Stali czytelnicy ju\u017c tego typu opracowanie widzieli, ale \u017ceby nie by\u0142o \u017ce si\u0119 lenie - dodatkowo, do do prawie wszystkich stabilnych funkcjonalno\u015bci do\u0142o\u017cy\u0142em zestaw materia\u0142\u00f3w dodatkowych, kt\u00f3re pozwalaj\u0105 lepiej zrozumie\u0107 poszczeg\u00f3lne \"featury\".<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dlatego bez zb\u0119dnego przed\u0142u\u017cania, zaczynamy, bo i tak du\u017co przed nami:<\/p>\n","innerContent":["\n<p>Dlatego bez zb\u0119dnego przed\u0142u\u017cania, zaczynamy, bo i tak du\u017co przed nami:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Stabilne<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Stabilne<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/431\">431: Sequenced Collections<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/431\">431: Sequenced Collections<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W wypadku uporz\u0105dkowanych kolekcji, wprowadzono sp\u00f3jny interfejs do pobierania pierwszego i ostatniego elementu, a tak\u017ce odwracania sekwencji.<\/p>\n","innerContent":["\n<p>W wypadku uporz\u0105dkowanych kolekcji, wprowadzono sp\u00f3jny interfejs do pobierania pierwszego i ostatniego elementu, a tak\u017ce odwracania sekwencji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>interface SequencedCollection&lt;E&gt; extends Collection&lt;E&gt; {\n    \/\/ new method\n    SequencedCollection&lt;E&gt; reversed();\n    \/\/ methods promoted from Deque\n    void addFirst(E);\n    void addLast(E);\n    E getFirst();\n    E getLast();\n    E removeFirst();\n    E removeLast();\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>interface SequencedCollection&lt;E&gt; extends Collection&lt;E&gt; {\n    \/\/ new method\n    SequencedCollection&lt;E&gt; reversed();\n    \/\/ methods promoted from Deque\n    void addFirst(E);\n    void addLast(E);\n    E getFirst();\n    E getLast();\n    E removeFirst();\n    E removeLast();\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=9G_0el3RWPE\">Java 21's New (Sequenced) Collections<\/a> - Prezentacja wideo z Inside Java Newscast, prezentuj\u0105ca oryginalny JEP. Posiada te\u017c <a href=\"https:\/\/nipafx.dev\/inside-java-newscast-45\/\">tekstowy suplement<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=9G_0el3RWPE\">Java 21's New (Sequenced) Collections<\/a> - Prezentacja wideo z Inside Java Newscast, prezentuj\u0105ca oryginalny JEP. Posiada te\u017c <a href=\"https:\/\/nipafx.dev\/inside-java-newscast-45\/\">tekstowy suplement<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/439\">439: Generational ZGC<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/439\">439: Generational ZGC<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jako, \u017ce prawdopodobie\u0144stwo konieczno\u015bci \"sprz\u0105tania\" przez GC zmniejsza si\u0119 wraz z czasem \u017cycia danego obiektu, posiadanie innego pipeline dla kr\u00f3tko i d\u0142ugo \u017cyj\u0105cych obiekt\u00f3w jest standardem w GC, a teraz trafia te\u017c do ZGC.<\/p>\n","innerContent":["\n<p>Jako, \u017ce prawdopodobie\u0144stwo konieczno\u015bci \"sprz\u0105tania\" przez GC zmniejsza si\u0119 wraz z czasem \u017cycia danego obiektu, posiadanie innego pipeline dla kr\u00f3tko i d\u0142ugo \u017cyj\u0105cych obiekt\u00f3w jest standardem w GC, a teraz trafia te\u017c do ZGC.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/17\/gctuning\/garbage-collector-implementation.html#GUID-71D796B3-CBAB-4D80-B5C3-2620E45F6E5D\">Garbage Collector Implementation - Generational Garbage Collection<\/a> - Tekst Oracle opisuj\u0105cy hipotez\u0119 generacyjn\u0105 w kontek\u015bcie HotSpot VM.<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/17\/gctuning\/garbage-collector-implementation.html#GUID-71D796B3-CBAB-4D80-B5C3-2620E45F6E5D\">Garbage Collector Implementation - Generational Garbage Collection<\/a> - Tekst Oracle opisuj\u0105cy hipotez\u0119 generacyjn\u0105 w kontek\u015bcie HotSpot VM.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/377\">JEP 377: ZGC: A Scalable Low-Latency Garbage Collector<\/a> - oryginalny JEP wprowadzaj\u0105cy samo ZGC.<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/377\">JEP 377: ZGC: A Scalable Low-Latency Garbage Collector<\/a> - oryginalny JEP wprowadzaj\u0105cy samo ZGC.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.baeldung.com\/jvm-zgc-garbage-collector\">An Introduction to ZGC: A Scalable and Experimental Low-Latency Garbage Collector<\/a> - Przyst\u0119pne wprowadzenie do samego ZGC. Wprawdzie ZGC ju\u017c nie jest tak bardzo \"experimental\", ale sam tekst jest regularnie aktualizowany (ostatni raz w poniedzia\u0142ek 18 pa\u017adziernika).<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.baeldung.com\/jvm-zgc-garbage-collector\">An Introduction to ZGC: A Scalable and Experimental Low-Latency Garbage Collector<\/a> - Przyst\u0119pne wprowadzenie do samego ZGC. Wprawdzie ZGC ju\u017c nie jest tak bardzo \"experimental\", ale sam tekst jest regularnie aktualizowany (ostatni raz w poniedzia\u0142ek 18 pa\u017adziernika).<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=bLJJ3CY1aE8&amp;t=1069s\">An Introduction to ZGC: A Scalable and Experimental Low<\/a> - Prezentacja z JavaOne na temat ZGC.<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=bLJJ3CY1aE8&amp;t=1069s\">An Introduction to ZGC: A Scalable and Experimental Low<\/a> - Prezentacja z JavaOne na temat ZGC.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/inside.java\/2022\/06\/29\/podcast-024\/\">Inside Java Podcast - Episode 24 \u201cTowards Generational ZGC!\u201d<\/a> - Oficjalny Podcast Javy, opisuj\u0105ce \"kuchnie\" pracy nad Generacyjnym ZGC.<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/inside.java\/2022\/06\/29\/podcast-024\/\">Inside Java Podcast - Episode 24 \u201cTowards Generational ZGC!\u201d<\/a> - Oficjalny Podcast Javy, opisuj\u0105ce \"kuchnie\" pracy nad Generacyjnym ZGC.<\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/440\">440: Record Patterns<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/440\">440: Record Patterns<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Mo\u017cliwo\u015b\u0107 \u0142atwej dekonstrukcja Rekord\u00f3w, umo\u017cliwiaj\u0105ca wyci\u0105gni\u0119cie z nich konkretnych p\u00f3l, a tak\u017ce u\u017cywanie w pattern matchingu (kolejny JEP).<\/p>\n","innerContent":["\n<p>Mo\u017cliwo\u015b\u0107 \u0142atwej dekonstrukcja Rekord\u00f3w, umo\u017cliwiaj\u0105ca wyci\u0105gni\u0119cie z nich konkretnych p\u00f3l, a tak\u017ce u\u017cywanie w pattern matchingu (kolejny JEP).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>if (obj instanceof Point(int x, int y)) {\n    System.out.println(x+y);\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>if (obj instanceof Point(int x, int y)) {\n    System.out.println(x+y);\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/gavinray97.github.io\/blog\/what-good-are-record-patterns?utm_source=vived.substack.com\">What good are Record Patterns in Java? An example based on Spark's Catalyst Optimizer and it's Tree Rewriting Rules<\/a> - artyku\u0142 z nietrywialnymi przyk\u0142adami.<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/gavinray97.github.io\/blog\/what-good-are-record-patterns?utm_source=vived.substack.com\">What good are Record Patterns in Java? An example based on Spark's Catalyst Optimizer and it's Tree Rewriting Rules<\/a> - artyku\u0142 z nietrywialnymi przyk\u0142adami.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.infoq.com\/articles\/data-oriented-programming-java\/?utm_source=vived.substack.com\">Data Oriented Programming in Java<\/a> - tekst prezentuj\u0105cy za\u0142o\u017cenia stoj\u0105ce za rekordami, pattern matchingiem i innymi nowymi elementami sk\u0142adni j\u0119zyka w Javie. IMHO lektura obowi\u0105zkowa do lepszego zrozumienia jego ewolucji \ud83d\udea8. Aplikuje si\u0119 te\u017c do poni\u017cszego\ud83d\udc47<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.infoq.com\/articles\/data-oriented-programming-java\/?utm_source=vived.substack.com\">Data Oriented Programming in Java<\/a> - tekst prezentuj\u0105cy za\u0142o\u017cenia stoj\u0105ce za rekordami, pattern matchingiem i innymi nowymi elementami sk\u0142adni j\u0119zyka w Javie. IMHO lektura obowi\u0105zkowa do lepszego zrozumienia jego ewolucji \ud83d\udea8. Aplikuje si\u0119 te\u017c do poni\u017cszego\ud83d\udc47<\/li>\n"]}],"innerHTML":"\n<ul>\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/441\">441: Pattern Matching for switch<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/441\">441: Pattern Matching for switch<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Mo\u017cliwo\u015b\u0107 u\u017cycia switch do pattern matchingu, z uwzgl\u0119dnieniem zaawansowanych opcji.<\/p>\n","innerContent":["\n<p>Mo\u017cliwo\u015b\u0107 u\u017cycia switch do pattern matchingu, z uwzgl\u0119dnieniem zaawansowanych opcji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>static String formatterPatternSwitch(Object obj) {\n    return switch (obj) {\n        case Integer i -&gt; String.format(\"int %d\", i);\n        case Long l    -&gt; String.format(\"long %d\", l);\n        case Double d  -&gt; String.format(\"double %f\", d);\n        case String s  -&gt; String.format(\"String %s\", s);\n        default        -&gt; obj.toString();\n    };\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>static String formatterPatternSwitch(Object obj) {\n    return switch (obj) {\n        case Integer i -&gt; String.format(\"int %d\", i);\n        case Long l    -&gt; String.format(\"long %d\", l);\n        case Double d  -&gt; String.format(\"double %f\", d);\n        case String s  -&gt; String.format(\"String %s\", s);\n        default        -&gt; obj.toString();\n    };\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.infoq.com\/articles\/data-oriented-programming-java\/\">Data Oriented Programming in Java<\/a> - tak jak do JEP 440, tak i tutaj bardzo zach\u0119cam do zapoznania si\u0119.<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.infoq.com\/articles\/data-oriented-programming-java\/\">Data Oriented Programming in Java<\/a> - tak jak do JEP 440, tak i tutaj bardzo zach\u0119cam do zapoznania si\u0119.<\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/444\">444: Virtual Threads<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/444\">444: Virtual Threads<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wprowadzenie do JVM konceptu w\u0105tk\u00f3w zarz\u0105dzanych nie przez system operacyjny, a przez sam\u0105 maszyn\u0119 wirtualn\u0105.<\/p>\n","innerContent":["\n<p>Wprowadzenie do JVM konceptu w\u0105tk\u00f3w zarz\u0105dzanych nie przez system operacyjny, a przez sam\u0105 maszyn\u0119 wirtualn\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>Thread.builder().virtual().factory();<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>Thread.builder().virtual().factory();<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/spring.io\/blog\/2023\/09\/09\/all-together-now-spring-boot-3-2-graalvm-native-images-java-21-and-virtual\">All together now: Spring Boot 3.2, GraalVM native images, Java 21, and virtual threads with Project Loom<\/a> - Tekst prezentuj\u0105cy stanowisko Springa, je\u015bli chodzi o implementacje Projekt Loom.<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/spring.io\/blog\/2023\/09\/09\/all-together-now-spring-boot-3-2-graalvm-native-images-java-21-and-virtual\">All together now: Spring Boot 3.2, GraalVM native images, Java 21, and virtual threads with Project Loom<\/a> - Tekst prezentuj\u0105cy stanowisko Springa, je\u015bli chodzi o implementacje Projekt Loom.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/helidon.io\/nima\">Helidon N\u00edma<\/a> - Pierwszy Javowy Framework napisany od podstaw pod k\u0105tem wsparcia Wirtualnych W\u0105tk\u00f3w - pojawi si\u0119 jako cz\u0119\u015b\u0107 Helidon 4.0.0<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/helidon.io\/nima\">Helidon N\u00edma<\/a> - Pierwszy Javowy Framework napisany od podstaw pod k\u0105tem wsparcia Wirtualnych W\u0105tk\u00f3w - pojawi si\u0119 jako cz\u0119\u015b\u0107 Helidon 4.0.0<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/quarkus.io\/guides\/virtual-threads\">Virtual Thread Support Reference in Quarkus<\/a> - opis wsparcia Wirtualnych W\u0105tk\u00f3w trzeci z du\u017cych javowych framework\u00f3w.<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/quarkus.io\/guides\/virtual-threads\">Virtual Thread Support Reference in Quarkus<\/a> - opis wsparcia Wirtualnych W\u0105tk\u00f3w trzeci z du\u017cych javowych framework\u00f3w.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/blog.softwaremill.com\/what-is-blocking-in-loom-5d4e6a36c24e\">What is blocking in Loom?<\/a> - Tekst opisuj\u0105cy z detalami problem \"pinningu\" thread\u00f3w.<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/blog.softwaremill.com\/what-is-blocking-in-loom-5d4e6a36c24e\">What is blocking in Loom?<\/a> - Tekst opisuj\u0105cy z detalami problem \"pinningu\" thread\u00f3w.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/softwaremill.com\/implementing-raft-using-project-loom\/#zio-vs-loom-the-verdict\">Implementing Raft using Project Loom<\/a> - Jak w tytule, przyk\u0142ad u\u017cycia wirtualnych w\u0105tk\u00f3w do implementacji Rafta.<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/softwaremill.com\/implementing-raft-using-project-loom\/#zio-vs-loom-the-verdict\">Implementing Raft using Project Loom<\/a> - Jak w tytule, przyk\u0142ad u\u017cycia wirtualnych w\u0105tk\u00f3w do implementacji Rafta.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/blog.rockthejvm.com\/ultimate-guide-to-java-virtual-threads\/\">The Ultimate Guide to Java Virtual Threads<\/a> - \u015bwietny kurs Virtual Threads z <a href=\"https:\/\/blog.rockthejvm.com\/ultimate-guide-to-java-virtual-threads\/\">Rock the JVM Blog<\/a>.<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/blog.rockthejvm.com\/ultimate-guide-to-java-virtual-threads\/\">The Ultimate Guide to Java Virtual Threads<\/a> - \u015bwietny kurs Virtual Threads z <a href=\"https:\/\/blog.rockthejvm.com\/ultimate-guide-to-java-virtual-threads\/\">Rock the JVM Blog<\/a>.<\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n\n\n\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/449\">449: Deprecate the Windows 32-bit x86 Port for Removal<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/449\">449: Deprecate the Windows 32-bit x86 Port for Removal<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16774,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/d0854f71-2f51-40a0-9644-65f3b2e70fa7_text.gif\" alt=\"\" class=\"wp-image-16774\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/d0854f71-2f51-40a0-9644-65f3b2e70fa7_text.gif\" alt=\"\" class=\"wp-image-16774\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/451\">451: Prepare to Disallow the Dynamic Loading of Agents<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/451\">451: Prepare to Disallow the Dynamic Loading of Agents<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W celu zwi\u0119kszenia bezpiecze\u0144stwa Javy, tw\u00f3rcy planuj\u0105 w przysz\u0142o\u015bci zabroni\u0107 \u0142adowania pewnych kategorii Agent\u00f3w Maszyny Wirtualnej bez podania specjalnej flagi.<\/p>\n","innerContent":["\n<p>W celu zwi\u0119kszenia bezpiecze\u0144stwa Javy, tw\u00f3rcy planuj\u0105 w przysz\u0142o\u015bci zabroni\u0107 \u0142adowania pewnych kategorii Agent\u00f3w Maszyny Wirtualnej bez podania specjalnej flagi.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.javaadvent.com\/2019\/12\/a-beginners-guide-to-java-agents.html\">A beginner's guide to Java agents<\/a> - Szybkie wprowadzenie do tematu Agent\u00f3w Javowych z Java Advent Calendar (bardzo fajna coroczna inicjatywa, ciekawe co szykuj).<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.javaadvent.com\/2019\/12\/a-beginners-guide-to-java-agents.html\">A beginner's guide to Java agents<\/a> - Szybkie wprowadzenie do tematu Agent\u00f3w Javowych z Java Advent Calendar (bardzo fajna coroczna inicjatywa, ciekawe co szykuj).<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=oflzFGONG08\">The definitive guide to Java agents by Rafael Winterhalter<\/a> - To samo, tylko mocno poszerzone i w formie wideo \ud83d\ude03<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=oflzFGONG08\">The definitive guide to Java agents by Rafael Winterhalter<\/a> - To samo, tylko mocno poszerzone i w formie wideo \ud83d\ude03<\/li>\n"]}],"innerHTML":"\n<ul>\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/452\">452: Key Encapsulation Mechanism API<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/452\">452: Key Encapsulation Mechanism API<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wprowadzenie do Javy standardowego API pozwalaj\u0105cego na u\u017cycie techniki znanej jako KEM, wykorzystywanej min. w algorytmach kryptografii kwantowej.<\/p>\n","innerContent":["\n<p>Wprowadzenie do Javy standardowego API pozwalaj\u0105cego na u\u017cycie techniki znanej jako KEM, wykorzystywanej min. w algorytmach kryptografii kwantowej.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":16778,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-8-1024x259.png\" alt=\"\" class=\"wp-image-16778\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-8-1024x259.png\" alt=\"\" class=\"wp-image-16778\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Materia\u0142y dodatkowe<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/blog.cloudflare.com\/post-quantum-key-encapsulation\/\">Deep dive into a post-quantum key encapsulation algorithm<\/a> - artyku\u0142 od Cloudflare opisuj\u0105cy w przyst\u0119pny spos\u00f3b jak dzia\u0142a KEM.<\/li>\n","innerContent":["\n<li><a href=\"https:\/\/blog.cloudflare.com\/post-quantum-key-encapsulation\/\">Deep dive into a post-quantum key encapsulation algorithm<\/a> - artyku\u0142 od Cloudflare opisuj\u0105cy w przyst\u0119pny spos\u00f3b jak dzia\u0142a KEM.<\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Preview<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Preview<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/430\">430: String Templates (Preview)<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/430\">430: String Templates (Preview)<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Mo\u017cliwo\u015b\u0107 tworzenia w Javie blok\u00f3w tekstu, daj\u0105cych du\u017co wi\u0119ksze mo\u017cliwo\u015bci i bezpiecze\u0144stwo ni\u017c interpolacja string\u00f3w.<\/p>\n","innerContent":["\n<p>Mo\u017cliwo\u015b\u0107 tworzenia w Javie blok\u00f3w tekstu, daj\u0105cych du\u017co wi\u0119ksze mo\u017cliwo\u015bci i bezpiecze\u0144stwo ni\u017c interpolacja string\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>JSONObject doc = JSON_VALIDATE.\"\"\"\n    {\n        \"name\":    \\{name},\n        \"phone\":   \\{phone},\n        \"address\": \\{address}\n    };\n    \"\"\";\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>JSONObject doc = JSON_VALIDATE.\"\"\"\n    {\n        \"name\":    \\{name},\n        \"phone\":   \\{phone},\n        \"address\": \\{address}\n    };\n    \"\"\";\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/445\">445: Unnamed Classes and Instance Main Methods (Preview)<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/445\">445: Unnamed Classes and Instance Main Methods (Preview)<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zmiana Launch Protocol w Javie, umo\u017cliwiaj\u0105ca pisania mocno uproszczonych klas Java, g\u0142\u00f3wnie na potrzeby edukacji.<\/p>\n","innerContent":["\n<p>Zmiana Launch Protocol w Javie, umo\u017cliwiaj\u0105ca pisania mocno uproszczonych klas Java, g\u0142\u00f3wnie na potrzeby edukacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>void main() {\n    System.out.println(\"Hello, World!\");\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>void main() {\n    System.out.println(\"Hello, World!\");\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/442\">442: Foreign Function &amp; Memory API (Third Preview)<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/442\">442: Foreign Function &amp; Memory API (Third Preview)<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wprowadzenie typowanej interoperacyjno\u015bci z programami napisanymi w C (a w przysz\u0142o\u015bci te\u017c innych j\u0119zyk\u00f3w kompilowanych), a tak\u017ce natywnej pami\u0119ci systemu operacyjnego.<\/p>\n","innerContent":["\n<p>Wprowadzenie typowanej interoperacyjno\u015bci z programami napisanymi w C (a w przysz\u0142o\u015bci te\u017c innych j\u0119zyk\u00f3w kompilowanych), a tak\u017ce natywnej pami\u0119ci systemu operacyjnego.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/443\">443: Unnamed Patterns and Variables (Preview)<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/443\">443: Unnamed Patterns and Variables (Preview)<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wprowadzenie do j\u0119zyka wildcard _, u\u017cywanego wtedy, gdy nie chcemy w pattern matchingu definiowa\u0107 konkretnej oczekiwanej warto\u015bci\/typu, a tak\u017ce jako hint dla linter\u00f3w, gdy wiemy \u017ce zadeklarowana zmienna jest niepotrzebna.<\/p>\n","innerContent":["\n<p>Wprowadzenie do j\u0119zyka wildcard _, u\u017cywanego wtedy, gdy nie chcemy w pattern matchingu definiowa\u0107 konkretnej oczekiwanej warto\u015bci\/typu, a tak\u017ce jako hint dla linter\u00f3w, gdy wiemy \u017ce zadeklarowana zmienna jest niepotrzebna.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><code>if(r instanceof Point(_, int y))<\/code><\/p>\n","innerContent":["\n<p><code>if(r instanceof Point(_, int y))<\/code><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/453\">453: Structured Concurrency (Preview)<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/453\">453: Structured Concurrency (Preview)<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zestaw struktur umo\u017cliwiaj\u0105cych zarz\u0105dzanie w\u0105tkami (nie tylko wirtualnymi), a zw\u0142aszcza potencjalnymi b\u0142\u0119dami.<\/p>\n","innerContent":["\n<p>Zestaw struktur umo\u017cliwiaj\u0105cych zarz\u0105dzanie w\u0105tkami (nie tylko wirtualnymi), a zw\u0142aszcza potencjalnymi b\u0142\u0119dami.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {\n        Supplier&lt;String&gt;  user  = scope.fork(() -&gt; findUser());\n        Supplier&lt;Integer&gt; order = scope.fork(() -&gt;fetchOrder());\n\n        scope.join().throwIfFailed();\n\n        return new Response(user.get(), order.get());\n    }<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {\n        Supplier&lt;String&gt;  user  = scope.fork(() -&gt; findUser());\n        Supplier&lt;Integer&gt; order = scope.fork(() -&gt;fetchOrder());\n\n        scope.join().throwIfFailed();\n\n        return new Response(user.get(), order.get());\n    }<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/446\">446: Scoped Values (Preview)<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/446\">446: Scoped Values (Preview)<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Alternatywa dla <code>ThreadLocala<\/code>, zaprojektowana g\u0142\u00f3wnie z my\u015bl\u0105 o wirtualnych w\u0105tkach.<\/p>\n","innerContent":["\n<p>Alternatywa dla <code>ThreadLocala<\/code>, zaprojektowana g\u0142\u00f3wnie z my\u015bl\u0105 o wirtualnych w\u0105tkach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>final static ScopedValue&lt;...&gt; V = ScopedValue.newInstance();\nScopedValue.where(V, &lt;value&gt;).run(() -&gt; {  V.get() });<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>final static ScopedValue&lt;...&gt; V = ScopedValue.newInstance();\nScopedValue.where(V, &lt;value&gt;).run(() -&gt; {  V.get() });<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Inkubacja<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Inkubacja<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/448\">448: Vector API (Sixth Incubator)<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/openjdk.org\/jeps\/448\">448: Vector API (Sixth Incubator)<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Czekaj\u0105ce na Valhalle API umo\u017cliwiaj\u0105ce operacje wektorowe, udost\u0119pniane przez nowoczesne procesory.<\/p>\n","innerContent":["\n<p>Czekaj\u0105ce na Valhalle API umo\u017cliwiaj\u0105ce operacje wektorowe, udost\u0119pniane przez nowoczesne procesory.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">A na koniec, troch\u0119 og\u00f3lnych link\u00f3w<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">A na koniec, troch\u0119 og\u00f3lnych link\u00f3w<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wydanie nowej wersji JDK towarzyszy\u0142 stream, kt\u00f3ry pozwoli\u0142 na pocieszenie si\u0119 z ca\u0142\u0105 reszt\u0105 community premier\u0105:<\/p>\n","innerContent":["\n<p>Wydanie nowej wersji JDK towarzyszy\u0142 stream, kt\u00f3ry pozwoli\u0142 na pocieszenie si\u0119 z ca\u0142\u0105 reszt\u0105 community premier\u0105:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=E8NV68ihJyY","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=E8NV68ihJyY\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=E8NV68ihJyY\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jedno z nich to \u015bwietne opracowanie ze strony kana\u0142u Inside Java, w kt\u00f3rym Nicolai Parlog w 20 minutowym filmiku w szerszym stopniu opisuje ka\u017cdy z JEP-\u00f3w:<\/p>\n","innerContent":["\n<p>Jedno z nich to \u015bwietne opracowanie ze strony kana\u0142u Inside Java, w kt\u00f3rym Nicolai Parlog w 20 minutowym filmiku w szerszym stopniu opisuje ka\u017cdy z JEP-\u00f3w:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=qGaUZ1Z34jw","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=qGaUZ1Z34jw\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=qGaUZ1Z34jw\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dodatkowo, ostatnimi tygodniami ukaza\u0142a si\u0119 na oficjalnym kanale Java ca\u0142a <a href=\"https:\/\/www.youtube.com\/playlist?list=PLX8CzqL3ArzVHAHWowaXwYFlLk78D8RvL\">seria filmik\u00f3w #RoadTo21<\/a>, kt\u00f3re prezentuj\u0105 kolejne nowo\u015bci w nieco szerszym opracowaniu.<\/p>\n","innerContent":["\n<p>Dodatkowo, ostatnimi tygodniami ukaza\u0142a si\u0119 na oficjalnym kanale Java ca\u0142a <a href=\"https:\/\/www.youtube.com\/playlist?list=PLX8CzqL3ArzVHAHWowaXwYFlLk78D8RvL\">seria filmik\u00f3w #RoadTo21<\/a>, kt\u00f3re prezentuj\u0105 kolejne nowo\u015bci w nieco szerszym opracowaniu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nicolai opublikowa\u0142 te\u017c tekst <a href=\"https:\/\/nipafx.dev\/talk-java-action\/\">Modern Java in Action<\/a>, kt\u00f3ry pozwala zapozna\u0107 si\u0119 z tym, jak te wszystkie nowe funkcjonalno\u015bci mo\u017cna u\u017cy\u0107 na przyk\u0142adzie realnej aplikacji.<\/p>\n","innerContent":["\n<p>Nicolai opublikowa\u0142 te\u017c tekst <a href=\"https:\/\/nipafx.dev\/talk-java-action\/\">Modern Java in Action<\/a>, kt\u00f3ry pozwala zapozna\u0107 si\u0119 z tym, jak te wszystkie nowe funkcjonalno\u015bci mo\u017cna u\u017cy\u0107 na przyk\u0142adzie realnej aplikacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A je\u017celi potrzebujecie czego\u015b kr\u00f3tszego, \"dla kolegi\" kt\u00f3ry ma przestarza\u0142\u0105 opinie o Javie, to dla mnie okazja, aby przemyci\u0107 jeden z moich ulubionych kana\u0142\u00f3w programistycznych na YouTube. Je\u015bli cenicie sobie lekk\u0105, \"memiczn\u0105\" formu\u0142\u0119 opracowa\u0144, to Fireship zdecydowanie powinien przypa\u015b\u0107 Wam do gustu. Zawarto\u015b\u0107 tego kana\u0142u to przede wszystkim kr\u00f3tkie, poni\u017cej pi\u0119ciominutowe filmy.<\/p>\n","innerContent":["\n<p>A je\u017celi potrzebujecie czego\u015b kr\u00f3tszego, \"dla kolegi\" kt\u00f3ry ma przestarza\u0142\u0105 opinie o Javie, to dla mnie okazja, aby przemyci\u0107 jeden z moich ulubionych kana\u0142\u00f3w programistycznych na YouTube. Je\u015bli cenicie sobie lekk\u0105, \"memiczn\u0105\" formu\u0142\u0119 opracowa\u0144, to Fireship zdecydowanie powinien przypa\u015b\u0107 Wam do gustu. Zawarto\u015b\u0107 tego kana\u0142u to przede wszystkim kr\u00f3tkie, poni\u017cej pi\u0119ciominutowe filmy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Autor skupia si\u0119 na najistotniejszych tematach ze \u015bwiata programowania. Dla mnie zawsze jest to fantastyczny spos\u00f3b na \u015bledzenie nowo\u015bci z obszar\u00f3w poza moj\u0105 g\u0142\u00f3wn\u0105 specjalizacj\u0105, jak na przyk\u0142ad nowe j\u0119zyki programowania czy innowacje typu bazy wektorowe.<\/p>\n","innerContent":["\n<p>Autor skupia si\u0119 na najistotniejszych tematach ze \u015bwiata programowania. Dla mnie zawsze jest to fantastyczny spos\u00f3b na \u015bledzenie nowo\u015bci z obszar\u00f3w poza moj\u0105 g\u0142\u00f3wn\u0105 specjalizacj\u0105, jak na przyk\u0142ad nowe j\u0119zyki programowania czy innowacje typu bazy wektorowe.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Podkre\u015blam to, poniewa\u017c niedawno na kanale Fireship ukaza\u0142o si\u0119 video po\u015bwi\u0119cone JDK 21. Zach\u0119cam do sprawdzenia, czy taki format odpowiada te\u017c&nbsp;Wam. Moim zdaniem, warto da\u0107 mu szans\u0119:<\/p>\n","innerContent":["\n<p>Podkre\u015blam to, poniewa\u017c niedawno na kanale Fireship ukaza\u0142o si\u0119 video po\u015bwi\u0119cone JDK 21. Zach\u0119cam do sprawdzenia, czy taki format odpowiada te\u017c&nbsp;Wam. Moim zdaniem, warto da\u0107 mu szans\u0119:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=Ibjm2KHfymo","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=Ibjm2KHfymo\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=Ibjm2KHfymo\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A za tydzie\u0144 porozmawiamy sobie o towarzysz\u0105cych JDK 21 premierach: <strong>JavaFX<\/strong> oraz <strong>GraalVM<\/strong>, kt\u00f3ry te\u017c mia\u0142 publiczny launch nowej wersji, zreszt\u0105 pewnie w ci\u0105gu najbli\u017cszego tygodnia doczekamy si\u0119 wysypu nowych mo\u017cliwo\u015bci j\u0119zyka. Zapis streamu znajdziecie poni\u017cej:<\/p>\n","innerContent":["\n<p>A za tydzie\u0144 porozmawiamy sobie o towarzysz\u0105cych JDK 21 premierach: <strong>JavaFX<\/strong> oraz <strong>GraalVM<\/strong>, kt\u00f3ry te\u017c mia\u0142 publiczny launch nowej wersji, zreszt\u0105 pewnie w ci\u0105gu najbli\u017cszego tygodnia doczekamy si\u0119 wysypu nowych mo\u017cliwo\u015bci j\u0119zyka. Zapis streamu znajdziecie poni\u017cej:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=L2xtYwFRAPo","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=L2xtYwFRAPo\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=L2xtYwFRAPo\n<\/div><\/figure>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16769","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=16769"}],"version-history":[{"count":6,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16769\/revisions"}],"predecessor-version":[{"id":16785,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16769\/revisions\/16785"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/16781"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=16769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=16769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=16769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}