{"id":15868,"date":"2023-05-05T10:11:04","date_gmt":"2023-05-05T08:11:04","guid":{"rendered":"https:\/\/vived.io\/?p=15868"},"modified":"2023-05-05T12:03:06","modified_gmt":"2023-05-05T10:03:06","slug":"rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/","title":{"rendered":"Rzut oka pod mask\u0119 Javy: Dynamiczni Agenci i &#8222;tearing&#8221; &#8211; JVM Weekly vol. 134"},"content":{"rendered":"\n<h2 id=\"1-quarkus-dostaje-wydanie-3-0\" data-num=1>1. Quarkus dostaje wydanie 3.0<\/h2>\n\n\n\n<p>Uwielbiam Quarkusa i ca\u0142\u0105 stoj\u0105c\u0105 za nim filozofi\u0119 opart\u0105 o stworzenie nie tylko samego (wydajnego) frameworki, ale r\u00f3wnie\u017c zestawu narz\u0119dzi, kt\u00f3ry pozwoli na jego efektywne u\u017cycie. W \u015bwiecie, gdzie Spring Boot ma (zas\u0142u\u017cenie, AD 2023 to te\u017c \u015bwietny framework jest) dominuj\u0105c\u0105 pozycj\u0119, mi\u0142o widzie\u0107 realn\u0105 konkurencje, kt\u00f3ra wybra\u0142a sobie swoj\u0105 nisz\u0119 i si\u0119 w niej rozpycha (aplikacje strikte Cloud Native, \u0142\u0105cznie z funkcjami serverless, w kt\u00f3rych wsparciu akurat bije javowego Goliata). Jako, \u017ce historycznie mia\u0142em te\u017c sporo do\u015bwiadczenia z platform\u0105 Java EE, w dalszym ci\u0105gu ci\u0119\u017cko mi uwierzy\u0107, jak wiele pracy wykonano, by pozby\u0107 si\u0119 z\u0142ej s\u0142awy standardu, a RedHat z pewno\u015bci\u0105 do\u0142o\u017cy\u0142 do tego cegie\u0142k\u0119. Dlatego te\u017c na <a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-0-final-released\/\">Quarkus 3.0<\/a> czeka\u0142em z niecierpliwo\u015bci\u0105, poniewa\u017c poza standardowymi zmianami, zgodnymi z kierunkiem w kt\u00f3rym idzie ca\u0142y ekosystem (Jakarta EE 10, MicroProfile 6.0, Hibernate 6.0 i Reactive czy zapowied\u017a porzucenia wsparcia dla JDK 11) dok\u0142ada on kilka swoich w\u0142asnych, unikalnych smaczk\u00f3w.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/dev-ui.gif\" alt=\"\"\/><\/figure>\n\n\n\n<p>Zacznijmy od Dev UI, kt\u00f3re z jednej strony pokazuje pewne korzenie Quarkusa &#8211; tego typu cude\u0144ka to raczej zawsze by\u0142y domen\u0105 serwer\u00f3w aplikacyjnych, z drugiej za\u015b uzmys\u0142awia, jak wiele dobrych pomys\u0142\u00f3w istnia\u0142o w takich wydawa\u0142oby si\u0119 antycznych ju\u017c rozwi\u0105zaniach &#8211; do\u015b\u0107 wymieni\u0107 panel do zmienianie opcji konfiguracyjnych czy zarz\u0105dzaniu rozszerzeniami. I oczywi\u015bcie, Dev UI pojawi\u0142o si\u0119 ju\u017c przy okazji Quarkusa 2.0, ale teraz zosta\u0142o znacznie rozbudowane i wygodniejsze w obs\u0142udze. Maj\u0105cy do\u015bwiadczenie z rozwi\u0105zaniami frontendowymi szybko rozpoznaj\u0105 te\u017c drugiego rodzica tego rozwi\u0105zania &#8211; dzi\u0119ki temu, \u017ce Quarkus mo\u017cna uruchomi\u0107 w tak zwanym Dev Mode, dost\u0119pne s\u0105 takie featury jak Continouse Testing (uwierzcie mi, it makes a difference). I oczywi\u015bcie nie jest tak, \u017ce Quarkus jako jedyny posiada takie mo\u017cliwo\u015bci, ale jest to jedyny z popularnych framework\u00f3w, kt\u00f3ry traktuje je jako obywateli pierwszej kategorii, a nie jako dodatek &#8211; i to czu\u0107.<\/p>\n\n\n\n<p>Niezwykle interesuj\u0105c\u0105 zmian\u0105 jest te\u017c wprowadzenie Mutiny2. Mutiny to biblioteka Java opracowana przez zesp\u00f3\u0142 Quarkus w celu uproszczenia implementacji programowania reaktywnego i asynchronicznego. Jak to bywa w wypadku projekt\u00f3w Quarkusa, zosta\u0142a zaprojektowana tak, aby by\u0142 intuicyjne i proste podej\u015bcie do pisania kodu reaktywnego w por\u00f3wnaniu do innych bibliotek, takich jak RxJava i Project Reactor. Mutiny podobnie jak wymienione przed chwil\u0105 projekty jest implementacj\u0105 Reactive Streams. Dla tych kt\u00f3rzy mog\u0105 nie kojarzy\u0107, Reactive Streams API jest standardem dla asynchronicznego, nieblokuj\u0105cego i \u015bwiadomego backpressure przetwarzania strumieni danych w Javie, promuj\u0105c interoperacyjno\u015b\u0107 w\u015br\u00f3d bibliotek i framework\u00f3w programowania reaktywnego. W okolicach JDK 9 by\u0142 to jeden z najg\u0142o\u015bniejszych temat\u00f3w w ca\u0142ym JDK, ale jako \u017ce hype na programowanie reaktywne nieco ju\u017c min\u0105\u0142, przesta\u0142y si\u0119 te\u017c jak grzyby po deszczu pojawia\u0107 kolejne implementacji. Dlatego te\u017c Mutiny <a href=\"https:\/\/smallrye.io\/smallrye-mutiny\/2.0.0\/reference\/migrating-to-mutiny-2\/\">postanowi\u0142o odpu\u015bci\u0107 sobie &#8222;do abstrakcji&#8221; Reactive Streams<\/a>, a zamiast tego u\u017cy\u0107 po prostu referencyjnej wersji z JDK &#8211; <code>java.util.concurrent.Flow<\/code>. Jest to chyba pewne symboliczne domkni\u0119cie pewnej epoki.<\/p>\n\n\n\n<p>Czego mi jednak zabrak\u0142o? Mia\u0142em nadzieje, \u017ce dostaniemy jakie\u015b szersze wsparcie wirtualnych w\u0105tk\u00f3w, kt\u00f3re by\u0142o wspomniane w momencie og\u0142oszenia prac nad wersj\u0105 3.0. Zrobi\u0142em sobie ma\u0142e review kodu i na ten moment w dalszym ci\u0105gu najciekawszym fragmentem wsparcia VirtualThreads w pozostaje rozszerzenie do <code>resteasy-reactive<\/code>, kt\u00f3re zreszt\u0105 nie wyewoluowa\u0142o jako\u015b mocno od czasu oryginalnej publikacji rok temu przy okazji JDK 19. Obrazuje ono zreszt\u0105 bardzo dobrze, jak bardzo defensywnym jest dzisiaj programowanie wsparcia dla sztandarowego dziecka Looma: Zobaczcie zreszt\u0105 sami lekko uproszczony przyk\u0142ad, oryginaln\u0105 klas\u0119 znajdziecie <a href=\"https:\/\/github.com\/quarkusio\/quarkus\/blob\/main\/independent-projects\/resteasy-reactive\/common\/processor\/src\/main\/java\/org\/jboss\/resteasy\/reactive\/common\/processor\/EndpointIndexer.java\">tutaj<\/a>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private boolean isRunOnVirtualThread(MethodInfo info, BlockingDefault defaultValue) {\n    boolean isRunOnVirtualThread = false;\n    (...)\n    Map.Entry&lt;AnnotationTarget, AnnotationInstance&gt; transactional = getInheritableAnnotation(info, TRANSACTIONAL); \n    \n    if (transactional != null) {\n            return false;\n        }\n        \n    if (runOnVirtualThreadAnnotation != null) {\n        if (!JDK_SUPPORTS_VIRTUAL_THREADS) \n        {\n          throw new DeploymentException((...))\n        }\n          \n      if (targetJavaVersion.isJava19OrHigher() == Status.FALSE) {\n         throw new DeploymentException((...))\n        }\n            isRunOnVirtualThread = true;\n   }\n\n   if (defaultValue == BlockingDefault.BLOCKING) {\n        return false;\n   } else if (defaultValue == BlockingDefault.RUN_ON_VIRTUAL_THREAD) {\n            isRunOnVirtualThread = true;\n    } else if (defaultValue == BlockingDefault.NON_BLOCKING) {\n            return false;\n    }\n\n    if (isRunOnVirtualThread &amp;&amp; !isBlocking(info, defaultValue)) {\n         throw new DeploymentException((...))\n    } else if (isRunOnVirtualThread) {\n         return true;\n    }\n\n    return false\n}\n<\/code><\/pre>\n\n\n\n<p>Tak\u017ce je\u017celi kiedykolwiek czuli\u015bcie si\u0119 \u017ale, u\u017cywaj\u0105c masy zagnie\u017cd\u017conych if-\u00f3w, to mam nadzieje, \u017ce widz\u0105 powy\u017csze jest Wam ju\u017c troch\u0119 lepiej.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-0-final-released\/\">Quarkus 3.0, our new major release, is here!<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/smallrye.io\/smallrye-mutiny\/2.0.0\/reference\/migrating-to-mutiny-2\/\">Migrating to Mutiny 2<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"2-amazon-rozpycha-sie-coraz-szerzej-ze-swoim-jdk\" data-num=2>2. Amazon rozpycha si\u0119 coraz szerzej ze swoim JDK<\/h2>\n\n\n\n<p>Ok, to jak ju\u017c mamy zaliczonego najnowszego Quarkusa, czas przygl\u0105dn\u0105\u0107 si\u0119 szerszemu obrazkowi &#8211; ostatnimi tygodniami pojawi\u0142y si\u0119 dwa raporty, kt\u00f3re pr\u00f3buj\u0105 opisa\u0107 nam szerszy obrazek tego, jak na \u015bwiecie wygl\u0105da tworzenie aplikacji Javowych &#8211; <a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2023-04\/new-relic-2023-state-of-the-java-ecosystem-2023-04-20.pdf\">2023 State of the Java Ecosystem<\/a> od New Relic oraz <a href=\"https:\/\/website.vaadin.com\/hubfs\/Whitepapers\/Java%20Survey%20Report%202023%20-%20Vaadin%20Survey.pdf\">2023 State of Java in the Enterprise Report<\/a>, sygnowany logiem Vaadina.<\/p>\n\n\n\n<p>Z g\u00f3ry powiem, \u017ce stwierdzenie ko\u0144cz\u0105cy poprzedni akapit jest tu troch\u0119 tutaj naci\u0105gane, poniewa\u017c oba raporty zosta\u0142y stworzone przez konkretne podmioty i to czu\u0107. Szczeg\u00f3lnie zabawne jest to w wypadku <strong>State of Java in the Enterprise<\/strong> &#8211; podejrzewam, \u017ce dla wi\u0119kszo\u015bci z Was te przegl\u0105dy to jedyne miejsce w sieci, gdzie jeszcze trafiacie na jakiekolwiek \u015blady Vaadina, a Raport przedstawia go jako technologie zdecydowanie wschodz\u0105c\u0105 (przyk\u0142adowo, 34% respondent\u00f3w Vaadin Flow u\u017cywa &#8222;w znacznym stopniu&#8221;). Przynajmniej tw\u00f3rcy si\u0119 z tym nie kryj\u0105 &#8211; w ka\u017cdym mo\u017cliwym miejscu dodaj\u0105 disclaimer, \u017ce badanie by\u0142o przeprowadzone w\u015br\u00f3d marketingowej bazy Vaadina, co z wiadomych powod\u00f3w zaburza sporo wynik\u00f3w.<\/p>\n\n\n\n<p>Zamiast przygl\u0105da\u0107 si\u0119 wi\u0119c na standardowych, tych samych w zasadzie trendach &#8211; jak zwykle coraz wi\u0119ksz\u0105 adopcje maj\u0105 nowe LTSy Javy, widz\u0105c te\u017c sta\u0142\u0105, ci\u0105g\u0142\u0105 adopcje chmury obliczeniowej (cho\u0107 wydaje mi si\u0119, \u017ce \u0142atwo ju\u017c by\u0142o, a sporo aplikacji kt\u00f3re do tej pory do Amazon\u00f3w tego \u015bwiata do tej pory nie trafi\u0142o umrze w firmowych datacenter) &#8211; skupie si\u0119 na najciekawszym fakcie, wynikaj\u0105cym z ka\u017cdego z raport\u00f3w.<\/p>\n\n\n\n<p>Je\u017celi chodzi o raport Vaadina, to on sam w sobie nie jest jako\u015b zbyt rewolucyjny. W dokumencie bardzo du\u017co m\u00f3wi si\u0119 o modernizacji aplikacji, a \u0142\u0105cz\u0105c ze sob\u0105 wnioski z kilku r\u00f3\u017cnych wykres\u00f3w doj\u015b\u0107 mo\u017cna do wniosku, \u017ce wiele firm (i to g\u0142\u00f3wnie w Europie, gdy\u017c zdecydowanie wi\u0119kszo\u015b\u0107 respondent\u00f3w pochodzi ze Starego Kontynentu) coraz powa\u017cniej podchodzi do tematu modernizacji, a najwi\u0119kszym wyzwaniem jest&#8230; UX aplikacji i og\u00f3lnie warstwa frontendowa. Ponownie, ca\u0142o\u015b\u0107 mo\u017ce by\u0107 mocno skrzywiona ze wzgl\u0119du na grup\u0119 badawcz\u0105 (Vaadin zawsze pozycjonowa\u0142 si\u0119 na Framework FullStackowy), ale wida\u0107, \u017ce nawet w przypadku aplikacji wewn\u0119trznych (64% respondent\u00f3w tworzy takowe) sporo nacisku k\u0142adzie si\u0119 dzi\u015b na ten w\u0142a\u015bnie aspekt. Szkoda, \u017ce tw\u00f3rcy nie podzielili si\u0119 Raw Data &#8211; bardzo ch\u0119tnie zobaczy\u0142bym, czy istnieje korelacja min. wielko\u015bci\u0105 firmy a wybieranym frameworkiem frontendowym &#8211; takich w\u0142a\u015bnie krzy\u017cowych zestawie\u0144 mi najbardziej zabrak\u0142o.<\/p>\n\n\n\n<p>Ale przyznam, \u017ce tego Vaadina to przedstawi\u0142em Wam tak bardziej dla kompletno\u015bci. O wiele ciekawiej prezentuje si\u0119 bowiem <a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2023-04\/new-relic-2023-state-of-the-java-ecosystem-2023-04-20.pdf\"><strong>State of the Java Ecosystem<\/strong><\/a> New Relica. Oczywi\u015bcie, posiada on wi\u0119kszo\u015b\u0107 wad swojego poprzednika &#8211; New Relic to us\u0142uga pomagaj\u0105ca w telemetrii aplikacji, dlatego to w\u0142a\u015bnie w oparciu o dane zbierane przez u\u017cytkownik\u00f3w produktu powsta\u0142 dokument. Prawdopodobnie nie oddaje to ca\u0142ego ekosystemu, jak raczy\u0142by sugerowa\u0107 tytu\u0142. Z tym jednak przychodzi pewien interesuj\u0105cy twist &#8211; zamiast danych deklaratywnych, zebranych z pomoc\u0105 ankiety, mamy tutaj do czynienia z realnymi warto\u015bciami produkcyjnymi. Nie dowiemy si\u0119 wi\u0119c nic o planach i wyzwaniach (jak to by\u0142o w wypadku Vaadina), ale mo\u017cemy pozna\u0107 sporo szczeg\u00f3\u0142\u00f3w &#8222;bliskich maszyny&#8221;.<\/p>\n\n\n\n<p>St\u0105d te\u017c raport New Relica to przede wszystkim technikalia, ale po to pewnie tutaj wchodzicie, prawda? Bardzo du\u017co miejsca po\u015bwi\u0119cono min. konteneryzacji, kt\u00f3ra staje si\u0119 powoli standardem je\u015bli chodzi o spos\u00f3b releasowania javowych aplikacji, a w raporcie znajdziemy sporo interesuj\u0105cych detali jak ilo\u015b\u0107 u\u017cytych procesor\u00f3w czy pami\u0119ci (TLDR: sprawd\u017acie swoje ustawienia Waszych kontener\u00f3w, bo <a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2023-04\/new-relic-2023-state-of-the-java-ecosystem-2023-04-20.pdf\">dane pokazuj\u0105, \u017ce sporo programist\u00f3w ma z\u0142e ustawienia<\/a>. To co jednak najbardziej przyci\u0105ga wzrok, to wykres u\u017cycia konkretnych wersji JDK. Tutaj bowiem wyniki, zw\u0142aszcza w por\u00f3wnaniu do roku 2022 s\u0105&#8230; interesuj\u0105ce:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-1024x580.png\" alt=\"\" class=\"wp-image-15869\" width=\"512\" height=\"290\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-1024x580.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-300x170.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-768x435.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image.png 1296w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure><\/div>\n\n\n<p>Oczywi\u015bcie, wyniki z pewno\u015bci\u0105 s\u0105 w jakim\u015b stopniu zbiasowane ze wzgl\u0119du na baz\u0119 u\u017cytkownik\u00f3w New Relica, ale trend jest wyra\u017any &#8211; coraz wi\u0119cej os\u00f3b wybiera w\u0142a\u015bnie Amazonowe Corretto jako swoje produkcyjne JDK. O ile wi\u0119kszo\u015b\u0107 JDK jest do siebie do\u015b\u0107 podobne, Corretto to runtime z dodatkowymi &#8222;twistami&#8221; &#8211; przyk\u0142adowo, jest ono dodatkowo zoptymalizowane pod k\u0105tem dzia\u0142ania na procesorach ARM (a zw\u0142aszcza AWS-owego ). Jako jedyne wspiera r\u00f3wnie\u017c SnapStart, czyli og\u0142oszon\u0105 w zesz\u0142ym roku metod\u0119 redukcji Cold Startu funkcji Serverless. Dla tych, kt\u00f3rzy takowego nie kojarz\u0105, ze wzgl\u0119du na ilo\u015b\u0107 niuans\u00f3w polecam lektur\u0119 nieco szerszego opracowania tematu <a href=\"https:\/\/vived.substack.com\/p\/the-road-to-aws-lambda-snapstart\">w jednej z naszych poprzednich edycji<\/a>. I cho\u0107 nie znam za wielu przypadk\u00f3w u\u017cycia Corretto poza AWS-em, to jednak wida\u0107, \u017ce inwestycje dostawc\u00f3w chmurowych we w\u0142asne JDK wydaj\u0105 si\u0119 mie\u0107 dla nich sens, tak\u017ce dzi\u0119ki mo\u017cliwo\u015bci zaproponowania dodatkowych innowacji.<\/p>\n\n\n\n<p>A mo\u017cliwe, \u017ce Corretto tylko b\u0119dzie zyskiwa\u0107 na popularno\u015bci, AWS bowiem nie zaprzestaje inwestycji we wsparcie Javy w swojej chmurze. W zesz\u0142ym tygodniu pojawi\u0142o si\u0119 du\u017ce og\u0142oszenie dotycz\u0105ce AWS Lambda &#8211; <a href=\"https:\/\/aws.amazon.com\/blogs\/compute\/java-17-runtime-now-available-on-aws-lambda\/\">us\u0142uga Serverless Amazonu doczeka\u0142a si\u0119 bowiem wsparcia najnowszego LTS, czyli JDK 17<\/a>. Jak \u0142atwo si\u0119 domy\u015ble\u0107, ca\u0142o\u015b\u0107 nap\u0119dza w\u0142a\u015bnie Corretto. &#8222;Natywne&#8221; wsparcie najnowszego LTS-a oznacza te\u017c, \u017ce mo\u017cna b\u0119dzie wreszcie u\u017cywa\u0107 z t\u0105 wersj\u0105 AWS SnapStart wraz z now\u0105 Jav\u0105.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-1.png\" alt=\"\" class=\"wp-image-15871\" width=\"420\" height=\"380\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-1.png 840w, https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-1-300x271.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-1-768x695.png 768w\" sizes=\"auto, (max-width: 420px) 100vw, 420px\" \/><figcaption class=\"wp-element-caption\">I to bez potrzeby u\u017cywania pewnych hmmm&#8230; niekonwencjonalnych rozwi\u0105za\u0144<\/figcaption><\/figure><\/div>\n\n\n<p>A je\u015bli jeste\u015bcie podcastowi, ciekaw\u0105 dyskusje na temat Javy w Amazonie znajdziecie <a href=\"https:\/\/airhacks.fm\/#episode_240\">w ostatnim odcinku airhacks.fm<\/a> <a href=\"https:\/\/twitter.com\/AdamBien\">Adama Biena<\/a>, w kt\u00f3rym go\u015bci\u0142 on <a href=\"https:\/\/twitter.com\/maschnetwork\">Maximiliana Schellhorna<\/a>, Soultion Architecta zajmuj\u0105cego si\u0119 w\u0142a\u015bnie Java Serverless w AWS.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u017br\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2023-04\/new-relic-2023-state-of-the-java-ecosystem-2023-04-20.pdf\">State of the Java Ecosystem<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/website.vaadin.com\/hubfs\/Whitepapers\/Java%20Survey%20Report%202023%20-%20Vaadin%20Survey.pdf\">State of Java in the Enterprise<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/vived.substack.com\/p\/the-road-to-aws-lambda-snapstart\">The road to AWS Lambda SnapStart &#8211; guide through the years of JVM &#8222;cold start&#8221; tinkering &#8211; JVM Weekly #24<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/aws.amazon.com\/blogs\/compute\/java-17-runtime-now-available-on-aws-lambda\/\">AWS Lambda now supports Java 17<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/airhacks.fm\/#episode_240\">Podcast airhacks.fm: Serverless Java (17) on AWS<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"3-rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing\" data-num=3>3. Rzut oka pod mask\u0119 Javy &#8211; Dynamiczni Agenci i &#8222;tearing&#8221;<\/h2>\n\n\n\n<p>Tydzie\u0144 temu, pisz\u0105c o zatwierdzonych JEP-ach obieca\u0142em Wam, \u017ce do tematu wr\u00f3cimy w kolejnej edycji. Zgodnie z zapowiedzi\u0105, przygl\u0105dnijmy si\u0119 teraz <a href=\"https:\/\/openjdk.org\/jeps\/8306275\">Prepare to Restrict The Dynamic Loading of Agents<\/a>, kt\u00f3re niedawno zosta\u0142o opublikowane jako JEP Draft. Dokument ten proponuje zmiany w sposobie \u0142adowania Agent\u00f3w Java do ju\u017c dzia\u0142aj\u0105cej JVM w celu zapewnienia lepszego bezpiecze\u0144stwa. Ju\u017c nied\u0142ugo b\u0119dzie si\u0119 to ko\u0144czy\u0142o komunikatem z ostrze\u017ceniem. D\u0142ugoterminowym celem jest jednak przygotowanie spo\u0142eczno\u015bci na przysz\u0142e wydania JDK, kt\u00f3re domy\u015blnie wy\u0142\u0105cz\u0105 \u0142adowanie agent\u00f3w do dzia\u0142aj\u0105cej JVM.<\/p>\n\n\n\n<p>Agenci Java to komponenty, kt\u00f3re mog\u0105 modyfikowa\u0107 kod aplikacji podczas jej dzia\u0142ania, wykorzystywane przede wszystkim do profilowania i monitorowania (to w\u0142a\u015bnie z ich Agenta pochodz\u0105 dane, kt\u00f3re prezentowa\u0142 Raport New Relica z poprzedniej sekcji). Zosta\u0142y wprowadzone w Javie 5, i mog\u0105 by\u0107 tworzone za pomoc\u0105 API <code>java.lang.instrument<\/code> lub <strong>JVM Tool Interface<\/strong>. Przez lata instrumentacja JVM by\u0142a rozwijana min. dzi\u0119ki Attach API, wprowadzone w JDK 6, pozwala narz\u0119dziom w\u0142a\u015bnie na pod\u0142\u0105czenie si\u0119 do dzia\u0142aj\u0105cej JVM. Niekt\u00f3re narz\u0119dzia u\u017cywaj\u0105 Attach API do w\u0142a\u015bnie dynamicznego \u0142adowania agent\u00f3w.<\/p>\n\n\n\n<p>W JDK 21 dynamiczne \u0142adowanie agent\u00f3w b\u0119dzie nadal dozwolone, ale pojawi si\u0119 wspomniane ostrze\u017cenie. Aby go, u\u017cytkownicy musz\u0105 przekaza\u0107 <code>-XX:+EnableDynamicAgentLoading<\/code> w linii polece\u0144. W przysz\u0142ych wydaniach, dynamiczne \u0142adowanie agent\u00f3w b\u0119dzie domy\u015blnie zabronione i zako\u0144czy si\u0119 b\u0142\u0119dem, je\u015bli pr\u00f3ba zostanie podj\u0119ta bez tej w\u0142a\u015bnie opcji. \u017badne zmiany nie s\u0105 r\u00f3wnocze\u015bnie planowane wobec narz\u0119dzi, kt\u00f3re \u0142aduj\u0105 agent\u00f3w podczas uruchamiania maszyny wirtualnej lub u\u017cywaj\u0105 Attach API do cel\u00f3w innych ni\u017c \u0142adowanie agent\u00f3w lub biblioteki .<\/p>\n\n\n\n<p>A jak ju\u017c jeste\u015bmy przy tekstach przedstawiaj\u0105cych proces decyzyjny za konkretnymi fragmentami J\u0119zyka, to nie M\u00f3g\u0142bym sobie odm\u00f3wi\u0107 podzielenia si\u0119 z Wami <a href=\"https:\/\/mail.openjdk.org\/pipermail\/valhalla-spec-experts\/2023-April\/002262.html\">On atomicity and tearing<\/a>, autorstwa Briana Goetza. Ten pochodz\u0105cy z listy mailingowej Javy wyw\u00f3d omawia atomowo\u015b\u0107, nieatomowo\u015b\u0107 i tak zwany tearing (rozdarcie) w kontek\u015bcie Projektu Valhalla w Javie, kt\u00f3ry ma na celu umo\u017cliwienie &#8222;sp\u0142aszczenie&#8221; sposob\u00f3w przechowywania obiekt\u00f3w na stercie.<\/p>\n\n\n\n<p>Tearing odnosi si\u0119 do instancji, w kt\u00f3rej warto\u015b\u0107 jest odczytywana lub zapisywana w cz\u0119\u015bciach, powoduj\u0105c niesp\u00f3jno\u015b\u0107 w odczytywanych warto\u015bciach &#8211; w tek\u015bcie przywo\u0142ywany jest przyk\u0142ad przechowywania w pami\u0119ci liczby 64-bitowej jako dwie warto\u015bci 32-bitowe. Z tego wzgl\u0119du przy dost\u0119pie do nich w rzadkim przypadku mo\u017ce wyst\u0105pi\u0107 tak zwany &#8222;race condition&#8221;. Jest to kompromis osi\u0105gni\u0119ty w celu zapewnienia dobrej wydajno\u015bci dla operacji numerycznych w czasach, gdy zmienne 64-bitowe nie by\u0142y jeszcze wydajnie obs\u0142ugiwane przez procesory.<\/p>\n\n\n\n<p>Teraz problem wraca w kontek\u015bcie innych typ\u00f3w danych &#8211; cz\u0119sto znacznie wi\u0119kszych ni\u017c 64-bity &#8211; kt\u00f3re w wypadku Valhalli r\u00f3wnie\u017c mog\u0105 podlega\u0107 &#8222;rozrywaniu&#8221;.<\/p>\n\n\n\n<p>Tekst przedstawia trzy wybory dla Valhalli dotycz\u0105ce podej\u015bcia do tego problem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Nigdy nie zezwalaj na &#8222;rozrywanie&#8221; warto\u015bci, jak w int.<\/li>\n\n\n\n<li>Zawsze zezwalaj na &#8222;rozrywanie&#8221; warto\u015bci w czasie race-condition, podobnie jak w przypadku long.<\/li>\n\n\n\n<li>Stworzy\u0107 rozwi\u0105zanie, kt\u00f3re pozwoli programi\u015bcie wybra\u0107 strategie<\/li>\n<\/ul>\n\n\n\n<p>Najbezpieczniejszym wyborem jest nigdy nie zezwalanie na rozdarcie, ale to ograniczy\u0142oby cele Valhalli. Goetz sugeruje wi\u0119c w tek\u015bcie sugeruje, \u017ce autorzy klas powinni dokona\u0107 kompromisu mi\u0119dzy atomowo\u015bci\u0105, a efektywnym sp\u0142aszczaniem obiekt\u00f3w sterty podczas projektowania Value Class, nawet je\u015bli powodowa\u0107 to b\u0119dzie docelowo problemy w przypadku wyst\u0105pienia Race Condition. Argumentuje, \u017ce te ostatnie i tak powinny by\u0107 unikane, bo ich wyniki nigdy z za\u0142o\u017cenia nie b\u0119dzie deterministyczny, a ograniczanie Valhalli w celu przygotowanie si\u0119 na tego typu przypadki brzegowe jest troch\u0119 walk\u0105 z wiatrakami.<\/p>\n\n\n\n<p>Jakie s\u0105 w tym wnioski dla Was, jako u\u017cytkownik\u00f3w ko\u0144cowych Javy? Wielu nie mam, ale zawsze uwa\u017ca\u0142em, \u017ce \u015bwiadomo\u015b\u0107 tego, jak bardzo skomplikowan\u0105 maszyneri\u0105 jest JVM i ile rzeczy trzeba wzi\u0105\u0107 pod uwag\u0119 przy jej ewolucji buduje empati\u0119 &#8211; szczeg\u00f3lnie jak (podobnie jak ja) nale\u017cycie do \u015bmieszk\u00f3w, kt\u00f3rzy regularnie sobie \u017cartuj\u0105 z ci\u0105g\u0142ych op\u00f3\u017anie\u0144 Valhalli.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-3-969x1024.png\" alt=\"\" class=\"wp-image-15877\" width=\"485\" height=\"512\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-3-969x1024.png 969w, https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-3-284x300.png 284w, https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-3-768x812.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-3-1453x1536.png 1453w, https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-3.png 1548w\" sizes=\"auto, (max-width: 485px) 100vw, 485px\" \/><figcaption class=\"wp-element-caption\">Musia\u0142em <\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8306275\">JEP draft: Prepare to Restrict The Dynamic Loading of Agents<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/valhalla-spec-experts\/2023-April\/002262.html\">On atomicity and tearing<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>A na koniec, ma\u0142y bonus. Przy okazji relacji z Keynote KotlinConf (notabene, <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2023\/05\/kotlinconf-2023-recordings\/\">pojawi\u0142y si\u0119 obiecane nagrania<\/a>) narzeka\u0142em, \u017ce przy promocji zupe\u0142nie zapomniano o maskotce Kotlina. Myli\u0142em si\u0119 bardzo &#8211; nie tylko <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2023\/04\/the-kotlin-mascot-returns\/\">s\u0142odziak wraca<\/a>, ale jeszcze dosta\u0142 imi\u0119 &#8211; od teraz zwie si\u0119 Kodee!<\/p>\n\n\n\n<p>Jego design przeszed\u0142 lekki lifting, dosta\u0142 te\u017c nowych kolor\u00f3w zgodnych z brandingiem samego Kotlina, ale pozosta\u0142 jedn\u0105 z moich ulubionych bran\u017cowych maskotek. Nie straci\u0142 te\u017c nic ze swojej ekspresyjno\u015bci, za to zyska\u0142 sporo nowych &#8222;reakcji&#8221;. Zobaczcie zreszt\u0105 sami:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/DSGN-16174-Blog-post-banner-and-promo-materials-for-post-about-Kotlin-mascot_4-copy.png\" alt=\"\" width=\"480\" height=\"570\"\/><\/figure><\/div>\n\n\n<p>Mam nadzieje, \u017ce b\u0119dzie go w komunikacji oko\u0142o-kotlinowej tylko coraz wi\u0119cej.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>A jak ju\u017c wr\u00f3ci\u0142 temat KotlinConf &#8211; sta\u0142em si\u0119 cz\u0142onkiem kapitu\u0142y Krak\u00f3w Kotlin User Group, kt\u00f3ra reaktywuje si\u0119 po prawie dw\u00f3ch latach nieobecno\u015bci. <a href=\"https:\/\/www.meetup.com\/krakow-kotlin\/events\/293119986\/\">Pierwsze po tej d\u0142ugiej przerwie spotkanie<\/a> odb\u0119dzie si\u0119 17 maja, a motywem przewodnim b\u0119dzie w\u0142a\u015bnie Keynote KotlinConf. Ogl\u0105dniemy go sobie razem, aby nast\u0119pnie odda\u0107 si\u0119 przy procentach dyskusji na temat implikacji dla przysz\u0142o\u015bci j\u0119zyka.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"337\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-2.png\" alt=\"\" class=\"wp-image-15873\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-2.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-2-300x169.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/figure><\/div>\n\n\n<p>Wi\u0119c je\u015bli macie ochot\u0119 wpa\u015b\u0107 do Krakowa, pozna\u0107 si\u0119 &#8222;w realu&#8221; i wypi\u0107 razem piwo, b\u0119dzie to \u015bwietna ku temu okazja \ud83e\udd1f.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"281\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/giphy-downsized-5.gif\" alt=\"\" class=\"wp-image-15875\"\/><figcaption class=\"wp-element-caption\">My treat!<\/figcaption><\/figure><\/div>","protected":false},"excerpt":{"rendered":"<p>W dzisiejszej edycji d\u0142ugo oczekiwana premiera Quarkusa, aktualizacja AWS Lambda, a tak\u017ce JEP oraz mailing prezentuj\u0105ce pewne ma\u0142o znane detale Javy.<\/p>\n","protected":false},"author":10,"featured_media":15880,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259,1],"tags":[],"class_list":["post-15868","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl","category-no-category"],"acf":{"estimated_reading_time":"13","feature_image_blog":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/JVM-Weekly-1200x628_V2.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>Rzut oka pod mask\u0119 Javy: Dynamiczni Agenci i &quot;tearing&quot; - JVM Weekly vol. 134 - 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\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rzut oka pod mask\u0119 Javy: Dynamiczni Agenci i &quot;tearing&quot; - JVM Weekly vol. 134 - Vived\" \/>\n<meta property=\"og:description\" content=\"W dzisiejszej edycji d\u0142ugo oczekiwana premiera Quarkusa, aktualizacja AWS Lambda, a tak\u017ce JEP oraz mailing prezentuj\u0105ce pewne ma\u0142o znane detale Javy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-05T08:11:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-05T10:03:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/JVM-Weekly-1200x628_V2.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\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Rzut oka pod mask\u0119 Javy: Dynamiczni Agenci i &#8222;tearing&#8221; &#8211; JVM Weekly vol. 134\",\"datePublished\":\"2023-05-05T08:11:04+00:00\",\"dateModified\":\"2023-05-05T10:03:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/\"},\"wordCount\":2622,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/JVM-Weekly-1200x628_V2.png\",\"articleSection\":[\"JVM\",\"No category\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/\",\"url\":\"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/\",\"name\":\"Rzut oka pod mask\u0119 Javy: Dynamiczni Agenci i \\\"tearing\\\" - JVM Weekly vol. 134 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/JVM-Weekly-1200x628_V2.png\",\"datePublished\":\"2023-05-05T08:11:04+00:00\",\"dateModified\":\"2023-05-05T10:03:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/JVM-Weekly-1200x628_V2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/JVM-Weekly-1200x628_V2.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rzut oka pod mask\u0119 Javy: Dynamiczni Agenci i &#8222;tearing&#8221; &#8211; JVM Weekly vol. 134\"}]},{\"@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":"Rzut oka pod mask\u0119 Javy: Dynamiczni Agenci i \"tearing\" - JVM Weekly vol. 134 - 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\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/","og_locale":"pl_PL","og_type":"article","og_title":"Rzut oka pod mask\u0119 Javy: Dynamiczni Agenci i \"tearing\" - JVM Weekly vol. 134 - Vived","og_description":"W dzisiejszej edycji d\u0142ugo oczekiwana premiera Quarkusa, aktualizacja AWS Lambda, a tak\u017ce JEP oraz mailing prezentuj\u0105ce pewne ma\u0142o znane detale Javy.","og_url":"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/","og_site_name":"Vived","article_published_time":"2023-05-05T08:11:04+00:00","article_modified_time":"2023-05-05T10:03:06+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/JVM-Weekly-1200x628_V2.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\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Rzut oka pod mask\u0119 Javy: Dynamiczni Agenci i &#8222;tearing&#8221; &#8211; JVM Weekly vol. 134","datePublished":"2023-05-05T08:11:04+00:00","dateModified":"2023-05-05T10:03:06+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/"},"wordCount":2622,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/JVM-Weekly-1200x628_V2.png","articleSection":["JVM","No category"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/","url":"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/","name":"Rzut oka pod mask\u0119 Javy: Dynamiczni Agenci i \"tearing\" - JVM Weekly vol. 134 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/JVM-Weekly-1200x628_V2.png","datePublished":"2023-05-05T08:11:04+00:00","dateModified":"2023-05-05T10:03:06+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/JVM-Weekly-1200x628_V2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/JVM-Weekly-1200x628_V2.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/rzut-oka-pod-maske-javy-dynamiczni-agenci-i-tearing-jvm-weekly-vol-134\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Rzut oka pod mask\u0119 Javy: Dynamiczni Agenci i &#8222;tearing&#8221; &#8211; JVM Weekly vol. 134"}]},{"@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\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">1. Quarkus dostaje wydanie 3.0<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">1. Quarkus dostaje wydanie 3.0<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Uwielbiam Quarkusa i ca\u0142\u0105 stoj\u0105c\u0105 za nim filozofi\u0119 opart\u0105 o stworzenie nie tylko samego (wydajnego) frameworki, ale r\u00f3wnie\u017c zestawu narz\u0119dzi, kt\u00f3ry pozwoli na jego efektywne u\u017cycie. W \u015bwiecie, gdzie Spring Boot ma (zas\u0142u\u017cenie, AD 2023 to te\u017c \u015bwietny framework jest) dominuj\u0105c\u0105 pozycj\u0119, mi\u0142o widzie\u0107 realn\u0105 konkurencje, kt\u00f3ra wybra\u0142a sobie swoj\u0105 nisz\u0119 i si\u0119 w niej rozpycha (aplikacje strikte Cloud Native, \u0142\u0105cznie z funkcjami serverless, w kt\u00f3rych wsparciu akurat bije javowego Goliata). Jako, \u017ce historycznie mia\u0142em te\u017c sporo do\u015bwiadczenia z platform\u0105 Java EE, w dalszym ci\u0105gu ci\u0119\u017cko mi uwierzy\u0107, jak wiele pracy wykonano, by pozby\u0107 si\u0119 z\u0142ej s\u0142awy standardu, a RedHat z pewno\u015bci\u0105 do\u0142o\u017cy\u0142 do tego cegie\u0142k\u0119. Dlatego te\u017c na <a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-0-final-released\/\">Quarkus 3.0<\/a> czeka\u0142em z niecierpliwo\u015bci\u0105, poniewa\u017c poza standardowymi zmianami, zgodnymi z kierunkiem w kt\u00f3rym idzie ca\u0142y ekosystem (Jakarta EE 10, MicroProfile 6.0, Hibernate 6.0 i Reactive czy zapowied\u017a porzucenia wsparcia dla JDK 11) dok\u0142ada on kilka swoich w\u0142asnych, unikalnych smaczk\u00f3w.<\/p>\n","innerContent":["\n<p>Uwielbiam Quarkusa i ca\u0142\u0105 stoj\u0105c\u0105 za nim filozofi\u0119 opart\u0105 o stworzenie nie tylko samego (wydajnego) frameworki, ale r\u00f3wnie\u017c zestawu narz\u0119dzi, kt\u00f3ry pozwoli na jego efektywne u\u017cycie. W \u015bwiecie, gdzie Spring Boot ma (zas\u0142u\u017cenie, AD 2023 to te\u017c \u015bwietny framework jest) dominuj\u0105c\u0105 pozycj\u0119, mi\u0142o widzie\u0107 realn\u0105 konkurencje, kt\u00f3ra wybra\u0142a sobie swoj\u0105 nisz\u0119 i si\u0119 w niej rozpycha (aplikacje strikte Cloud Native, \u0142\u0105cznie z funkcjami serverless, w kt\u00f3rych wsparciu akurat bije javowego Goliata). Jako, \u017ce historycznie mia\u0142em te\u017c sporo do\u015bwiadczenia z platform\u0105 Java EE, w dalszym ci\u0105gu ci\u0119\u017cko mi uwierzy\u0107, jak wiele pracy wykonano, by pozby\u0107 si\u0119 z\u0142ej s\u0142awy standardu, a RedHat z pewno\u015bci\u0105 do\u0142o\u017cy\u0142 do tego cegie\u0142k\u0119. Dlatego te\u017c na <a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-0-final-released\/\">Quarkus 3.0<\/a> czeka\u0142em z niecierpliwo\u015bci\u0105, poniewa\u017c poza standardowymi zmianami, zgodnymi z kierunkiem w kt\u00f3rym idzie ca\u0142y ekosystem (Jakarta EE 10, MicroProfile 6.0, Hibernate 6.0 i Reactive czy zapowied\u017a porzucenia wsparcia dla JDK 11) dok\u0142ada on kilka swoich w\u0142asnych, unikalnych smaczk\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/dev-ui.gif\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/dev-ui.gif\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zacznijmy od Dev UI, kt\u00f3re z jednej strony pokazuje pewne korzenie Quarkusa - tego typu cude\u0144ka to raczej zawsze by\u0142y domen\u0105 serwer\u00f3w aplikacyjnych, z drugiej za\u015b uzmys\u0142awia, jak wiele dobrych pomys\u0142\u00f3w istnia\u0142o w takich wydawa\u0142oby si\u0119 antycznych ju\u017c rozwi\u0105zaniach - do\u015b\u0107 wymieni\u0107 panel do zmienianie opcji konfiguracyjnych czy zarz\u0105dzaniu rozszerzeniami. I oczywi\u015bcie, Dev UI pojawi\u0142o si\u0119 ju\u017c przy okazji Quarkusa 2.0, ale teraz zosta\u0142o znacznie rozbudowane i wygodniejsze w obs\u0142udze. Maj\u0105cy do\u015bwiadczenie z rozwi\u0105zaniami frontendowymi szybko rozpoznaj\u0105 te\u017c drugiego rodzica tego rozwi\u0105zania - dzi\u0119ki temu, \u017ce Quarkus mo\u017cna uruchomi\u0107 w tak zwanym Dev Mode, dost\u0119pne s\u0105 takie featury jak Continouse Testing (uwierzcie mi, it makes a difference). I oczywi\u015bcie nie jest tak, \u017ce Quarkus jako jedyny posiada takie mo\u017cliwo\u015bci, ale jest to jedyny z popularnych framework\u00f3w, kt\u00f3ry traktuje je jako obywateli pierwszej kategorii, a nie jako dodatek - i to czu\u0107.<\/p>\n","innerContent":["\n<p>Zacznijmy od Dev UI, kt\u00f3re z jednej strony pokazuje pewne korzenie Quarkusa - tego typu cude\u0144ka to raczej zawsze by\u0142y domen\u0105 serwer\u00f3w aplikacyjnych, z drugiej za\u015b uzmys\u0142awia, jak wiele dobrych pomys\u0142\u00f3w istnia\u0142o w takich wydawa\u0142oby si\u0119 antycznych ju\u017c rozwi\u0105zaniach - do\u015b\u0107 wymieni\u0107 panel do zmienianie opcji konfiguracyjnych czy zarz\u0105dzaniu rozszerzeniami. I oczywi\u015bcie, Dev UI pojawi\u0142o si\u0119 ju\u017c przy okazji Quarkusa 2.0, ale teraz zosta\u0142o znacznie rozbudowane i wygodniejsze w obs\u0142udze. Maj\u0105cy do\u015bwiadczenie z rozwi\u0105zaniami frontendowymi szybko rozpoznaj\u0105 te\u017c drugiego rodzica tego rozwi\u0105zania - dzi\u0119ki temu, \u017ce Quarkus mo\u017cna uruchomi\u0107 w tak zwanym Dev Mode, dost\u0119pne s\u0105 takie featury jak Continouse Testing (uwierzcie mi, it makes a difference). I oczywi\u015bcie nie jest tak, \u017ce Quarkus jako jedyny posiada takie mo\u017cliwo\u015bci, ale jest to jedyny z popularnych framework\u00f3w, kt\u00f3ry traktuje je jako obywateli pierwszej kategorii, a nie jako dodatek - i to czu\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Niezwykle interesuj\u0105c\u0105 zmian\u0105 jest te\u017c wprowadzenie Mutiny2. Mutiny to biblioteka Java opracowana przez zesp\u00f3\u0142 Quarkus w celu uproszczenia implementacji programowania reaktywnego i asynchronicznego. Jak to bywa w wypadku projekt\u00f3w Quarkusa, zosta\u0142a zaprojektowana tak, aby by\u0142 intuicyjne i proste podej\u015bcie do pisania kodu reaktywnego w por\u00f3wnaniu do innych bibliotek, takich jak RxJava i Project Reactor. Mutiny podobnie jak wymienione przed chwil\u0105 projekty jest implementacj\u0105 Reactive Streams. Dla tych kt\u00f3rzy mog\u0105 nie kojarzy\u0107, Reactive Streams API jest standardem dla asynchronicznego, nieblokuj\u0105cego i \u015bwiadomego backpressure przetwarzania strumieni danych w Javie, promuj\u0105c interoperacyjno\u015b\u0107 w\u015br\u00f3d bibliotek i framework\u00f3w programowania reaktywnego. W okolicach JDK 9 by\u0142 to jeden z najg\u0142o\u015bniejszych temat\u00f3w w ca\u0142ym JDK, ale jako \u017ce hype na programowanie reaktywne nieco ju\u017c min\u0105\u0142, przesta\u0142y si\u0119 te\u017c jak grzyby po deszczu pojawia\u0107 kolejne implementacji. Dlatego te\u017c Mutiny <a href=\"https:\/\/smallrye.io\/smallrye-mutiny\/2.0.0\/reference\/migrating-to-mutiny-2\/\">postanowi\u0142o odpu\u015bci\u0107 sobie \"do abstrakcji\" Reactive Streams<\/a>, a zamiast tego u\u017cy\u0107 po prostu referencyjnej wersji z JDK - <code>java.util.concurrent.Flow<\/code>. Jest to chyba pewne symboliczne domkni\u0119cie pewnej epoki.<\/p>\n","innerContent":["\n<p>Niezwykle interesuj\u0105c\u0105 zmian\u0105 jest te\u017c wprowadzenie Mutiny2. Mutiny to biblioteka Java opracowana przez zesp\u00f3\u0142 Quarkus w celu uproszczenia implementacji programowania reaktywnego i asynchronicznego. Jak to bywa w wypadku projekt\u00f3w Quarkusa, zosta\u0142a zaprojektowana tak, aby by\u0142 intuicyjne i proste podej\u015bcie do pisania kodu reaktywnego w por\u00f3wnaniu do innych bibliotek, takich jak RxJava i Project Reactor. Mutiny podobnie jak wymienione przed chwil\u0105 projekty jest implementacj\u0105 Reactive Streams. Dla tych kt\u00f3rzy mog\u0105 nie kojarzy\u0107, Reactive Streams API jest standardem dla asynchronicznego, nieblokuj\u0105cego i \u015bwiadomego backpressure przetwarzania strumieni danych w Javie, promuj\u0105c interoperacyjno\u015b\u0107 w\u015br\u00f3d bibliotek i framework\u00f3w programowania reaktywnego. W okolicach JDK 9 by\u0142 to jeden z najg\u0142o\u015bniejszych temat\u00f3w w ca\u0142ym JDK, ale jako \u017ce hype na programowanie reaktywne nieco ju\u017c min\u0105\u0142, przesta\u0142y si\u0119 te\u017c jak grzyby po deszczu pojawia\u0107 kolejne implementacji. Dlatego te\u017c Mutiny <a href=\"https:\/\/smallrye.io\/smallrye-mutiny\/2.0.0\/reference\/migrating-to-mutiny-2\/\">postanowi\u0142o odpu\u015bci\u0107 sobie \"do abstrakcji\" Reactive Streams<\/a>, a zamiast tego u\u017cy\u0107 po prostu referencyjnej wersji z JDK - <code>java.util.concurrent.Flow<\/code>. Jest to chyba pewne symboliczne domkni\u0119cie pewnej epoki.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Czego mi jednak zabrak\u0142o? Mia\u0142em nadzieje, \u017ce dostaniemy jakie\u015b szersze wsparcie wirtualnych w\u0105tk\u00f3w, kt\u00f3re by\u0142o wspomniane w momencie og\u0142oszenia prac nad wersj\u0105 3.0. Zrobi\u0142em sobie ma\u0142e review kodu i na ten moment w dalszym ci\u0105gu najciekawszym fragmentem wsparcia VirtualThreads w pozostaje rozszerzenie do <code>resteasy-reactive<\/code>, kt\u00f3re zreszt\u0105 nie wyewoluowa\u0142o jako\u015b mocno od czasu oryginalnej publikacji rok temu przy okazji JDK 19. Obrazuje ono zreszt\u0105 bardzo dobrze, jak bardzo defensywnym jest dzisiaj programowanie wsparcia dla sztandarowego dziecka Looma: Zobaczcie zreszt\u0105 sami lekko uproszczony przyk\u0142ad, oryginaln\u0105 klas\u0119 znajdziecie <a href=\"https:\/\/github.com\/quarkusio\/quarkus\/blob\/main\/independent-projects\/resteasy-reactive\/common\/processor\/src\/main\/java\/org\/jboss\/resteasy\/reactive\/common\/processor\/EndpointIndexer.java\">tutaj<\/a>:<\/p>\n","innerContent":["\n<p>Czego mi jednak zabrak\u0142o? Mia\u0142em nadzieje, \u017ce dostaniemy jakie\u015b szersze wsparcie wirtualnych w\u0105tk\u00f3w, kt\u00f3re by\u0142o wspomniane w momencie og\u0142oszenia prac nad wersj\u0105 3.0. Zrobi\u0142em sobie ma\u0142e review kodu i na ten moment w dalszym ci\u0105gu najciekawszym fragmentem wsparcia VirtualThreads w pozostaje rozszerzenie do <code>resteasy-reactive<\/code>, kt\u00f3re zreszt\u0105 nie wyewoluowa\u0142o jako\u015b mocno od czasu oryginalnej publikacji rok temu przy okazji JDK 19. Obrazuje ono zreszt\u0105 bardzo dobrze, jak bardzo defensywnym jest dzisiaj programowanie wsparcia dla sztandarowego dziecka Looma: Zobaczcie zreszt\u0105 sami lekko uproszczony przyk\u0142ad, oryginaln\u0105 klas\u0119 znajdziecie <a href=\"https:\/\/github.com\/quarkusio\/quarkus\/blob\/main\/independent-projects\/resteasy-reactive\/common\/processor\/src\/main\/java\/org\/jboss\/resteasy\/reactive\/common\/processor\/EndpointIndexer.java\">tutaj<\/a>:<\/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>private boolean isRunOnVirtualThread(MethodInfo info, BlockingDefault defaultValue) {\n    boolean isRunOnVirtualThread = false;\n    (...)\n    Map.Entry&lt;AnnotationTarget, AnnotationInstance&gt; transactional = getInheritableAnnotation(info, TRANSACTIONAL); \n    \n    if (transactional != null) {\n            return false;\n        }\n        \n    if (runOnVirtualThreadAnnotation != null) {\n        if (!JDK_SUPPORTS_VIRTUAL_THREADS) \n        {\n          throw new DeploymentException((...))\n        }\n          \n      if (targetJavaVersion.isJava19OrHigher() == Status.FALSE) {\n         throw new DeploymentException((...))\n        }\n            isRunOnVirtualThread = true;\n   }\n\n   if (defaultValue == BlockingDefault.BLOCKING) {\n        return false;\n   } else if (defaultValue == BlockingDefault.RUN_ON_VIRTUAL_THREAD) {\n            isRunOnVirtualThread = true;\n    } else if (defaultValue == BlockingDefault.NON_BLOCKING) {\n            return false;\n    }\n\n    if (isRunOnVirtualThread &amp;&amp; !isBlocking(info, defaultValue)) {\n         throw new DeploymentException((...))\n    } else if (isRunOnVirtualThread) {\n         return true;\n    }\n\n    return false\n}\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>private boolean isRunOnVirtualThread(MethodInfo info, BlockingDefault defaultValue) {\n    boolean isRunOnVirtualThread = false;\n    (...)\n    Map.Entry&lt;AnnotationTarget, AnnotationInstance&gt; transactional = getInheritableAnnotation(info, TRANSACTIONAL); \n    \n    if (transactional != null) {\n            return false;\n        }\n        \n    if (runOnVirtualThreadAnnotation != null) {\n        if (!JDK_SUPPORTS_VIRTUAL_THREADS) \n        {\n          throw new DeploymentException((...))\n        }\n          \n      if (targetJavaVersion.isJava19OrHigher() == Status.FALSE) {\n         throw new DeploymentException((...))\n        }\n            isRunOnVirtualThread = true;\n   }\n\n   if (defaultValue == BlockingDefault.BLOCKING) {\n        return false;\n   } else if (defaultValue == BlockingDefault.RUN_ON_VIRTUAL_THREAD) {\n            isRunOnVirtualThread = true;\n    } else if (defaultValue == BlockingDefault.NON_BLOCKING) {\n            return false;\n    }\n\n    if (isRunOnVirtualThread &amp;&amp; !isBlocking(info, defaultValue)) {\n         throw new DeploymentException((...))\n    } else if (isRunOnVirtualThread) {\n         return true;\n    }\n\n    return false\n}\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tak\u017ce je\u017celi kiedykolwiek czuli\u015bcie si\u0119 \u017ale, u\u017cywaj\u0105c masy zagnie\u017cd\u017conych if-\u00f3w, to mam nadzieje, \u017ce widz\u0105 powy\u017csze jest Wam ju\u017c troch\u0119 lepiej.<\/p>\n","innerContent":["\n<p>Tak\u017ce je\u017celi kiedykolwiek czuli\u015bcie si\u0119 \u017ale, u\u017cywaj\u0105c masy zagnie\u017cd\u017conych if-\u00f3w, to mam nadzieje, \u017ce widz\u0105 powy\u017csze jest Wam ju\u017c troch\u0119 lepiej.<\/p>\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\">\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\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:\/\/quarkus.io\/blog\/quarkus-3-0-final-released\/\">Quarkus 3.0, our new major release, is here!<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-0-final-released\/\">Quarkus 3.0, our new major release, is here!<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/smallrye.io\/smallrye-mutiny\/2.0.0\/reference\/migrating-to-mutiny-2\/\">Migrating to Mutiny 2<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/smallrye.io\/smallrye-mutiny\/2.0.0\/reference\/migrating-to-mutiny-2\/\">Migrating to Mutiny 2<\/a><\/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\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">2. Amazon rozpycha si\u0119 coraz szerzej ze swoim JDK<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">2. Amazon rozpycha si\u0119 coraz szerzej ze swoim JDK<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ok, to jak ju\u017c mamy zaliczonego najnowszego Quarkusa, czas przygl\u0105dn\u0105\u0107 si\u0119 szerszemu obrazkowi - ostatnimi tygodniami pojawi\u0142y si\u0119 dwa raporty, kt\u00f3re pr\u00f3buj\u0105 opisa\u0107 nam szerszy obrazek tego, jak na \u015bwiecie wygl\u0105da tworzenie aplikacji Javowych - <a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2023-04\/new-relic-2023-state-of-the-java-ecosystem-2023-04-20.pdf\">2023 State of the Java Ecosystem<\/a> od New Relic oraz <a href=\"https:\/\/website.vaadin.com\/hubfs\/Whitepapers\/Java%20Survey%20Report%202023%20-%20Vaadin%20Survey.pdf\">2023 State of Java in the Enterprise Report<\/a>, sygnowany logiem Vaadina.<\/p>\n","innerContent":["\n<p>Ok, to jak ju\u017c mamy zaliczonego najnowszego Quarkusa, czas przygl\u0105dn\u0105\u0107 si\u0119 szerszemu obrazkowi - ostatnimi tygodniami pojawi\u0142y si\u0119 dwa raporty, kt\u00f3re pr\u00f3buj\u0105 opisa\u0107 nam szerszy obrazek tego, jak na \u015bwiecie wygl\u0105da tworzenie aplikacji Javowych - <a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2023-04\/new-relic-2023-state-of-the-java-ecosystem-2023-04-20.pdf\">2023 State of the Java Ecosystem<\/a> od New Relic oraz <a href=\"https:\/\/website.vaadin.com\/hubfs\/Whitepapers\/Java%20Survey%20Report%202023%20-%20Vaadin%20Survey.pdf\">2023 State of Java in the Enterprise Report<\/a>, sygnowany logiem Vaadina.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z g\u00f3ry powiem, \u017ce stwierdzenie ko\u0144cz\u0105cy poprzedni akapit jest tu troch\u0119 tutaj naci\u0105gane, poniewa\u017c oba raporty zosta\u0142y stworzone przez konkretne podmioty i to czu\u0107. Szczeg\u00f3lnie zabawne jest to w wypadku <strong>State of Java in the Enterprise<\/strong> - podejrzewam, \u017ce dla wi\u0119kszo\u015bci z Was te przegl\u0105dy to jedyne miejsce w sieci, gdzie jeszcze trafiacie na jakiekolwiek \u015blady Vaadina, a Raport przedstawia go jako technologie zdecydowanie wschodz\u0105c\u0105 (przyk\u0142adowo, 34% respondent\u00f3w Vaadin Flow u\u017cywa \"w znacznym stopniu\"). Przynajmniej tw\u00f3rcy si\u0119 z tym nie kryj\u0105 - w ka\u017cdym mo\u017cliwym miejscu dodaj\u0105 disclaimer, \u017ce badanie by\u0142o przeprowadzone w\u015br\u00f3d marketingowej bazy Vaadina, co z wiadomych powod\u00f3w zaburza sporo wynik\u00f3w.<\/p>\n","innerContent":["\n<p>Z g\u00f3ry powiem, \u017ce stwierdzenie ko\u0144cz\u0105cy poprzedni akapit jest tu troch\u0119 tutaj naci\u0105gane, poniewa\u017c oba raporty zosta\u0142y stworzone przez konkretne podmioty i to czu\u0107. Szczeg\u00f3lnie zabawne jest to w wypadku <strong>State of Java in the Enterprise<\/strong> - podejrzewam, \u017ce dla wi\u0119kszo\u015bci z Was te przegl\u0105dy to jedyne miejsce w sieci, gdzie jeszcze trafiacie na jakiekolwiek \u015blady Vaadina, a Raport przedstawia go jako technologie zdecydowanie wschodz\u0105c\u0105 (przyk\u0142adowo, 34% respondent\u00f3w Vaadin Flow u\u017cywa \"w znacznym stopniu\"). Przynajmniej tw\u00f3rcy si\u0119 z tym nie kryj\u0105 - w ka\u017cdym mo\u017cliwym miejscu dodaj\u0105 disclaimer, \u017ce badanie by\u0142o przeprowadzone w\u015br\u00f3d marketingowej bazy Vaadina, co z wiadomych powod\u00f3w zaburza sporo wynik\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zamiast przygl\u0105da\u0107 si\u0119 wi\u0119c na standardowych, tych samych w zasadzie trendach - jak zwykle coraz wi\u0119ksz\u0105 adopcje maj\u0105 nowe LTSy Javy, widz\u0105c te\u017c sta\u0142\u0105, ci\u0105g\u0142\u0105 adopcje chmury obliczeniowej (cho\u0107 wydaje mi si\u0119, \u017ce \u0142atwo ju\u017c by\u0142o, a sporo aplikacji kt\u00f3re do tej pory do Amazon\u00f3w tego \u015bwiata do tej pory nie trafi\u0142o umrze w firmowych datacenter) - skupie si\u0119 na najciekawszym fakcie, wynikaj\u0105cym z ka\u017cdego z raport\u00f3w.<\/p>\n","innerContent":["\n<p>Zamiast przygl\u0105da\u0107 si\u0119 wi\u0119c na standardowych, tych samych w zasadzie trendach - jak zwykle coraz wi\u0119ksz\u0105 adopcje maj\u0105 nowe LTSy Javy, widz\u0105c te\u017c sta\u0142\u0105, ci\u0105g\u0142\u0105 adopcje chmury obliczeniowej (cho\u0107 wydaje mi si\u0119, \u017ce \u0142atwo ju\u017c by\u0142o, a sporo aplikacji kt\u00f3re do tej pory do Amazon\u00f3w tego \u015bwiata do tej pory nie trafi\u0142o umrze w firmowych datacenter) - skupie si\u0119 na najciekawszym fakcie, wynikaj\u0105cym z ka\u017cdego z raport\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi chodzi o raport Vaadina, to on sam w sobie nie jest jako\u015b zbyt rewolucyjny. W dokumencie bardzo du\u017co m\u00f3wi si\u0119 o modernizacji aplikacji, a \u0142\u0105cz\u0105c ze sob\u0105 wnioski z kilku r\u00f3\u017cnych wykres\u00f3w doj\u015b\u0107 mo\u017cna do wniosku, \u017ce wiele firm (i to g\u0142\u00f3wnie w Europie, gdy\u017c zdecydowanie wi\u0119kszo\u015b\u0107 respondent\u00f3w pochodzi ze Starego Kontynentu) coraz powa\u017cniej podchodzi do tematu modernizacji, a najwi\u0119kszym wyzwaniem jest... UX aplikacji i og\u00f3lnie warstwa frontendowa. Ponownie, ca\u0142o\u015b\u0107 mo\u017ce by\u0107 mocno skrzywiona ze wzgl\u0119du na grup\u0119 badawcz\u0105 (Vaadin zawsze pozycjonowa\u0142 si\u0119 na Framework FullStackowy), ale wida\u0107, \u017ce nawet w przypadku aplikacji wewn\u0119trznych (64% respondent\u00f3w tworzy takowe) sporo nacisku k\u0142adzie si\u0119 dzi\u015b na ten w\u0142a\u015bnie aspekt. Szkoda, \u017ce tw\u00f3rcy nie podzielili si\u0119 Raw Data - bardzo ch\u0119tnie zobaczy\u0142bym, czy istnieje korelacja min. wielko\u015bci\u0105 firmy a wybieranym frameworkiem frontendowym - takich w\u0142a\u015bnie krzy\u017cowych zestawie\u0144 mi najbardziej zabrak\u0142o.<\/p>\n","innerContent":["\n<p>Je\u017celi chodzi o raport Vaadina, to on sam w sobie nie jest jako\u015b zbyt rewolucyjny. W dokumencie bardzo du\u017co m\u00f3wi si\u0119 o modernizacji aplikacji, a \u0142\u0105cz\u0105c ze sob\u0105 wnioski z kilku r\u00f3\u017cnych wykres\u00f3w doj\u015b\u0107 mo\u017cna do wniosku, \u017ce wiele firm (i to g\u0142\u00f3wnie w Europie, gdy\u017c zdecydowanie wi\u0119kszo\u015b\u0107 respondent\u00f3w pochodzi ze Starego Kontynentu) coraz powa\u017cniej podchodzi do tematu modernizacji, a najwi\u0119kszym wyzwaniem jest... UX aplikacji i og\u00f3lnie warstwa frontendowa. Ponownie, ca\u0142o\u015b\u0107 mo\u017ce by\u0107 mocno skrzywiona ze wzgl\u0119du na grup\u0119 badawcz\u0105 (Vaadin zawsze pozycjonowa\u0142 si\u0119 na Framework FullStackowy), ale wida\u0107, \u017ce nawet w przypadku aplikacji wewn\u0119trznych (64% respondent\u00f3w tworzy takowe) sporo nacisku k\u0142adzie si\u0119 dzi\u015b na ten w\u0142a\u015bnie aspekt. Szkoda, \u017ce tw\u00f3rcy nie podzielili si\u0119 Raw Data - bardzo ch\u0119tnie zobaczy\u0142bym, czy istnieje korelacja min. wielko\u015bci\u0105 firmy a wybieranym frameworkiem frontendowym - takich w\u0142a\u015bnie krzy\u017cowych zestawie\u0144 mi najbardziej zabrak\u0142o.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ale przyznam, \u017ce tego Vaadina to przedstawi\u0142em Wam tak bardziej dla kompletno\u015bci. O wiele ciekawiej prezentuje si\u0119 bowiem <a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2023-04\/new-relic-2023-state-of-the-java-ecosystem-2023-04-20.pdf\"><strong>State of the Java Ecosystem<\/strong><\/a> New Relica. Oczywi\u015bcie, posiada on wi\u0119kszo\u015b\u0107 wad swojego poprzednika - New Relic to us\u0142uga pomagaj\u0105ca w telemetrii aplikacji, dlatego to w\u0142a\u015bnie w oparciu o dane zbierane przez u\u017cytkownik\u00f3w produktu powsta\u0142 dokument. Prawdopodobnie nie oddaje to ca\u0142ego ekosystemu, jak raczy\u0142by sugerowa\u0107 tytu\u0142. Z tym jednak przychodzi pewien interesuj\u0105cy twist - zamiast danych deklaratywnych, zebranych z pomoc\u0105 ankiety, mamy tutaj do czynienia z realnymi warto\u015bciami produkcyjnymi. Nie dowiemy si\u0119 wi\u0119c nic o planach i wyzwaniach (jak to by\u0142o w wypadku Vaadina), ale mo\u017cemy pozna\u0107 sporo szczeg\u00f3\u0142\u00f3w \"bliskich maszyny\".<\/p>\n","innerContent":["\n<p>Ale przyznam, \u017ce tego Vaadina to przedstawi\u0142em Wam tak bardziej dla kompletno\u015bci. O wiele ciekawiej prezentuje si\u0119 bowiem <a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2023-04\/new-relic-2023-state-of-the-java-ecosystem-2023-04-20.pdf\"><strong>State of the Java Ecosystem<\/strong><\/a> New Relica. Oczywi\u015bcie, posiada on wi\u0119kszo\u015b\u0107 wad swojego poprzednika - New Relic to us\u0142uga pomagaj\u0105ca w telemetrii aplikacji, dlatego to w\u0142a\u015bnie w oparciu o dane zbierane przez u\u017cytkownik\u00f3w produktu powsta\u0142 dokument. Prawdopodobnie nie oddaje to ca\u0142ego ekosystemu, jak raczy\u0142by sugerowa\u0107 tytu\u0142. Z tym jednak przychodzi pewien interesuj\u0105cy twist - zamiast danych deklaratywnych, zebranych z pomoc\u0105 ankiety, mamy tutaj do czynienia z realnymi warto\u015bciami produkcyjnymi. Nie dowiemy si\u0119 wi\u0119c nic o planach i wyzwaniach (jak to by\u0142o w wypadku Vaadina), ale mo\u017cemy pozna\u0107 sporo szczeg\u00f3\u0142\u00f3w \"bliskich maszyny\".<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>St\u0105d te\u017c raport New Relica to przede wszystkim technikalia, ale po to pewnie tutaj wchodzicie, prawda? Bardzo du\u017co miejsca po\u015bwi\u0119cono min. konteneryzacji, kt\u00f3ra staje si\u0119 powoli standardem je\u015bli chodzi o spos\u00f3b releasowania javowych aplikacji, a w raporcie znajdziemy sporo interesuj\u0105cych detali jak ilo\u015b\u0107 u\u017cytych procesor\u00f3w czy pami\u0119ci (TLDR: sprawd\u017acie swoje ustawienia Waszych kontener\u00f3w, bo <a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2023-04\/new-relic-2023-state-of-the-java-ecosystem-2023-04-20.pdf\">dane pokazuj\u0105, \u017ce sporo programist\u00f3w ma z\u0142e ustawienia<\/a>. To co jednak najbardziej przyci\u0105ga wzrok, to wykres u\u017cycia konkretnych wersji JDK. Tutaj bowiem wyniki, zw\u0142aszcza w por\u00f3wnaniu do roku 2022 s\u0105... interesuj\u0105ce:<\/p>\n","innerContent":["\n<p>St\u0105d te\u017c raport New Relica to przede wszystkim technikalia, ale po to pewnie tutaj wchodzicie, prawda? Bardzo du\u017co miejsca po\u015bwi\u0119cono min. konteneryzacji, kt\u00f3ra staje si\u0119 powoli standardem je\u015bli chodzi o spos\u00f3b releasowania javowych aplikacji, a w raporcie znajdziemy sporo interesuj\u0105cych detali jak ilo\u015b\u0107 u\u017cytych procesor\u00f3w czy pami\u0119ci (TLDR: sprawd\u017acie swoje ustawienia Waszych kontener\u00f3w, bo <a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2023-04\/new-relic-2023-state-of-the-java-ecosystem-2023-04-20.pdf\">dane pokazuj\u0105, \u017ce sporo programist\u00f3w ma z\u0142e ustawienia<\/a>. To co jednak najbardziej przyci\u0105ga wzrok, to wykres u\u017cycia konkretnych wersji JDK. Tutaj bowiem wyniki, zw\u0142aszcza w por\u00f3wnaniu do roku 2022 s\u0105... interesuj\u0105ce:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15869,"width":512,"height":290,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-1024x580.png\" alt=\"\" class=\"wp-image-15869\" width=\"512\" height=\"290\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-1024x580.png\" alt=\"\" class=\"wp-image-15869\" width=\"512\" height=\"290\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oczywi\u015bcie, wyniki z pewno\u015bci\u0105 s\u0105 w jakim\u015b stopniu zbiasowane ze wzgl\u0119du na baz\u0119 u\u017cytkownik\u00f3w New Relica, ale trend jest wyra\u017any - coraz wi\u0119cej os\u00f3b wybiera w\u0142a\u015bnie Amazonowe Corretto jako swoje produkcyjne JDK. O ile wi\u0119kszo\u015b\u0107 JDK jest do siebie do\u015b\u0107 podobne, Corretto to runtime z dodatkowymi \"twistami\" - przyk\u0142adowo, jest ono dodatkowo zoptymalizowane pod k\u0105tem dzia\u0142ania na procesorach ARM (a zw\u0142aszcza AWS-owego ). Jako jedyne wspiera r\u00f3wnie\u017c SnapStart, czyli og\u0142oszon\u0105 w zesz\u0142ym roku metod\u0119 redukcji Cold Startu funkcji Serverless. Dla tych, kt\u00f3rzy takowego nie kojarz\u0105, ze wzgl\u0119du na ilo\u015b\u0107 niuans\u00f3w polecam lektur\u0119 nieco szerszego opracowania tematu <a href=\"https:\/\/vived.substack.com\/p\/the-road-to-aws-lambda-snapstart\">w jednej z naszych poprzednich edycji<\/a>. I cho\u0107 nie znam za wielu przypadk\u00f3w u\u017cycia Corretto poza AWS-em, to jednak wida\u0107, \u017ce inwestycje dostawc\u00f3w chmurowych we w\u0142asne JDK wydaj\u0105 si\u0119 mie\u0107 dla nich sens, tak\u017ce dzi\u0119ki mo\u017cliwo\u015bci zaproponowania dodatkowych innowacji.<\/p>\n","innerContent":["\n<p>Oczywi\u015bcie, wyniki z pewno\u015bci\u0105 s\u0105 w jakim\u015b stopniu zbiasowane ze wzgl\u0119du na baz\u0119 u\u017cytkownik\u00f3w New Relica, ale trend jest wyra\u017any - coraz wi\u0119cej os\u00f3b wybiera w\u0142a\u015bnie Amazonowe Corretto jako swoje produkcyjne JDK. O ile wi\u0119kszo\u015b\u0107 JDK jest do siebie do\u015b\u0107 podobne, Corretto to runtime z dodatkowymi \"twistami\" - przyk\u0142adowo, jest ono dodatkowo zoptymalizowane pod k\u0105tem dzia\u0142ania na procesorach ARM (a zw\u0142aszcza AWS-owego ). Jako jedyne wspiera r\u00f3wnie\u017c SnapStart, czyli og\u0142oszon\u0105 w zesz\u0142ym roku metod\u0119 redukcji Cold Startu funkcji Serverless. Dla tych, kt\u00f3rzy takowego nie kojarz\u0105, ze wzgl\u0119du na ilo\u015b\u0107 niuans\u00f3w polecam lektur\u0119 nieco szerszego opracowania tematu <a href=\"https:\/\/vived.substack.com\/p\/the-road-to-aws-lambda-snapstart\">w jednej z naszych poprzednich edycji<\/a>. I cho\u0107 nie znam za wielu przypadk\u00f3w u\u017cycia Corretto poza AWS-em, to jednak wida\u0107, \u017ce inwestycje dostawc\u00f3w chmurowych we w\u0142asne JDK wydaj\u0105 si\u0119 mie\u0107 dla nich sens, tak\u017ce dzi\u0119ki mo\u017cliwo\u015bci zaproponowania dodatkowych innowacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A mo\u017cliwe, \u017ce Corretto tylko b\u0119dzie zyskiwa\u0107 na popularno\u015bci, AWS bowiem nie zaprzestaje inwestycji we wsparcie Javy w swojej chmurze. W zesz\u0142ym tygodniu pojawi\u0142o si\u0119 du\u017ce og\u0142oszenie dotycz\u0105ce AWS Lambda - <a href=\"https:\/\/aws.amazon.com\/blogs\/compute\/java-17-runtime-now-available-on-aws-lambda\/\">us\u0142uga Serverless Amazonu doczeka\u0142a si\u0119 bowiem wsparcia najnowszego LTS, czyli JDK 17<\/a>. Jak \u0142atwo si\u0119 domy\u015ble\u0107, ca\u0142o\u015b\u0107 nap\u0119dza w\u0142a\u015bnie Corretto. \"Natywne\" wsparcie najnowszego LTS-a oznacza te\u017c, \u017ce mo\u017cna b\u0119dzie wreszcie u\u017cywa\u0107 z t\u0105 wersj\u0105 AWS SnapStart wraz z now\u0105 Jav\u0105.<\/p>\n","innerContent":["\n<p>A mo\u017cliwe, \u017ce Corretto tylko b\u0119dzie zyskiwa\u0107 na popularno\u015bci, AWS bowiem nie zaprzestaje inwestycji we wsparcie Javy w swojej chmurze. W zesz\u0142ym tygodniu pojawi\u0142o si\u0119 du\u017ce og\u0142oszenie dotycz\u0105ce AWS Lambda - <a href=\"https:\/\/aws.amazon.com\/blogs\/compute\/java-17-runtime-now-available-on-aws-lambda\/\">us\u0142uga Serverless Amazonu doczeka\u0142a si\u0119 bowiem wsparcia najnowszego LTS, czyli JDK 17<\/a>. Jak \u0142atwo si\u0119 domy\u015ble\u0107, ca\u0142o\u015b\u0107 nap\u0119dza w\u0142a\u015bnie Corretto. \"Natywne\" wsparcie najnowszego LTS-a oznacza te\u017c, \u017ce mo\u017cna b\u0119dzie wreszcie u\u017cywa\u0107 z t\u0105 wersj\u0105 AWS SnapStart wraz z now\u0105 Jav\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15871,"width":420,"height":380,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-1.png\" alt=\"\" class=\"wp-image-15871\" width=\"420\" height=\"380\"\/><figcaption class=\"wp-element-caption\">I to bez potrzeby u\u017cywania pewnych hmmm... niekonwencjonalnych rozwi\u0105za\u0144<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-1.png\" alt=\"\" class=\"wp-image-15871\" width=\"420\" height=\"380\"\/><figcaption class=\"wp-element-caption\">I to bez potrzeby u\u017cywania pewnych hmmm... niekonwencjonalnych rozwi\u0105za\u0144<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A je\u015bli jeste\u015bcie podcastowi, ciekaw\u0105 dyskusje na temat Javy w Amazonie znajdziecie <a href=\"https:\/\/airhacks.fm\/#episode_240\">w ostatnim odcinku airhacks.fm<\/a> <a href=\"https:\/\/twitter.com\/AdamBien\">Adama Biena<\/a>, w kt\u00f3rym go\u015bci\u0142 on <a href=\"https:\/\/twitter.com\/maschnetwork\">Maximiliana Schellhorna<\/a>, Soultion Architecta zajmuj\u0105cego si\u0119 w\u0142a\u015bnie Java Serverless w AWS.<\/p>\n","innerContent":["\n<p>A je\u015bli jeste\u015bcie podcastowi, ciekaw\u0105 dyskusje na temat Javy w Amazonie znajdziecie <a href=\"https:\/\/airhacks.fm\/#episode_240\">w ostatnim odcinku airhacks.fm<\/a> <a href=\"https:\/\/twitter.com\/AdamBien\">Adama Biena<\/a>, w kt\u00f3rym go\u015bci\u0142 on <a href=\"https:\/\/twitter.com\/maschnetwork\">Maximiliana Schellhorna<\/a>, Soultion Architecta zajmuj\u0105cego si\u0119 w\u0142a\u015bnie Java Serverless w AWS.<\/p>\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\">\u017br\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">\u017br\u00f3d\u0142a<\/h3>\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:\/\/newrelic.com\/sites\/default\/files\/2023-04\/new-relic-2023-state-of-the-java-ecosystem-2023-04-20.pdf\">State of the Java Ecosystem<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2023-04\/new-relic-2023-state-of-the-java-ecosystem-2023-04-20.pdf\">State of the Java Ecosystem<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/website.vaadin.com\/hubfs\/Whitepapers\/Java%20Survey%20Report%202023%20-%20Vaadin%20Survey.pdf\">State of Java in the Enterprise<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/website.vaadin.com\/hubfs\/Whitepapers\/Java%20Survey%20Report%202023%20-%20Vaadin%20Survey.pdf\">State of Java in the Enterprise<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/the-road-to-aws-lambda-snapstart\">The road to AWS Lambda SnapStart - guide through the years of JVM \"cold start\" tinkering - JVM Weekly #24<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/the-road-to-aws-lambda-snapstart\">The road to AWS Lambda SnapStart - guide through the years of JVM \"cold start\" tinkering - JVM Weekly #24<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/aws.amazon.com\/blogs\/compute\/java-17-runtime-now-available-on-aws-lambda\/\">AWS Lambda now supports Java 17<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/aws.amazon.com\/blogs\/compute\/java-17-runtime-now-available-on-aws-lambda\/\">AWS Lambda now supports Java 17<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/airhacks.fm\/#episode_240\">Podcast airhacks.fm: Serverless Java (17) on AWS<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/airhacks.fm\/#episode_240\">Podcast airhacks.fm: Serverless Java (17) on AWS<\/a><\/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\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">3. Rzut oka pod mask\u0119 Javy - Dynamiczni Agenci i \"tearing\"<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">3. Rzut oka pod mask\u0119 Javy - Dynamiczni Agenci i \"tearing\"<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tydzie\u0144 temu, pisz\u0105c o zatwierdzonych JEP-ach obieca\u0142em Wam, \u017ce do tematu wr\u00f3cimy w kolejnej edycji. Zgodnie z zapowiedzi\u0105, przygl\u0105dnijmy si\u0119 teraz <a href=\"https:\/\/openjdk.org\/jeps\/8306275\">Prepare to Restrict The Dynamic Loading of Agents<\/a>, kt\u00f3re niedawno zosta\u0142o opublikowane jako JEP Draft. Dokument ten proponuje zmiany w sposobie \u0142adowania Agent\u00f3w Java do ju\u017c dzia\u0142aj\u0105cej JVM w celu zapewnienia lepszego bezpiecze\u0144stwa. Ju\u017c nied\u0142ugo b\u0119dzie si\u0119 to ko\u0144czy\u0142o komunikatem z ostrze\u017ceniem. D\u0142ugoterminowym celem jest jednak przygotowanie spo\u0142eczno\u015bci na przysz\u0142e wydania JDK, kt\u00f3re domy\u015blnie wy\u0142\u0105cz\u0105 \u0142adowanie agent\u00f3w do dzia\u0142aj\u0105cej JVM.<\/p>\n","innerContent":["\n<p>Tydzie\u0144 temu, pisz\u0105c o zatwierdzonych JEP-ach obieca\u0142em Wam, \u017ce do tematu wr\u00f3cimy w kolejnej edycji. Zgodnie z zapowiedzi\u0105, przygl\u0105dnijmy si\u0119 teraz <a href=\"https:\/\/openjdk.org\/jeps\/8306275\">Prepare to Restrict The Dynamic Loading of Agents<\/a>, kt\u00f3re niedawno zosta\u0142o opublikowane jako JEP Draft. Dokument ten proponuje zmiany w sposobie \u0142adowania Agent\u00f3w Java do ju\u017c dzia\u0142aj\u0105cej JVM w celu zapewnienia lepszego bezpiecze\u0144stwa. Ju\u017c nied\u0142ugo b\u0119dzie si\u0119 to ko\u0144czy\u0142o komunikatem z ostrze\u017ceniem. D\u0142ugoterminowym celem jest jednak przygotowanie spo\u0142eczno\u015bci na przysz\u0142e wydania JDK, kt\u00f3re domy\u015blnie wy\u0142\u0105cz\u0105 \u0142adowanie agent\u00f3w do dzia\u0142aj\u0105cej JVM.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Agenci Java to komponenty, kt\u00f3re mog\u0105 modyfikowa\u0107 kod aplikacji podczas jej dzia\u0142ania, wykorzystywane przede wszystkim do profilowania i monitorowania (to w\u0142a\u015bnie z ich Agenta pochodz\u0105 dane, kt\u00f3re prezentowa\u0142 Raport New Relica z poprzedniej sekcji). Zosta\u0142y wprowadzone w Javie 5, i mog\u0105 by\u0107 tworzone za pomoc\u0105 API <code>java.lang.instrument<\/code> lub <strong>JVM Tool Interface<\/strong>. Przez lata instrumentacja JVM by\u0142a rozwijana min. dzi\u0119ki Attach API, wprowadzone w JDK 6, pozwala narz\u0119dziom w\u0142a\u015bnie na pod\u0142\u0105czenie si\u0119 do dzia\u0142aj\u0105cej JVM. Niekt\u00f3re narz\u0119dzia u\u017cywaj\u0105 Attach API do w\u0142a\u015bnie dynamicznego \u0142adowania agent\u00f3w.<\/p>\n","innerContent":["\n<p>Agenci Java to komponenty, kt\u00f3re mog\u0105 modyfikowa\u0107 kod aplikacji podczas jej dzia\u0142ania, wykorzystywane przede wszystkim do profilowania i monitorowania (to w\u0142a\u015bnie z ich Agenta pochodz\u0105 dane, kt\u00f3re prezentowa\u0142 Raport New Relica z poprzedniej sekcji). Zosta\u0142y wprowadzone w Javie 5, i mog\u0105 by\u0107 tworzone za pomoc\u0105 API <code>java.lang.instrument<\/code> lub <strong>JVM Tool Interface<\/strong>. Przez lata instrumentacja JVM by\u0142a rozwijana min. dzi\u0119ki Attach API, wprowadzone w JDK 6, pozwala narz\u0119dziom w\u0142a\u015bnie na pod\u0142\u0105czenie si\u0119 do dzia\u0142aj\u0105cej JVM. Niekt\u00f3re narz\u0119dzia u\u017cywaj\u0105 Attach API do w\u0142a\u015bnie dynamicznego \u0142adowania agent\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W JDK 21 dynamiczne \u0142adowanie agent\u00f3w b\u0119dzie nadal dozwolone, ale pojawi si\u0119 wspomniane ostrze\u017cenie. Aby go, u\u017cytkownicy musz\u0105 przekaza\u0107 <code>-XX:+EnableDynamicAgentLoading<\/code> w linii polece\u0144. W przysz\u0142ych wydaniach, dynamiczne \u0142adowanie agent\u00f3w b\u0119dzie domy\u015blnie zabronione i zako\u0144czy si\u0119 b\u0142\u0119dem, je\u015bli pr\u00f3ba zostanie podj\u0119ta bez tej w\u0142a\u015bnie opcji. \u017badne zmiany nie s\u0105 r\u00f3wnocze\u015bnie planowane wobec narz\u0119dzi, kt\u00f3re \u0142aduj\u0105 agent\u00f3w podczas uruchamiania maszyny wirtualnej lub u\u017cywaj\u0105 Attach API do cel\u00f3w innych ni\u017c \u0142adowanie agent\u00f3w lub biblioteki .<\/p>\n","innerContent":["\n<p>W JDK 21 dynamiczne \u0142adowanie agent\u00f3w b\u0119dzie nadal dozwolone, ale pojawi si\u0119 wspomniane ostrze\u017cenie. Aby go, u\u017cytkownicy musz\u0105 przekaza\u0107 <code>-XX:+EnableDynamicAgentLoading<\/code> w linii polece\u0144. W przysz\u0142ych wydaniach, dynamiczne \u0142adowanie agent\u00f3w b\u0119dzie domy\u015blnie zabronione i zako\u0144czy si\u0119 b\u0142\u0119dem, je\u015bli pr\u00f3ba zostanie podj\u0119ta bez tej w\u0142a\u015bnie opcji. \u017badne zmiany nie s\u0105 r\u00f3wnocze\u015bnie planowane wobec narz\u0119dzi, kt\u00f3re \u0142aduj\u0105 agent\u00f3w podczas uruchamiania maszyny wirtualnej lub u\u017cywaj\u0105 Attach API do cel\u00f3w innych ni\u017c \u0142adowanie agent\u00f3w lub biblioteki .<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A jak ju\u017c jeste\u015bmy przy tekstach przedstawiaj\u0105cych proces decyzyjny za konkretnymi fragmentami J\u0119zyka, to nie M\u00f3g\u0142bym sobie odm\u00f3wi\u0107 podzielenia si\u0119 z Wami <a href=\"https:\/\/mail.openjdk.org\/pipermail\/valhalla-spec-experts\/2023-April\/002262.html\">On atomicity and tearing<\/a>, autorstwa Briana Goetza. Ten pochodz\u0105cy z listy mailingowej Javy wyw\u00f3d omawia atomowo\u015b\u0107, nieatomowo\u015b\u0107 i tak zwany tearing (rozdarcie) w kontek\u015bcie Projektu Valhalla w Javie, kt\u00f3ry ma na celu umo\u017cliwienie \"sp\u0142aszczenie\" sposob\u00f3w przechowywania obiekt\u00f3w na stercie.<\/p>\n","innerContent":["\n<p>A jak ju\u017c jeste\u015bmy przy tekstach przedstawiaj\u0105cych proces decyzyjny za konkretnymi fragmentami J\u0119zyka, to nie M\u00f3g\u0142bym sobie odm\u00f3wi\u0107 podzielenia si\u0119 z Wami <a href=\"https:\/\/mail.openjdk.org\/pipermail\/valhalla-spec-experts\/2023-April\/002262.html\">On atomicity and tearing<\/a>, autorstwa Briana Goetza. Ten pochodz\u0105cy z listy mailingowej Javy wyw\u00f3d omawia atomowo\u015b\u0107, nieatomowo\u015b\u0107 i tak zwany tearing (rozdarcie) w kontek\u015bcie Projektu Valhalla w Javie, kt\u00f3ry ma na celu umo\u017cliwienie \"sp\u0142aszczenie\" sposob\u00f3w przechowywania obiekt\u00f3w na stercie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tearing odnosi si\u0119 do instancji, w kt\u00f3rej warto\u015b\u0107 jest odczytywana lub zapisywana w cz\u0119\u015bciach, powoduj\u0105c niesp\u00f3jno\u015b\u0107 w odczytywanych warto\u015bciach - w tek\u015bcie przywo\u0142ywany jest przyk\u0142ad przechowywania w pami\u0119ci liczby 64-bitowej jako dwie warto\u015bci 32-bitowe. Z tego wzgl\u0119du przy dost\u0119pie do nich w rzadkim przypadku mo\u017ce wyst\u0105pi\u0107 tak zwany \"race condition\". Jest to kompromis osi\u0105gni\u0119ty w celu zapewnienia dobrej wydajno\u015bci dla operacji numerycznych w czasach, gdy zmienne 64-bitowe nie by\u0142y jeszcze wydajnie obs\u0142ugiwane przez procesory.<\/p>\n","innerContent":["\n<p>Tearing odnosi si\u0119 do instancji, w kt\u00f3rej warto\u015b\u0107 jest odczytywana lub zapisywana w cz\u0119\u015bciach, powoduj\u0105c niesp\u00f3jno\u015b\u0107 w odczytywanych warto\u015bciach - w tek\u015bcie przywo\u0142ywany jest przyk\u0142ad przechowywania w pami\u0119ci liczby 64-bitowej jako dwie warto\u015bci 32-bitowe. Z tego wzgl\u0119du przy dost\u0119pie do nich w rzadkim przypadku mo\u017ce wyst\u0105pi\u0107 tak zwany \"race condition\". Jest to kompromis osi\u0105gni\u0119ty w celu zapewnienia dobrej wydajno\u015bci dla operacji numerycznych w czasach, gdy zmienne 64-bitowe nie by\u0142y jeszcze wydajnie obs\u0142ugiwane przez procesory.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Teraz problem wraca w kontek\u015bcie innych typ\u00f3w danych - cz\u0119sto znacznie wi\u0119kszych ni\u017c 64-bity - kt\u00f3re w wypadku Valhalli r\u00f3wnie\u017c mog\u0105 podlega\u0107 \"rozrywaniu\".<\/p>\n","innerContent":["\n<p>Teraz problem wraca w kontek\u015bcie innych typ\u00f3w danych - cz\u0119sto znacznie wi\u0119kszych ni\u017c 64-bity - kt\u00f3re w wypadku Valhalli r\u00f3wnie\u017c mog\u0105 podlega\u0107 \"rozrywaniu\".<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tekst przedstawia trzy wybory dla Valhalli dotycz\u0105ce podej\u015bcia do tego problem:<\/p>\n","innerContent":["\n<p>Tekst przedstawia trzy wybory dla Valhalli dotycz\u0105ce podej\u015bcia do tego problem:<\/p>\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>Nigdy nie zezwalaj na \"rozrywanie\" warto\u015bci, jak w int.<\/li>\n","innerContent":["\n<li>Nigdy nie zezwalaj na \"rozrywanie\" warto\u015bci, jak w int.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Zawsze zezwalaj na \"rozrywanie\" warto\u015bci w czasie race-condition, podobnie jak w przypadku long.<\/li>\n","innerContent":["\n<li>Zawsze zezwalaj na \"rozrywanie\" warto\u015bci w czasie race-condition, podobnie jak w przypadku long.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Stworzy\u0107 rozwi\u0105zanie, kt\u00f3re pozwoli programi\u015bcie wybra\u0107 strategie<\/li>\n","innerContent":["\n<li>Stworzy\u0107 rozwi\u0105zanie, kt\u00f3re pozwoli programi\u015bcie wybra\u0107 strategie<\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Najbezpieczniejszym wyborem jest nigdy nie zezwalanie na rozdarcie, ale to ograniczy\u0142oby cele Valhalli. Goetz sugeruje wi\u0119c w tek\u015bcie sugeruje, \u017ce autorzy klas powinni dokona\u0107 kompromisu mi\u0119dzy atomowo\u015bci\u0105, a efektywnym sp\u0142aszczaniem obiekt\u00f3w sterty podczas projektowania Value Class, nawet je\u015bli powodowa\u0107 to b\u0119dzie docelowo problemy w przypadku wyst\u0105pienia Race Condition. Argumentuje, \u017ce te ostatnie i tak powinny by\u0107 unikane, bo ich wyniki nigdy z za\u0142o\u017cenia nie b\u0119dzie deterministyczny, a ograniczanie Valhalli w celu przygotowanie si\u0119 na tego typu przypadki brzegowe jest troch\u0119 walk\u0105 z wiatrakami.<\/p>\n","innerContent":["\n<p>Najbezpieczniejszym wyborem jest nigdy nie zezwalanie na rozdarcie, ale to ograniczy\u0142oby cele Valhalli. Goetz sugeruje wi\u0119c w tek\u015bcie sugeruje, \u017ce autorzy klas powinni dokona\u0107 kompromisu mi\u0119dzy atomowo\u015bci\u0105, a efektywnym sp\u0142aszczaniem obiekt\u00f3w sterty podczas projektowania Value Class, nawet je\u015bli powodowa\u0107 to b\u0119dzie docelowo problemy w przypadku wyst\u0105pienia Race Condition. Argumentuje, \u017ce te ostatnie i tak powinny by\u0107 unikane, bo ich wyniki nigdy z za\u0142o\u017cenia nie b\u0119dzie deterministyczny, a ograniczanie Valhalli w celu przygotowanie si\u0119 na tego typu przypadki brzegowe jest troch\u0119 walk\u0105 z wiatrakami.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jakie s\u0105 w tym wnioski dla Was, jako u\u017cytkownik\u00f3w ko\u0144cowych Javy? Wielu nie mam, ale zawsze uwa\u017ca\u0142em, \u017ce \u015bwiadomo\u015b\u0107 tego, jak bardzo skomplikowan\u0105 maszyneri\u0105 jest JVM i ile rzeczy trzeba wzi\u0105\u0107 pod uwag\u0119 przy jej ewolucji buduje empati\u0119 - szczeg\u00f3lnie jak (podobnie jak ja) nale\u017cycie do \u015bmieszk\u00f3w, kt\u00f3rzy regularnie sobie \u017cartuj\u0105 z ci\u0105g\u0142ych op\u00f3\u017anie\u0144 Valhalli.<\/p>\n","innerContent":["\n<p>Jakie s\u0105 w tym wnioski dla Was, jako u\u017cytkownik\u00f3w ko\u0144cowych Javy? Wielu nie mam, ale zawsze uwa\u017ca\u0142em, \u017ce \u015bwiadomo\u015b\u0107 tego, jak bardzo skomplikowan\u0105 maszyneri\u0105 jest JVM i ile rzeczy trzeba wzi\u0105\u0107 pod uwag\u0119 przy jej ewolucji buduje empati\u0119 - szczeg\u00f3lnie jak (podobnie jak ja) nale\u017cycie do \u015bmieszk\u00f3w, kt\u00f3rzy regularnie sobie \u017cartuj\u0105 z ci\u0105g\u0142ych op\u00f3\u017anie\u0144 Valhalli.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15877,"width":485,"height":512,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-3-969x1024.png\" alt=\"\" class=\"wp-image-15877\" width=\"485\" height=\"512\"\/><figcaption class=\"wp-element-caption\">Musia\u0142em <\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-3-969x1024.png\" alt=\"\" class=\"wp-image-15877\" width=\"485\" height=\"512\"\/><figcaption class=\"wp-element-caption\">Musia\u0142em <\/figcaption><\/figure>\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\">\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\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:\/\/openjdk.org\/jeps\/8306275\">JEP draft: Prepare to Restrict The Dynamic Loading of Agents<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8306275\">JEP draft: Prepare to Restrict The Dynamic Loading of Agents<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/valhalla-spec-experts\/2023-April\/002262.html\">On atomicity and tearing<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/valhalla-spec-experts\/2023-April\/002262.html\">On atomicity and tearing<\/a><\/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\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na koniec, ma\u0142y bonus. Przy okazji relacji z Keynote KotlinConf (notabene, <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2023\/05\/kotlinconf-2023-recordings\/\">pojawi\u0142y si\u0119 obiecane nagrania<\/a>) narzeka\u0142em, \u017ce przy promocji zupe\u0142nie zapomniano o maskotce Kotlina. Myli\u0142em si\u0119 bardzo - nie tylko <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2023\/04\/the-kotlin-mascot-returns\/\">s\u0142odziak wraca<\/a>, ale jeszcze dosta\u0142 imi\u0119 - od teraz zwie si\u0119 Kodee!<\/p>\n","innerContent":["\n<p>A na koniec, ma\u0142y bonus. Przy okazji relacji z Keynote KotlinConf (notabene, <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2023\/05\/kotlinconf-2023-recordings\/\">pojawi\u0142y si\u0119 obiecane nagrania<\/a>) narzeka\u0142em, \u017ce przy promocji zupe\u0142nie zapomniano o maskotce Kotlina. Myli\u0142em si\u0119 bardzo - nie tylko <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2023\/04\/the-kotlin-mascot-returns\/\">s\u0142odziak wraca<\/a>, ale jeszcze dosta\u0142 imi\u0119 - od teraz zwie si\u0119 Kodee!<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jego design przeszed\u0142 lekki lifting, dosta\u0142 te\u017c nowych kolor\u00f3w zgodnych z brandingiem samego Kotlina, ale pozosta\u0142 jedn\u0105 z moich ulubionych bran\u017cowych maskotek. Nie straci\u0142 te\u017c nic ze swojej ekspresyjno\u015bci, za to zyska\u0142 sporo nowych \"reakcji\". Zobaczcie zreszt\u0105 sami:<\/p>\n","innerContent":["\n<p>Jego design przeszed\u0142 lekki lifting, dosta\u0142 te\u017c nowych kolor\u00f3w zgodnych z brandingiem samego Kotlina, ale pozosta\u0142 jedn\u0105 z moich ulubionych bran\u017cowych maskotek. Nie straci\u0142 te\u017c nic ze swojej ekspresyjno\u015bci, za to zyska\u0142 sporo nowych \"reakcji\". Zobaczcie zreszt\u0105 sami:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":480,"height":570},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/DSGN-16174-Blog-post-banner-and-promo-materials-for-post-about-Kotlin-mascot_4-copy.png\" alt=\"\" width=\"480\" height=\"570\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/DSGN-16174-Blog-post-banner-and-promo-materials-for-post-about-Kotlin-mascot_4-copy.png\" alt=\"\" width=\"480\" height=\"570\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Mam nadzieje, \u017ce b\u0119dzie go w komunikacji oko\u0142o-kotlinowej tylko coraz wi\u0119cej.<\/p>\n","innerContent":["\n<p>Mam nadzieje, \u017ce b\u0119dzie go w komunikacji oko\u0142o-kotlinowej tylko coraz wi\u0119cej.<\/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\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A jak ju\u017c wr\u00f3ci\u0142 temat KotlinConf - sta\u0142em si\u0119 cz\u0142onkiem kapitu\u0142y Krak\u00f3w Kotlin User Group, kt\u00f3ra reaktywuje si\u0119 po prawie dw\u00f3ch latach nieobecno\u015bci. <a href=\"https:\/\/www.meetup.com\/krakow-kotlin\/events\/293119986\/\">Pierwsze po tej d\u0142ugiej przerwie spotkanie<\/a> odb\u0119dzie si\u0119 17 maja, a motywem przewodnim b\u0119dzie w\u0142a\u015bnie Keynote KotlinConf. Ogl\u0105dniemy go sobie razem, aby nast\u0119pnie odda\u0107 si\u0119 przy procentach dyskusji na temat implikacji dla przysz\u0142o\u015bci j\u0119zyka.<\/p>\n","innerContent":["\n<p>A jak ju\u017c wr\u00f3ci\u0142 temat KotlinConf - sta\u0142em si\u0119 cz\u0142onkiem kapitu\u0142y Krak\u00f3w Kotlin User Group, kt\u00f3ra reaktywuje si\u0119 po prawie dw\u00f3ch latach nieobecno\u015bci. <a href=\"https:\/\/www.meetup.com\/krakow-kotlin\/events\/293119986\/\">Pierwsze po tej d\u0142ugiej przerwie spotkanie<\/a> odb\u0119dzie si\u0119 17 maja, a motywem przewodnim b\u0119dzie w\u0142a\u015bnie Keynote KotlinConf. Ogl\u0105dniemy go sobie razem, aby nast\u0119pnie odda\u0107 si\u0119 przy procentach dyskusji na temat implikacji dla przysz\u0142o\u015bci j\u0119zyka.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15873,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-2.png\" alt=\"\" class=\"wp-image-15873\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/image-2.png\" alt=\"\" class=\"wp-image-15873\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wi\u0119c je\u015bli macie ochot\u0119 wpa\u015b\u0107 do Krakowa, pozna\u0107 si\u0119 \"w realu\" i wypi\u0107 razem piwo, b\u0119dzie to \u015bwietna ku temu okazja \ud83e\udd1f.<\/p>\n","innerContent":["\n<p>Wi\u0119c je\u015bli macie ochot\u0119 wpa\u015b\u0107 do Krakowa, pozna\u0107 si\u0119 \"w realu\" i wypi\u0107 razem piwo, b\u0119dzie to \u015bwietna ku temu okazja \ud83e\udd1f.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15875,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/giphy-downsized-5.gif\" alt=\"\" class=\"wp-image-15875\"\/><figcaption class=\"wp-element-caption\">My treat!<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/05\/giphy-downsized-5.gif\" alt=\"\" class=\"wp-image-15875\"\/><figcaption class=\"wp-element-caption\">My treat!<\/figcaption><\/figure>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15868","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=15868"}],"version-history":[{"count":4,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15868\/revisions"}],"predecessor-version":[{"id":15892,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15868\/revisions\/15892"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/15880"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=15868"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=15868"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=15868"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}