{"id":17873,"date":"2024-03-14T09:45:38","date_gmt":"2024-03-14T08:45:38","guid":{"rendered":"https:\/\/vived.io\/?p=17873"},"modified":"2024-03-19T12:47:02","modified_gmt":"2024-03-19T11:47:02","slug":"bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/","title":{"rendered":"Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105, w tym Jav\u0119 &#8211; JVM Weekly vol. 167"},"content":{"rendered":"\n<h2 id=\"1-bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-miedzy-innymi-javy\" data-num=1>1. Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105 &#8211; mi\u0119dzy innymi Javy<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"585\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-11-1024x585.png\" alt=\"\" class=\"wp-image-17875\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-11-1024x585.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-11-300x171.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-11-768x439.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-11-1536x878.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-11.png 1792w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Dzisiaj zaczniemy od bardzo ciekawego og\u0142oszenia, prosto z Bia\u0142ego Domu. <\/p>\n\n\n\n<p>Administracja prezydenta USA Joe Bidena apeluje bowiem do programist\u00f3w o stosowanie bezpiecznych pod wzgl\u0119dem zarz\u0105dzania pami\u0119ci\u0105 j\u0119zyk\u00f3w programowania i rezygnacj\u0119 z j\u0119zyk\u00f3w podatnych na ataki, takich jak C i C++. Biuro Dyrektora Narodowego ds. Cyberbezpiecze\u0144stwa (ONCD) w <a href=\"https:\/\/www.whitehouse.gov\/wp-content\/uploads\/2024\/02\/Final-ONCD-Technical-Report.pdf\">wydanym raporcie<\/a> wzywa deweloper\u00f3w do zmniejszania ryzyka cyberatak\u00f3w poprzez wykorzystanie j\u0119zyk\u00f3w programowania chroni\u0105cych przed problemami bezpiecze\u0144stwa zwi\u0105zanymi z pami\u0119ci\u0105, takimi jak przepe\u0142nienia bufora, odczyty poza granicami oraz wycieki pami\u0119ci. Raport podkre\u015bla, \u017ce oko\u0142o 70% wszystkich luk bezpiecze\u0144stwa jest spowodowanych przez problemy z bezpiecze\u0144stwem pami\u0119ci, a zmiana na j\u0119zyki programowania bezpieczne pod wzgl\u0119dem zarz\u0105dzania pami\u0119ci\u0105 mo\u017ce zapobiec wprowadzaniu ca\u0142ych klas podatno\u015bci do ekosystemu cyfrowego.<\/p>\n\n\n\n<p>Nowy raport ONCD wymienia Jav\u0119 jako przyk\u0142ad bezpiecznego j\u0119zyka programowania, podczas gdy C i C++ s\u0105 podane jako przyk\u0142ady j\u0119zyk\u00f3w z lukami w bezpiecze\u0144stwie pami\u0119ci. NSA w swojej informacji na temat cyberbezpiecze\u0144stwa wymienia r\u00f3wnie\u017c C#, Go, Rusta, Ruby i Swift jako j\u0119zyki uwa\u017cane za bezpieczne pod wzgl\u0119dem zarz\u0105dzania pami\u0119ci\u0105. Celem raportu jest przeniesienie odpowiedzialno\u015bci za cyberbezpiecze\u0144stwo z jednostek i ma\u0142ych firm na wi\u0119ksze organizacje i rz\u0105d USA, kt\u00f3re s\u0105 lepiej przygotowane do zarz\u0105dzania ci\u0105gle ewoluuj\u0105cymi zagro\u017ceniami. Eksperci podkre\u015blaj\u0105, \u017ce przej\u015bcie z C i C++ na inne j\u0119zyki b\u0119dzie d\u0142ugim i trudnym procesem, ale istniej\u0105ce alternatywy, ju\u017c teraz zyskuj\u0105 na popularno\u015bci, co mo\u017ce przyspieszy\u0107 ewolucj\u0119 w kierunku bezpieczniejszego kodowania. Ostatnio opublikowane Foreign Function and Memory (FFM) API, cho\u0107 nie wymienione z nazwy, bardzo dobrze wpisuje si\u0119 w ten trend.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"648\" height=\"385\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-18.png\" alt=\"\" class=\"wp-image-17892\" style=\"width:698px;height:auto\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-18.png 648w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-18-300x178.png 300w\" sizes=\"auto, (max-width: 648px) 100vw, 648px\" \/><figcaption class=\"wp-element-caption\">Oczywi\u015bcie powy\u017csze rozumowanie ma pewne luki.<\/figcaption><\/figure><\/div>\n\n\n<p>A jak ju\u017c si\u0119 pojawi\u0142 temat Rusta, to nie mog\u0119 sobie odm\u00f3wi\u0107 podrzucenia Wam miniaturki <a href=\"https:\/\/joshaustin.tech\/blog\/java-is-becoming-rust\/\">Java is becoming more like Rust, and I am here for it!<\/a>. Rust dla niekt\u00f3rych sta\u0142 si\u0119 standardem z\u0142ota (co dla innych jest pewnie do\u015b\u0107 kontrowersyjnym stwierdzeniem) ale Java te\u017c ewoluuje, o czym chyba nie musz\u0119 przekonywa\u0107 \u017cadnego z czytelnik\u00f3w tego newslettera. Z biegiem lat, j\u0119zyki te coraz bardziej zbli\u017caj\u0105 si\u0119 do siebie pod wieloma wzgl\u0119dami Przyk\u0142adami takich innowacji podawanych przez artyku\u0142 s\u0105 niemutowane Rekordy i Sealed Interfaces, u\u0142atwiaj\u0105ce modelowanie z\u0142o\u017conych typ\u00f3w danych. Dzi\u0119ki temu coraz wi\u0119cej mamy w naszym j\u0119zyku konstrukt\u00f3w z rodziny tak zwanych algebraiczne typy danych, umo\u017cliwiaj\u0105cych precyzyjne reprezentowanie stan\u00f3w i zachowa\u0144 i tak zwany Data-Oriented Programming. Kr\u00f3tki food for thought.<\/p>\n\n\n\n<p>A je\u015bli chcecie lepiej zrozumie\u0107, o co chodzi z tym ca\u0142ym DOP, polecam podcast Adama Biena i odcinek <a href=\"https:\/\/airhacks.fm\/#episode_283\">From Hexagonal Architectures to Data Oriented Programming<\/a>, w kt\u00f3rym go\u015bci Jose Paumard i rozpracowuj\u0105 wsp\u00f3lnie ten temat.<\/p>\n\n\n\n<h2 id=\"2-to-juz-pewnie-ostatni-raz-ale-wracamy-do-tematu-1brc\" data-num=2>2. To ju\u017c pewnie ostatni raz&#8230; ale wracamy do tematu 1BRC<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"585\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-12-1024x585.png\" alt=\"\" class=\"wp-image-17877\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-12-1024x585.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-12-300x171.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-12-768x439.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-12-1536x878.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-12.png 1792w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Wyzwania Miliarda Wierszy (1BRC), koncentruj\u0105ce si\u0119 na optymalizacji kodu Java w celu jak najszybszego przetworzenia 1 miliarda wierszy danych ze stacji meteorologicznej i obliczeniu minimalnej, \u015bredniej i maksymalnej temperatury, ju\u017c dawno za nami. Jednak nie przestaje ono rozpala\u0107 wyobra\u017ani spo\u0142eczno\u015bci, kt\u00f3ra wyprodukowa\u0142a ostatnimi czasy mas\u0119 artyku\u0142\u00f3w podsumowuj\u0105cych techniki u\u017cywane w ramach challenge. Dlatego postanowi\u0142em przygl\u0105dn\u0105\u0107 si\u0119 kwestii jeszcze jeden raz i podsumowa\u0107 te najciekawsze. <\/p>\n\n\n\n<p>Pierwsza z pozycji to artyku\u0142 <a href=\"https:\/\/questdb.io\/blog\/billion-row-challenge-step-by-step\/\">Marka Topolnika z QuestDB<\/a>, kt\u00f3ry szczeg\u00f3\u0142owo opisuje swoj\u0105 przygod\u0119 w ramach wyzwania &#8211; do\u015b\u0107 powiedzie\u0107, \u017ce jego &#8222;naiwna&#8221; wersja rozwi\u0105zania oparta o Java Streams pocz\u0105tkowo zajmowa\u0142a 71 sekund na przetworzenie. Lista p\u00f3\u017aniejszy opisywanych optymalizacji zawiera takie sztuczki, jak r\u00f3wnoleg\u0142ego przetwarzania I\/O czy bezpo\u015brednie parsowanie temperatur do liczb ca\u0142kowitych, poprzez wykorzystanie niestandardowych struktur danych dla danych (co r\u00f3wnie\u017c\u00a0&#8222;make a difference), a\u017c po niskopoziomowe optymalizacje, takie jak u\u017cywanie <code>sun.misc.Unsafe<\/code> dla dost\u0119pu do pami\u0119ci i technik SWAR (SIMD Within A Register) do szybkiego przetwarzania danych. Finalne optymalizacje obejmuj\u0105 za\u015b (z jednej strony) redukcje startu samej aplikacji, z drugiej za\u015b pr\u00f3by wykorzystania mechanizm\u00f3w &#8222;branch prediction&#8221;. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"284\" height=\"420\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-16.png\" alt=\"\" class=\"wp-image-17887\" style=\"width:394px;height:auto\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-16.png 284w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-16-203x300.png 203w\" sizes=\"auto, (max-width: 284px) 100vw, 284px\" \/><figcaption class=\"wp-element-caption\">Ciekawostka &#8211; to w\u0142a\u015bnie w celu unikni\u0119cia <a href=\"https:\/\/ubiquity.acm.org\/article.cfm?id=1513451\">tego typu optymalizacji<\/a> powsta\u0142o powiedzenie &#8222;Premature Optimization Is the Root of All Evil&#8221;. Nigdy nie by\u0142o zaproszeniem do pisania sloppy code. <\/figcaption><\/figure><\/div>\n\n\n<p>Warto tu wspomnie\u0107, \u017ce Mark Topolnik nie opisuje tutaj tylko swoich do\u015bwiadcze\u0144 &#8211; ca\u0142o\u015b\u0107 wyzwania odbywa\u0142a si\u0119 w ramach nowych PR-\u00f3w na GitHubie, wi\u0119c usprawnienia poszczeg\u00f3lnych uczestnik\u00f3w by\u0142y szybko adaptowane przez reszt\u0119 spo\u0142eczno\u015bci. To w\u0142a\u015bnie Mark opisa\u0142 ca\u0142o\u015b\u0107 jednak w bardzo przyst\u0119pny, \u0142atwy do zrozumienia spos\u00f3b. Nie jest on jednak tutaj jedynie kronikarzem &#8211; wyzwanie zako\u0144czy\u0142 w pierwszej dziesi\u0105tce, na bardzo wysokiej, si\u00f3dmej pozycji.<\/p>\n\n\n\n<p>W czasie 1BRC zadawano sobie pytanie &#8211; czy LLM maj\u0105 tutaj jakikolwiek start do do\u015bwiadczonych in\u017cynier\u00f3w (no bo w ko\u0144cu mamy 2024, to o czym mamy rozmawia\u0107). Ca\u0142o\u015b\u0107 sprawdzi\u0142 Antonio Goncalves, kt\u00f3ry <a href=\"https:\/\/devblogs.microsoft.com\/java\/entering-the-one-billion-row-challenge-with-github-copilot\/\">spr\u00f3bowa\u0142 zrealizowa\u0107 1BRC wykorzystuj\u0105c GitHub Copilot Chat<\/a>, by zbada\u0107, jak mo\u017ce on pom\u00f3c w w tak specyficznym przypadku optymalizacji wydajno\u015bci kodu aplikacji. Wykorzystuj\u0105c g\u0142\u00f3wnie Copilot Chat do zadawania pyta\u0144 i otrzymywania odpowiedzi bezpo\u015brednio w \u015brodowisku IDE, Antonio skupi\u0142 si\u0119&nbsp;na iteracyjnych poprawkach oryginalnego algorytmu (kt\u00f3rego wykonanie zajmowa\u0142o 4 minuty i 50 sekund). Dzi\u0119ki poprawkom, kt\u00f3re podobnie jak Mark opisuje krok po kroku, Antonio zdo\u0142a\u0142 uruchomi\u0107 sw\u00f3j kod poni\u017cej minuty na swoim komputerze Mac M1, co jak \u0142atwo policzy\u0107 by\u0142o znacz\u0105cym osi\u0105gni\u0119ciem w por\u00f3wnaniu do bazowego algorytmu. Chocia\u017c autor mia\u0142 apetyt na wi\u0119cej, to dalej oceni\u0142 GitHub Copilot Chat jako ca\u0142kiem warto\u015bciowe rozwi\u0105zanie, gdy\u017c jak twierdzi Narz\u0119dzie to nie tylko przyspieszy\u0142o rozw\u00f3j funkcjonalnego algorytmu, ale tak\u017ce u\u0142atwi\u0142o jego optymalizacj\u0119 i dostosowanie do \u015brodowiska JVM.<\/p>\n\n\n\n<p>Ale 1BRC zdoby\u0142o te\u017c zainteresowanie os\u00f3b niezbyt zaawansowanych w Javie (a przynajmniej nie na tyle, by \u015bciga\u0107 si\u0119 o czo\u0142owe miejsca), dzi\u0119ki czemu dostali\u015bmy kilka innych, ciekawych publikacji. Przyk\u0142adowo Gerald Venzl i Connor McDonald przeanalizowali, w jaki spos\u00f3b mo\u017cna efektywnie przechowywa\u0107 zbiory danych podobne do tego zaprezentowanego w 1BRC. Skupili si\u0119 oni na wykorzystaniu bazy danych i analizie, jak serwer bazy danych mo\u017ce by\u0107 skalowany do szybkiego przetwarzania danych. Gerald najpierw w swojej publikacji <a href=\"https:\/\/geraldonit.com\/2024\/01\/31\/1-billion-row-challenge-in-sql-and-oracle-database\/\">1 billion row challenge in SQL and Oracle Database<\/a> zszed\u0142 poni\u017cej 5 sekund (r\u00f3wnie\u017c dok\u0142adnie opisuj\u0105c ca\u0142o\u015b\u0107 krok po kroku), a <a href=\"https:\/\/connor-mcdonald.com\/2024\/02\/03\/one-billion-rows-geralds-challenge\/\">nast\u0119pnie Connor<\/a>, wykorzystuj\u0105c technologi\u0119 In-Memory do przyspieszenia zapyta\u0144 analitycznych i odpowiednie ustawienia stopnia r\u00f3wnoleg\u0142o\u015bci, uda\u0142o mu si\u0119 przetworzy\u0107 miliard wierszy w mniej ni\u017c sekund\u0119&#8230; na standardowym laptopie z 16 GB RAM (aczkolwiek nie uda\u0142o mi si\u0119 dogrzeba\u0107, jaki to by\u0142 model). Szale\u0144stwo.<\/p>\n\n\n\n<p>A na ko\u0144cu &#8211; Go. Ben Hoyt z Canonicala postanowi\u0142 <a href=\"https:\/\/benhoyt.com\/writings\/go-1brc\/\">opisa\u0107 swoje rozwi\u0105zanie w Go<\/a> i por\u00f3wna\u0107 go do Javy, aby rzuci\u0107 \u015bwiat\u0142o na r\u00f3\u017cnice w ekosystemach obu j\u0119zyk\u00f3w, zw\u0142aszcza pod k\u0105tem optymalizacji i wydajno\u015bci. Zalet\u0105 tekstu jest te\u017c to, \u017ce autor (jak jego poprzednicy zreszt\u0105) przeprowadza czytelnika przez kolejne iteracje swojego podej\u015bcia. Ben skupia\u0142 si\u0119 na wykorzystaniu standardowej biblioteki Go bez uciekania si\u0119 do niskopoziomowych operacji czy zewn\u0119trznych narz\u0119dzi, takich jak pliki mapowane w pami\u0119ci. Dzi\u0119ki iteracyjnym optymalizacjom, autor zdo\u0142a\u0142 zmniejszy\u0107 czas przetwarzania z 1 minuty 45 sekund (rozwi\u0105zanie naiwne) do zaledwie 3,4 sekundy. Autor konkluduje, \u017ce dzi\u0119ki wykorzystaniu zaawansowanych technik i optymalizacji specyficznych dla JVM  (gdzie najszybsze rozwi\u0105zanie osi\u0105gn\u0119\u0142o czas poni\u017cej sekundy), mo\u017ce oferowa\u0107 wy\u017csz\u0105 wydajno\u015b\u0107. Go, z jego naciskiem na prostot\u0119 i czytelno\u015b\u0107, dalej zapewni\u0142 bardzo szybkie rozwi\u0105zanie jest ono nad wyraz zrozumia\u0142e, nawet dla kogo\u015b kto nie programuje na codzie\u0144 w tym j\u0119zyku. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"677\" height=\"1024\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-19-677x1024.png\" alt=\"\" class=\"wp-image-17896\" style=\"width:427px;height:auto\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-19-677x1024.png 677w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-19-198x300.png 198w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-19-768x1162.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-19-1015x1536.png 1015w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-19.png 1025w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><figcaption class=\"wp-element-caption\">Czekam, a\u017c za par\u0119 lat po prawej stronie stanie niebieski dinozaur.<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"3-netflix-dzieli-sie-doswiadczeniami-z-uzycia-zgc\" data-num=3>3. Netflix dzieli si\u0119 do\u015bwiadczeniami z u\u017cycia ZGC<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"585\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-13-1024x585.png\" alt=\"\" class=\"wp-image-17879\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-13-1024x585.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-13-300x171.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-13-768x439.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-13-1536x878.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-13.png 1792w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Nie raz spotykam si\u0119 z pytaniem, kto tak naprawd\u0119 u\u017cywa tych wszystkich nowych funkcjonalno\u015bci Javy i czy istniej\u0105 jakie\u015b casy pokazuj\u0105ce, na ile sprawdzaj\u0105 si\u0119 one w \u015brodowisku produkcyjnym. Dopiero co tydzie\u0144 temu pisa\u0142em, \u017ce tw\u00f3rcy JDK powoli my\u015bl\u0105 o pozbyciu si\u0119 nie-generacyjnego wariantu ZGC, pozostawiaj\u0105c jedynie dopiero co wprowadzony w JDK 21 wariant generacyjny, ale trudno si\u0119 dziwi\u0107. Patrz\u0105c na do\u015bwiadczenia Netflixa, nowa wersja wysz\u0142a im lepiej ni\u017c dobrze.<\/p>\n\n\n\n<p>Netflix podzieli\u0142 si\u0119 bowiem efektami przeniesienia si\u0119 z G1 na Generational ZGC. Artyku\u0142 <a href=\"https:\/\/netflixtechblog.com\/bending-pause-times-to-your-will-with-generational-zgc-256629c9386b\">Bending pause times to your will with Generational ZGC<\/a> pokazuje zmiana znacz\u0105co podnios\u0142a wydajno\u015b\u0107 kluczowych us\u0142ug do streamingu wideo, z ponad po\u0142ow\u0105 z nich dzia\u0142a obecnie na JDK 21 i korzystaj\u0105cych z redukcji latencji request\u00f3w P99+ (przy skali Netflix nawet dalsze percentyle to wci\u0105\u017c olbrzymi wolumen u\u017cytkownik\u00f3w) oraz eliminacji przerw spowodowanych przez garbage collecting. Minimalizuj\u0105c te przerwy, Netflix nie tylko zmniejszy\u0142 ilo\u015b\u0107 timeout\u00f3w, ale tak\u017ce uzyska\u0142 ja\u015bniejszy wgl\u0105d w rzeczywiste \u017ar\u00f3d\u0142a op\u00f3\u017anie\u0144, co pozwala im dalej optymalizowa\u0107 wydajno\u015b\u0107 us\u0142ugi.<\/p>\n\n\n\n<p>Co ciekawe, Danny Thomas, tw\u00f3rca artyku\u0142u, wskazuje, \u017ce praktycznie nie wi\u0105\u017c\u0119 si\u0119 to z \u017cadnymi trade-offami, co jest w software engineeringu jakim\u015b ewenementem. Adopcja Generational ZGC przynios\u0142a bowiem r\u00f3wnie\u017c operacyjn\u0105 efektywno\u015b\u0107, a JVM Ecosystem Team Netflixa obserwuje teraz takie samo lub nawet lepsz\u0105 wykorzystanie CPU dla tego samego obci\u0105\u017cenia w por\u00f3wnaniu do G1. Nie wyst\u0119puj\u0105 te\u017c oczekiwane kompromisy w przepustowo\u015bci aplikacji, i to nawet na konfiguracji domy\u015blnej ZGC, kt\u00f3ry to nie wymagaj\u0105 jawnego dostrojenia i wraz z jego zdolno\u015bci\u0105 do obs\u0142ugi r\u00f3\u017cnorodnych obci\u0105\u017ce\u0144 z konsekwentnie dobr\u0105 wydajno\u015bci\u0105. Chocia\u017c uznaj\u0105c, \u017ce ZGC mo\u017ce nie nadawa\u0107 si\u0119 do wszystkich obci\u0105\u017ce\u0144, szczeg\u00f3lnie tych zorientowanych na przepustowo\u015b\u0107 z sporadycznymi wska\u017anikami alokacji, jest to raczej szukanie dziury w ca\u0142ym. Case Netflixa pokazuje, \u017ce tw\u00f3rcy Generational ZGC rzeczywi\u015bcie wprowadzaj\u0105c ostatnie zmiany zrobili kawa\u0142 dobrej roboty. Za ka\u017cdym razem, kiedy macie swoj\u0105 sesje Binge Watchingu, mo\u017cecie mie\u0107 z ty\u0142u g\u0142owy, \u017ce Wasze do\u015bwiadczenie jest nieco lepsze w\u0142a\u015bnie dzi\u0119ki ZGC.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"759\" height=\"422\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-14.png\" alt=\"\" class=\"wp-image-17882\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-14.png 759w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-14-300x167.png 300w\" sizes=\"auto, (max-width: 759px) 100vw, 759px\" \/><figcaption class=\"wp-element-caption\">Przy czym &#8222;lepsze&#8221; w kontek\u015bcie 8 godzinnego maratonu jest poj\u0119ciem nieco dyskusyjnym.<\/figcaption><\/figure><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>And finally something private from me: I had the opportunity along with Frank Delporte to be a technical reviewer of Otavio Santana new book <a href=\"https:\/\/www.packtpub.com\/product\/mastering-the-java-virtual-machine\/9781835467961\">Mastering the Java Virtual Machine<\/a> &#8211; and it&#8217;s a very good book, so I&#8217;m sharing it with my network.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-15-1024x768.png\" alt=\"\" class=\"wp-image-17884\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-15-1024x768.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-15-300x225.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-15-768x576.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-15-1536x1152.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-15.png 1655w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>In his work, Otavio tackles the challenging topic of bringing readers closer to the technological and business horizon associated with the Java Virtual Machine. This is a rather niche subject, which in my opinion, should not be &#8211; because the JVM is perhaps the most interesting aspect of the entire Java ecosystem and its family languages &#8211; you may have noticed by reading this newsletter that this is my cup of tea.<\/p>\n\n\n\n<p>PS: This is not a paid promotion (shame that it always has to be added on the internet), the topic is simply really interesting, and since I had the opportunity to get acquainted with the whole thing at a very early stage and I was able to add at least tiny bit to the overall experience, I&#8217;m sharing the good news further!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dzisiaj mamy tematy bezpiecze\u0144stwa rodem z USA, kontynuacje (i pewnie ju\u017c podsumowanie) tematu 1BRC oraz ciekawy case od Netflix<\/p>\n","protected":false},"author":10,"featured_media":17903,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259,1],"tags":[],"class_list":["post-17873","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl","category-no-category"],"acf":{"estimated_reading_time":"9","feature_image_blog":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2.png","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105, w tym Jav\u0119 - JVM Weekly vol. 167 - 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\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105, w tym Jav\u0119 - JVM Weekly vol. 167 - Vived\" \/>\n<meta property=\"og:description\" content=\"Dzisiaj mamy tematy bezpiecze\u0144stwa rodem z USA, kontynuacje (i pewnie ju\u017c podsumowanie) tematu 1BRC oraz ciekawy case od Netflix\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-14T08:45:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-19T11:47:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1024x560.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"560\" \/>\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\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105, w tym Jav\u0119 &#8211; JVM Weekly vol. 167\",\"datePublished\":\"2024-03-14T08:45:38+00:00\",\"dateModified\":\"2024-03-19T11:47:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/\"},\"wordCount\":1954,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2.png\",\"articleSection\":[\"JVM\",\"No category\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/\",\"url\":\"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/\",\"name\":\"Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105, w tym Jav\u0119 - JVM Weekly vol. 167 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2.png\",\"datePublished\":\"2024-03-14T08:45:38+00:00\",\"dateModified\":\"2024-03-19T11:47:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2.png\",\"width\":1976,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105, w tym Jav\u0119 &#8211; JVM Weekly vol. 167\"}]},{\"@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":"Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105, w tym Jav\u0119 - JVM Weekly vol. 167 - 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\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/","og_locale":"pl_PL","og_type":"article","og_title":"Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105, w tym Jav\u0119 - JVM Weekly vol. 167 - Vived","og_description":"Dzisiaj mamy tematy bezpiecze\u0144stwa rodem z USA, kontynuacje (i pewnie ju\u017c podsumowanie) tematu 1BRC oraz ciekawy case od Netflix","og_url":"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/","og_site_name":"Vived","article_published_time":"2024-03-14T08:45:38+00:00","article_modified_time":"2024-03-19T11:47:02+00:00","og_image":[{"width":1024,"height":560,"url":"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1024x560.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\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105, w tym Jav\u0119 &#8211; JVM Weekly vol. 167","datePublished":"2024-03-14T08:45:38+00:00","dateModified":"2024-03-19T11:47:02+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/"},"wordCount":1954,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2.png","articleSection":["JVM","No category"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/","url":"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/","name":"Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105, w tym Jav\u0119 - JVM Weekly vol. 167 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2.png","datePublished":"2024-03-14T08:45:38+00:00","dateModified":"2024-03-19T11:47:02+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2.png","width":1976,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/bialy-dom-rekomenduje-uzywanie-jezykow-z-bezpiecznym-zarzadzaniem-pamiecia-w-tym-jave-jvm-weekly-vol-164\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105, w tym Jav\u0119 &#8211; JVM Weekly vol. 167"}]},{"@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. Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105 - mi\u0119dzy innymi Javy<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">1. Bia\u0142y Dom rekomenduje u\u017cywanie j\u0119zyk\u00f3w z bezpiecznym zarz\u0105dzaniem pami\u0119ci\u0105 - mi\u0119dzy innymi Javy<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":17875,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-11-1024x585.png\" alt=\"\" class=\"wp-image-17875\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-11-1024x585.png\" alt=\"\" class=\"wp-image-17875\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dzisiaj zaczniemy od bardzo ciekawego og\u0142oszenia, prosto z Bia\u0142ego Domu. <\/p>\n","innerContent":["\n<p>Dzisiaj zaczniemy od bardzo ciekawego og\u0142oszenia, prosto z Bia\u0142ego Domu. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Administracja prezydenta USA Joe Bidena apeluje bowiem do programist\u00f3w o stosowanie bezpiecznych pod wzgl\u0119dem zarz\u0105dzania pami\u0119ci\u0105 j\u0119zyk\u00f3w programowania i rezygnacj\u0119 z j\u0119zyk\u00f3w podatnych na ataki, takich jak C i C++. Biuro Dyrektora Narodowego ds. Cyberbezpiecze\u0144stwa (ONCD) w <a href=\"https:\/\/www.whitehouse.gov\/wp-content\/uploads\/2024\/02\/Final-ONCD-Technical-Report.pdf\">wydanym raporcie<\/a> wzywa deweloper\u00f3w do zmniejszania ryzyka cyberatak\u00f3w poprzez wykorzystanie j\u0119zyk\u00f3w programowania chroni\u0105cych przed problemami bezpiecze\u0144stwa zwi\u0105zanymi z pami\u0119ci\u0105, takimi jak przepe\u0142nienia bufora, odczyty poza granicami oraz wycieki pami\u0119ci. Raport podkre\u015bla, \u017ce oko\u0142o 70% wszystkich luk bezpiecze\u0144stwa jest spowodowanych przez problemy z bezpiecze\u0144stwem pami\u0119ci, a zmiana na j\u0119zyki programowania bezpieczne pod wzgl\u0119dem zarz\u0105dzania pami\u0119ci\u0105 mo\u017ce zapobiec wprowadzaniu ca\u0142ych klas podatno\u015bci do ekosystemu cyfrowego.<\/p>\n","innerContent":["\n<p>Administracja prezydenta USA Joe Bidena apeluje bowiem do programist\u00f3w o stosowanie bezpiecznych pod wzgl\u0119dem zarz\u0105dzania pami\u0119ci\u0105 j\u0119zyk\u00f3w programowania i rezygnacj\u0119 z j\u0119zyk\u00f3w podatnych na ataki, takich jak C i C++. Biuro Dyrektora Narodowego ds. Cyberbezpiecze\u0144stwa (ONCD) w <a href=\"https:\/\/www.whitehouse.gov\/wp-content\/uploads\/2024\/02\/Final-ONCD-Technical-Report.pdf\">wydanym raporcie<\/a> wzywa deweloper\u00f3w do zmniejszania ryzyka cyberatak\u00f3w poprzez wykorzystanie j\u0119zyk\u00f3w programowania chroni\u0105cych przed problemami bezpiecze\u0144stwa zwi\u0105zanymi z pami\u0119ci\u0105, takimi jak przepe\u0142nienia bufora, odczyty poza granicami oraz wycieki pami\u0119ci. Raport podkre\u015bla, \u017ce oko\u0142o 70% wszystkich luk bezpiecze\u0144stwa jest spowodowanych przez problemy z bezpiecze\u0144stwem pami\u0119ci, a zmiana na j\u0119zyki programowania bezpieczne pod wzgl\u0119dem zarz\u0105dzania pami\u0119ci\u0105 mo\u017ce zapobiec wprowadzaniu ca\u0142ych klas podatno\u015bci do ekosystemu cyfrowego.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nowy raport ONCD wymienia Jav\u0119 jako przyk\u0142ad bezpiecznego j\u0119zyka programowania, podczas gdy C i C++ s\u0105 podane jako przyk\u0142ady j\u0119zyk\u00f3w z lukami w bezpiecze\u0144stwie pami\u0119ci. NSA w swojej informacji na temat cyberbezpiecze\u0144stwa wymienia r\u00f3wnie\u017c C#, Go, Rusta, Ruby i Swift jako j\u0119zyki uwa\u017cane za bezpieczne pod wzgl\u0119dem zarz\u0105dzania pami\u0119ci\u0105. Celem raportu jest przeniesienie odpowiedzialno\u015bci za cyberbezpiecze\u0144stwo z jednostek i ma\u0142ych firm na wi\u0119ksze organizacje i rz\u0105d USA, kt\u00f3re s\u0105 lepiej przygotowane do zarz\u0105dzania ci\u0105gle ewoluuj\u0105cymi zagro\u017ceniami. Eksperci podkre\u015blaj\u0105, \u017ce przej\u015bcie z C i C++ na inne j\u0119zyki b\u0119dzie d\u0142ugim i trudnym procesem, ale istniej\u0105ce alternatywy, ju\u017c teraz zyskuj\u0105 na popularno\u015bci, co mo\u017ce przyspieszy\u0107 ewolucj\u0119 w kierunku bezpieczniejszego kodowania. Ostatnio opublikowane Foreign Function and Memory (FFM) API, cho\u0107 nie wymienione z nazwy, bardzo dobrze wpisuje si\u0119 w ten trend.<\/p>\n","innerContent":["\n<p>Nowy raport ONCD wymienia Jav\u0119 jako przyk\u0142ad bezpiecznego j\u0119zyka programowania, podczas gdy C i C++ s\u0105 podane jako przyk\u0142ady j\u0119zyk\u00f3w z lukami w bezpiecze\u0144stwie pami\u0119ci. NSA w swojej informacji na temat cyberbezpiecze\u0144stwa wymienia r\u00f3wnie\u017c C#, Go, Rusta, Ruby i Swift jako j\u0119zyki uwa\u017cane za bezpieczne pod wzgl\u0119dem zarz\u0105dzania pami\u0119ci\u0105. Celem raportu jest przeniesienie odpowiedzialno\u015bci za cyberbezpiecze\u0144stwo z jednostek i ma\u0142ych firm na wi\u0119ksze organizacje i rz\u0105d USA, kt\u00f3re s\u0105 lepiej przygotowane do zarz\u0105dzania ci\u0105gle ewoluuj\u0105cymi zagro\u017ceniami. Eksperci podkre\u015blaj\u0105, \u017ce przej\u015bcie z C i C++ na inne j\u0119zyki b\u0119dzie d\u0142ugim i trudnym procesem, ale istniej\u0105ce alternatywy, ju\u017c teraz zyskuj\u0105 na popularno\u015bci, co mo\u017ce przyspieszy\u0107 ewolucj\u0119 w kierunku bezpieczniejszego kodowania. Ostatnio opublikowane Foreign Function and Memory (FFM) API, cho\u0107 nie wymienione z nazwy, bardzo dobrze wpisuje si\u0119 w ten trend.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17892,"width":"698px","height":"auto","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\/2024\/03\/image-18.png\" alt=\"\" class=\"wp-image-17892\" style=\"width:698px;height:auto\"\/><figcaption class=\"wp-element-caption\">Oczywi\u015bcie powy\u017csze rozumowanie ma pewne luki.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-18.png\" alt=\"\" class=\"wp-image-17892\" style=\"width:698px;height:auto\"\/><figcaption class=\"wp-element-caption\">Oczywi\u015bcie powy\u017csze rozumowanie ma pewne luki.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A jak ju\u017c si\u0119 pojawi\u0142 temat Rusta, to nie mog\u0119 sobie odm\u00f3wi\u0107 podrzucenia Wam miniaturki <a href=\"https:\/\/joshaustin.tech\/blog\/java-is-becoming-rust\/\">Java is becoming more like Rust, and I am here for it!<\/a>. Rust dla niekt\u00f3rych sta\u0142 si\u0119 standardem z\u0142ota (co dla innych jest pewnie do\u015b\u0107 kontrowersyjnym stwierdzeniem) ale Java te\u017c ewoluuje, o czym chyba nie musz\u0119 przekonywa\u0107 \u017cadnego z czytelnik\u00f3w tego newslettera. Z biegiem lat, j\u0119zyki te coraz bardziej zbli\u017caj\u0105 si\u0119 do siebie pod wieloma wzgl\u0119dami Przyk\u0142adami takich innowacji podawanych przez artyku\u0142 s\u0105 niemutowane Rekordy i Sealed Interfaces, u\u0142atwiaj\u0105ce modelowanie z\u0142o\u017conych typ\u00f3w danych. Dzi\u0119ki temu coraz wi\u0119cej mamy w naszym j\u0119zyku konstrukt\u00f3w z rodziny tak zwanych algebraiczne typy danych, umo\u017cliwiaj\u0105cych precyzyjne reprezentowanie stan\u00f3w i zachowa\u0144 i tak zwany Data-Oriented Programming. Kr\u00f3tki food for thought.<\/p>\n","innerContent":["\n<p>A jak ju\u017c si\u0119 pojawi\u0142 temat Rusta, to nie mog\u0119 sobie odm\u00f3wi\u0107 podrzucenia Wam miniaturki <a href=\"https:\/\/joshaustin.tech\/blog\/java-is-becoming-rust\/\">Java is becoming more like Rust, and I am here for it!<\/a>. Rust dla niekt\u00f3rych sta\u0142 si\u0119 standardem z\u0142ota (co dla innych jest pewnie do\u015b\u0107 kontrowersyjnym stwierdzeniem) ale Java te\u017c ewoluuje, o czym chyba nie musz\u0119 przekonywa\u0107 \u017cadnego z czytelnik\u00f3w tego newslettera. Z biegiem lat, j\u0119zyki te coraz bardziej zbli\u017caj\u0105 si\u0119 do siebie pod wieloma wzgl\u0119dami Przyk\u0142adami takich innowacji podawanych przez artyku\u0142 s\u0105 niemutowane Rekordy i Sealed Interfaces, u\u0142atwiaj\u0105ce modelowanie z\u0142o\u017conych typ\u00f3w danych. Dzi\u0119ki temu coraz wi\u0119cej mamy w naszym j\u0119zyku konstrukt\u00f3w z rodziny tak zwanych algebraiczne typy danych, umo\u017cliwiaj\u0105cych precyzyjne reprezentowanie stan\u00f3w i zachowa\u0144 i tak zwany Data-Oriented Programming. Kr\u00f3tki food for thought.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A je\u015bli chcecie lepiej zrozumie\u0107, o co chodzi z tym ca\u0142ym DOP, polecam podcast Adama Biena i odcinek <a href=\"https:\/\/airhacks.fm\/#episode_283\">From Hexagonal Architectures to Data Oriented Programming<\/a>, w kt\u00f3rym go\u015bci Jose Paumard i rozpracowuj\u0105 wsp\u00f3lnie ten temat.<\/p>\n","innerContent":["\n<p>A je\u015bli chcecie lepiej zrozumie\u0107, o co chodzi z tym ca\u0142ym DOP, polecam podcast Adama Biena i odcinek <a href=\"https:\/\/airhacks.fm\/#episode_283\">From Hexagonal Architectures to Data Oriented Programming<\/a>, w kt\u00f3rym go\u015bci Jose Paumard i rozpracowuj\u0105 wsp\u00f3lnie ten temat.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">2. To ju\u017c pewnie ostatni raz... ale wracamy do tematu 1BRC<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">2. To ju\u017c pewnie ostatni raz... ale wracamy do tematu 1BRC<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":17877,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-12-1024x585.png\" alt=\"\" class=\"wp-image-17877\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-12-1024x585.png\" alt=\"\" class=\"wp-image-17877\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wyzwania Miliarda Wierszy (1BRC), koncentruj\u0105ce si\u0119 na optymalizacji kodu Java w celu jak najszybszego przetworzenia 1 miliarda wierszy danych ze stacji meteorologicznej i obliczeniu minimalnej, \u015bredniej i maksymalnej temperatury, ju\u017c dawno za nami. Jednak nie przestaje ono rozpala\u0107 wyobra\u017ani spo\u0142eczno\u015bci, kt\u00f3ra wyprodukowa\u0142a ostatnimi czasy mas\u0119 artyku\u0142\u00f3w podsumowuj\u0105cych techniki u\u017cywane w ramach challenge. Dlatego postanowi\u0142em przygl\u0105dn\u0105\u0107 si\u0119 kwestii jeszcze jeden raz i podsumowa\u0107 te najciekawsze. <\/p>\n","innerContent":["\n<p>Wyzwania Miliarda Wierszy (1BRC), koncentruj\u0105ce si\u0119 na optymalizacji kodu Java w celu jak najszybszego przetworzenia 1 miliarda wierszy danych ze stacji meteorologicznej i obliczeniu minimalnej, \u015bredniej i maksymalnej temperatury, ju\u017c dawno za nami. Jednak nie przestaje ono rozpala\u0107 wyobra\u017ani spo\u0142eczno\u015bci, kt\u00f3ra wyprodukowa\u0142a ostatnimi czasy mas\u0119 artyku\u0142\u00f3w podsumowuj\u0105cych techniki u\u017cywane w ramach challenge. Dlatego postanowi\u0142em przygl\u0105dn\u0105\u0107 si\u0119 kwestii jeszcze jeden raz i podsumowa\u0107 te najciekawsze. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pierwsza z pozycji to artyku\u0142 <a href=\"https:\/\/questdb.io\/blog\/billion-row-challenge-step-by-step\/\">Marka Topolnika z QuestDB<\/a>, kt\u00f3ry szczeg\u00f3\u0142owo opisuje swoj\u0105 przygod\u0119 w ramach wyzwania - do\u015b\u0107 powiedzie\u0107, \u017ce jego \"naiwna\" wersja rozwi\u0105zania oparta o Java Streams pocz\u0105tkowo zajmowa\u0142a 71 sekund na przetworzenie. Lista p\u00f3\u017aniejszy opisywanych optymalizacji zawiera takie sztuczki, jak r\u00f3wnoleg\u0142ego przetwarzania I\/O czy bezpo\u015brednie parsowanie temperatur do liczb ca\u0142kowitych, poprzez wykorzystanie niestandardowych struktur danych dla danych (co r\u00f3wnie\u017c\u00a0\"make a difference), a\u017c po niskopoziomowe optymalizacje, takie jak u\u017cywanie <code>sun.misc.Unsafe<\/code> dla dost\u0119pu do pami\u0119ci i technik SWAR (SIMD Within A Register) do szybkiego przetwarzania danych. Finalne optymalizacje obejmuj\u0105 za\u015b (z jednej strony) redukcje startu samej aplikacji, z drugiej za\u015b pr\u00f3by wykorzystania mechanizm\u00f3w \"branch prediction\". <\/p>\n","innerContent":["\n<p>Pierwsza z pozycji to artyku\u0142 <a href=\"https:\/\/questdb.io\/blog\/billion-row-challenge-step-by-step\/\">Marka Topolnika z QuestDB<\/a>, kt\u00f3ry szczeg\u00f3\u0142owo opisuje swoj\u0105 przygod\u0119 w ramach wyzwania - do\u015b\u0107 powiedzie\u0107, \u017ce jego \"naiwna\" wersja rozwi\u0105zania oparta o Java Streams pocz\u0105tkowo zajmowa\u0142a 71 sekund na przetworzenie. Lista p\u00f3\u017aniejszy opisywanych optymalizacji zawiera takie sztuczki, jak r\u00f3wnoleg\u0142ego przetwarzania I\/O czy bezpo\u015brednie parsowanie temperatur do liczb ca\u0142kowitych, poprzez wykorzystanie niestandardowych struktur danych dla danych (co r\u00f3wnie\u017c\u00a0\"make a difference), a\u017c po niskopoziomowe optymalizacje, takie jak u\u017cywanie <code>sun.misc.Unsafe<\/code> dla dost\u0119pu do pami\u0119ci i technik SWAR (SIMD Within A Register) do szybkiego przetwarzania danych. Finalne optymalizacje obejmuj\u0105 za\u015b (z jednej strony) redukcje startu samej aplikacji, z drugiej za\u015b pr\u00f3by wykorzystania mechanizm\u00f3w \"branch prediction\". <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17887,"width":"394px","height":"auto","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\/2024\/03\/image-16.png\" alt=\"\" class=\"wp-image-17887\" style=\"width:394px;height:auto\"\/><figcaption class=\"wp-element-caption\">Ciekawostka - to w\u0142a\u015bnie w celu unikni\u0119cia <a href=\"https:\/\/ubiquity.acm.org\/article.cfm?id=1513451\">tego typu optymalizacji<\/a> powsta\u0142o powiedzenie \"Premature Optimization Is the Root of All Evil\". Nigdy nie by\u0142o zaproszeniem do pisania sloppy code. <\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-16.png\" alt=\"\" class=\"wp-image-17887\" style=\"width:394px;height:auto\"\/><figcaption class=\"wp-element-caption\">Ciekawostka - to w\u0142a\u015bnie w celu unikni\u0119cia <a href=\"https:\/\/ubiquity.acm.org\/article.cfm?id=1513451\">tego typu optymalizacji<\/a> powsta\u0142o powiedzenie \"Premature Optimization Is the Root of All Evil\". Nigdy nie by\u0142o zaproszeniem do pisania sloppy code. <\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Warto tu wspomnie\u0107, \u017ce Mark Topolnik nie opisuje tutaj tylko swoich do\u015bwiadcze\u0144 - ca\u0142o\u015b\u0107 wyzwania odbywa\u0142a si\u0119 w ramach nowych PR-\u00f3w na GitHubie, wi\u0119c usprawnienia poszczeg\u00f3lnych uczestnik\u00f3w by\u0142y szybko adaptowane przez reszt\u0119 spo\u0142eczno\u015bci. To w\u0142a\u015bnie Mark opisa\u0142 ca\u0142o\u015b\u0107 jednak w bardzo przyst\u0119pny, \u0142atwy do zrozumienia spos\u00f3b. Nie jest on jednak tutaj jedynie kronikarzem - wyzwanie zako\u0144czy\u0142 w pierwszej dziesi\u0105tce, na bardzo wysokiej, si\u00f3dmej pozycji.<\/p>\n","innerContent":["\n<p>Warto tu wspomnie\u0107, \u017ce Mark Topolnik nie opisuje tutaj tylko swoich do\u015bwiadcze\u0144 - ca\u0142o\u015b\u0107 wyzwania odbywa\u0142a si\u0119 w ramach nowych PR-\u00f3w na GitHubie, wi\u0119c usprawnienia poszczeg\u00f3lnych uczestnik\u00f3w by\u0142y szybko adaptowane przez reszt\u0119 spo\u0142eczno\u015bci. To w\u0142a\u015bnie Mark opisa\u0142 ca\u0142o\u015b\u0107 jednak w bardzo przyst\u0119pny, \u0142atwy do zrozumienia spos\u00f3b. Nie jest on jednak tutaj jedynie kronikarzem - wyzwanie zako\u0144czy\u0142 w pierwszej dziesi\u0105tce, na bardzo wysokiej, si\u00f3dmej pozycji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W czasie 1BRC zadawano sobie pytanie - czy LLM maj\u0105 tutaj jakikolwiek start do do\u015bwiadczonych in\u017cynier\u00f3w (no bo w ko\u0144cu mamy 2024, to o czym mamy rozmawia\u0107). Ca\u0142o\u015b\u0107 sprawdzi\u0142 Antonio Goncalves, kt\u00f3ry <a href=\"https:\/\/devblogs.microsoft.com\/java\/entering-the-one-billion-row-challenge-with-github-copilot\/\">spr\u00f3bowa\u0142 zrealizowa\u0107 1BRC wykorzystuj\u0105c GitHub Copilot Chat<\/a>, by zbada\u0107, jak mo\u017ce on pom\u00f3c w w tak specyficznym przypadku optymalizacji wydajno\u015bci kodu aplikacji. Wykorzystuj\u0105c g\u0142\u00f3wnie Copilot Chat do zadawania pyta\u0144 i otrzymywania odpowiedzi bezpo\u015brednio w \u015brodowisku IDE, Antonio skupi\u0142 si\u0119&nbsp;na iteracyjnych poprawkach oryginalnego algorytmu (kt\u00f3rego wykonanie zajmowa\u0142o 4 minuty i 50 sekund). Dzi\u0119ki poprawkom, kt\u00f3re podobnie jak Mark opisuje krok po kroku, Antonio zdo\u0142a\u0142 uruchomi\u0107 sw\u00f3j kod poni\u017cej minuty na swoim komputerze Mac M1, co jak \u0142atwo policzy\u0107 by\u0142o znacz\u0105cym osi\u0105gni\u0119ciem w por\u00f3wnaniu do bazowego algorytmu. Chocia\u017c autor mia\u0142 apetyt na wi\u0119cej, to dalej oceni\u0142 GitHub Copilot Chat jako ca\u0142kiem warto\u015bciowe rozwi\u0105zanie, gdy\u017c jak twierdzi Narz\u0119dzie to nie tylko przyspieszy\u0142o rozw\u00f3j funkcjonalnego algorytmu, ale tak\u017ce u\u0142atwi\u0142o jego optymalizacj\u0119 i dostosowanie do \u015brodowiska JVM.<\/p>\n","innerContent":["\n<p>W czasie 1BRC zadawano sobie pytanie - czy LLM maj\u0105 tutaj jakikolwiek start do do\u015bwiadczonych in\u017cynier\u00f3w (no bo w ko\u0144cu mamy 2024, to o czym mamy rozmawia\u0107). Ca\u0142o\u015b\u0107 sprawdzi\u0142 Antonio Goncalves, kt\u00f3ry <a href=\"https:\/\/devblogs.microsoft.com\/java\/entering-the-one-billion-row-challenge-with-github-copilot\/\">spr\u00f3bowa\u0142 zrealizowa\u0107 1BRC wykorzystuj\u0105c GitHub Copilot Chat<\/a>, by zbada\u0107, jak mo\u017ce on pom\u00f3c w w tak specyficznym przypadku optymalizacji wydajno\u015bci kodu aplikacji. Wykorzystuj\u0105c g\u0142\u00f3wnie Copilot Chat do zadawania pyta\u0144 i otrzymywania odpowiedzi bezpo\u015brednio w \u015brodowisku IDE, Antonio skupi\u0142 si\u0119&nbsp;na iteracyjnych poprawkach oryginalnego algorytmu (kt\u00f3rego wykonanie zajmowa\u0142o 4 minuty i 50 sekund). Dzi\u0119ki poprawkom, kt\u00f3re podobnie jak Mark opisuje krok po kroku, Antonio zdo\u0142a\u0142 uruchomi\u0107 sw\u00f3j kod poni\u017cej minuty na swoim komputerze Mac M1, co jak \u0142atwo policzy\u0107 by\u0142o znacz\u0105cym osi\u0105gni\u0119ciem w por\u00f3wnaniu do bazowego algorytmu. Chocia\u017c autor mia\u0142 apetyt na wi\u0119cej, to dalej oceni\u0142 GitHub Copilot Chat jako ca\u0142kiem warto\u015bciowe rozwi\u0105zanie, gdy\u017c jak twierdzi Narz\u0119dzie to nie tylko przyspieszy\u0142o rozw\u00f3j funkcjonalnego algorytmu, ale tak\u017ce u\u0142atwi\u0142o jego optymalizacj\u0119 i dostosowanie do \u015brodowiska JVM.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ale 1BRC zdoby\u0142o te\u017c zainteresowanie os\u00f3b niezbyt zaawansowanych w Javie (a przynajmniej nie na tyle, by \u015bciga\u0107 si\u0119 o czo\u0142owe miejsca), dzi\u0119ki czemu dostali\u015bmy kilka innych, ciekawych publikacji. Przyk\u0142adowo Gerald Venzl i Connor McDonald przeanalizowali, w jaki spos\u00f3b mo\u017cna efektywnie przechowywa\u0107 zbiory danych podobne do tego zaprezentowanego w 1BRC. Skupili si\u0119 oni na wykorzystaniu bazy danych i analizie, jak serwer bazy danych mo\u017ce by\u0107 skalowany do szybkiego przetwarzania danych. Gerald najpierw w swojej publikacji <a href=\"https:\/\/geraldonit.com\/2024\/01\/31\/1-billion-row-challenge-in-sql-and-oracle-database\/\">1 billion row challenge in SQL and Oracle Database<\/a> zszed\u0142 poni\u017cej 5 sekund (r\u00f3wnie\u017c dok\u0142adnie opisuj\u0105c ca\u0142o\u015b\u0107 krok po kroku), a <a href=\"https:\/\/connor-mcdonald.com\/2024\/02\/03\/one-billion-rows-geralds-challenge\/\">nast\u0119pnie Connor<\/a>, wykorzystuj\u0105c technologi\u0119 In-Memory do przyspieszenia zapyta\u0144 analitycznych i odpowiednie ustawienia stopnia r\u00f3wnoleg\u0142o\u015bci, uda\u0142o mu si\u0119 przetworzy\u0107 miliard wierszy w mniej ni\u017c sekund\u0119... na standardowym laptopie z 16 GB RAM (aczkolwiek nie uda\u0142o mi si\u0119 dogrzeba\u0107, jaki to by\u0142 model). Szale\u0144stwo.<\/p>\n","innerContent":["\n<p>Ale 1BRC zdoby\u0142o te\u017c zainteresowanie os\u00f3b niezbyt zaawansowanych w Javie (a przynajmniej nie na tyle, by \u015bciga\u0107 si\u0119 o czo\u0142owe miejsca), dzi\u0119ki czemu dostali\u015bmy kilka innych, ciekawych publikacji. Przyk\u0142adowo Gerald Venzl i Connor McDonald przeanalizowali, w jaki spos\u00f3b mo\u017cna efektywnie przechowywa\u0107 zbiory danych podobne do tego zaprezentowanego w 1BRC. Skupili si\u0119 oni na wykorzystaniu bazy danych i analizie, jak serwer bazy danych mo\u017ce by\u0107 skalowany do szybkiego przetwarzania danych. Gerald najpierw w swojej publikacji <a href=\"https:\/\/geraldonit.com\/2024\/01\/31\/1-billion-row-challenge-in-sql-and-oracle-database\/\">1 billion row challenge in SQL and Oracle Database<\/a> zszed\u0142 poni\u017cej 5 sekund (r\u00f3wnie\u017c dok\u0142adnie opisuj\u0105c ca\u0142o\u015b\u0107 krok po kroku), a <a href=\"https:\/\/connor-mcdonald.com\/2024\/02\/03\/one-billion-rows-geralds-challenge\/\">nast\u0119pnie Connor<\/a>, wykorzystuj\u0105c technologi\u0119 In-Memory do przyspieszenia zapyta\u0144 analitycznych i odpowiednie ustawienia stopnia r\u00f3wnoleg\u0142o\u015bci, uda\u0142o mu si\u0119 przetworzy\u0107 miliard wierszy w mniej ni\u017c sekund\u0119... na standardowym laptopie z 16 GB RAM (aczkolwiek nie uda\u0142o mi si\u0119 dogrzeba\u0107, jaki to by\u0142 model). Szale\u0144stwo.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na ko\u0144cu - Go. Ben Hoyt z Canonicala postanowi\u0142 <a href=\"https:\/\/benhoyt.com\/writings\/go-1brc\/\">opisa\u0107 swoje rozwi\u0105zanie w Go<\/a> i por\u00f3wna\u0107 go do Javy, aby rzuci\u0107 \u015bwiat\u0142o na r\u00f3\u017cnice w ekosystemach obu j\u0119zyk\u00f3w, zw\u0142aszcza pod k\u0105tem optymalizacji i wydajno\u015bci. Zalet\u0105 tekstu jest te\u017c to, \u017ce autor (jak jego poprzednicy zreszt\u0105) przeprowadza czytelnika przez kolejne iteracje swojego podej\u015bcia. Ben skupia\u0142 si\u0119 na wykorzystaniu standardowej biblioteki Go bez uciekania si\u0119 do niskopoziomowych operacji czy zewn\u0119trznych narz\u0119dzi, takich jak pliki mapowane w pami\u0119ci. Dzi\u0119ki iteracyjnym optymalizacjom, autor zdo\u0142a\u0142 zmniejszy\u0107 czas przetwarzania z 1 minuty 45 sekund (rozwi\u0105zanie naiwne) do zaledwie 3,4 sekundy. Autor konkluduje, \u017ce dzi\u0119ki wykorzystaniu zaawansowanych technik i optymalizacji specyficznych dla JVM  (gdzie najszybsze rozwi\u0105zanie osi\u0105gn\u0119\u0142o czas poni\u017cej sekundy), mo\u017ce oferowa\u0107 wy\u017csz\u0105 wydajno\u015b\u0107. Go, z jego naciskiem na prostot\u0119 i czytelno\u015b\u0107, dalej zapewni\u0142 bardzo szybkie rozwi\u0105zanie jest ono nad wyraz zrozumia\u0142e, nawet dla kogo\u015b kto nie programuje na codzie\u0144 w tym j\u0119zyku. <\/p>\n","innerContent":["\n<p>A na ko\u0144cu - Go. Ben Hoyt z Canonicala postanowi\u0142 <a href=\"https:\/\/benhoyt.com\/writings\/go-1brc\/\">opisa\u0107 swoje rozwi\u0105zanie w Go<\/a> i por\u00f3wna\u0107 go do Javy, aby rzuci\u0107 \u015bwiat\u0142o na r\u00f3\u017cnice w ekosystemach obu j\u0119zyk\u00f3w, zw\u0142aszcza pod k\u0105tem optymalizacji i wydajno\u015bci. Zalet\u0105 tekstu jest te\u017c to, \u017ce autor (jak jego poprzednicy zreszt\u0105) przeprowadza czytelnika przez kolejne iteracje swojego podej\u015bcia. Ben skupia\u0142 si\u0119 na wykorzystaniu standardowej biblioteki Go bez uciekania si\u0119 do niskopoziomowych operacji czy zewn\u0119trznych narz\u0119dzi, takich jak pliki mapowane w pami\u0119ci. Dzi\u0119ki iteracyjnym optymalizacjom, autor zdo\u0142a\u0142 zmniejszy\u0107 czas przetwarzania z 1 minuty 45 sekund (rozwi\u0105zanie naiwne) do zaledwie 3,4 sekundy. Autor konkluduje, \u017ce dzi\u0119ki wykorzystaniu zaawansowanych technik i optymalizacji specyficznych dla JVM  (gdzie najszybsze rozwi\u0105zanie osi\u0105gn\u0119\u0142o czas poni\u017cej sekundy), mo\u017ce oferowa\u0107 wy\u017csz\u0105 wydajno\u015b\u0107. Go, z jego naciskiem na prostot\u0119 i czytelno\u015b\u0107, dalej zapewni\u0142 bardzo szybkie rozwi\u0105zanie jest ono nad wyraz zrozumia\u0142e, nawet dla kogo\u015b kto nie programuje na codzie\u0144 w tym j\u0119zyku. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17896,"width":"427px","height":"auto","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\/2024\/03\/image-19-677x1024.png\" alt=\"\" class=\"wp-image-17896\" style=\"width:427px;height:auto\"\/><figcaption class=\"wp-element-caption\">Czekam, a\u017c za par\u0119 lat po prawej stronie stanie niebieski dinozaur.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-19-677x1024.png\" alt=\"\" class=\"wp-image-17896\" style=\"width:427px;height:auto\"\/><figcaption class=\"wp-element-caption\">Czekam, a\u017c za par\u0119 lat po prawej stronie stanie niebieski dinozaur.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">3. Netflix dzieli si\u0119 do\u015bwiadczeniami z u\u017cycia ZGC<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">3. Netflix dzieli si\u0119 do\u015bwiadczeniami z u\u017cycia ZGC<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":17879,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-13-1024x585.png\" alt=\"\" class=\"wp-image-17879\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-13-1024x585.png\" alt=\"\" class=\"wp-image-17879\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nie raz spotykam si\u0119 z pytaniem, kto tak naprawd\u0119 u\u017cywa tych wszystkich nowych funkcjonalno\u015bci Javy i czy istniej\u0105 jakie\u015b casy pokazuj\u0105ce, na ile sprawdzaj\u0105 si\u0119 one w \u015brodowisku produkcyjnym. Dopiero co tydzie\u0144 temu pisa\u0142em, \u017ce tw\u00f3rcy JDK powoli my\u015bl\u0105 o pozbyciu si\u0119 nie-generacyjnego wariantu ZGC, pozostawiaj\u0105c jedynie dopiero co wprowadzony w JDK 21 wariant generacyjny, ale trudno si\u0119 dziwi\u0107. Patrz\u0105c na do\u015bwiadczenia Netflixa, nowa wersja wysz\u0142a im lepiej ni\u017c dobrze.<\/p>\n","innerContent":["\n<p>Nie raz spotykam si\u0119 z pytaniem, kto tak naprawd\u0119 u\u017cywa tych wszystkich nowych funkcjonalno\u015bci Javy i czy istniej\u0105 jakie\u015b casy pokazuj\u0105ce, na ile sprawdzaj\u0105 si\u0119 one w \u015brodowisku produkcyjnym. Dopiero co tydzie\u0144 temu pisa\u0142em, \u017ce tw\u00f3rcy JDK powoli my\u015bl\u0105 o pozbyciu si\u0119 nie-generacyjnego wariantu ZGC, pozostawiaj\u0105c jedynie dopiero co wprowadzony w JDK 21 wariant generacyjny, ale trudno si\u0119 dziwi\u0107. Patrz\u0105c na do\u015bwiadczenia Netflixa, nowa wersja wysz\u0142a im lepiej ni\u017c dobrze.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Netflix podzieli\u0142 si\u0119 bowiem efektami przeniesienia si\u0119 z G1 na Generational ZGC. Artyku\u0142 <a href=\"https:\/\/netflixtechblog.com\/bending-pause-times-to-your-will-with-generational-zgc-256629c9386b\">Bending pause times to your will with Generational ZGC<\/a> pokazuje zmiana znacz\u0105co podnios\u0142a wydajno\u015b\u0107 kluczowych us\u0142ug do streamingu wideo, z ponad po\u0142ow\u0105 z nich dzia\u0142a obecnie na JDK 21 i korzystaj\u0105cych z redukcji latencji request\u00f3w P99+ (przy skali Netflix nawet dalsze percentyle to wci\u0105\u017c olbrzymi wolumen u\u017cytkownik\u00f3w) oraz eliminacji przerw spowodowanych przez garbage collecting. Minimalizuj\u0105c te przerwy, Netflix nie tylko zmniejszy\u0142 ilo\u015b\u0107 timeout\u00f3w, ale tak\u017ce uzyska\u0142 ja\u015bniejszy wgl\u0105d w rzeczywiste \u017ar\u00f3d\u0142a op\u00f3\u017anie\u0144, co pozwala im dalej optymalizowa\u0107 wydajno\u015b\u0107 us\u0142ugi.<\/p>\n","innerContent":["\n<p>Netflix podzieli\u0142 si\u0119 bowiem efektami przeniesienia si\u0119 z G1 na Generational ZGC. Artyku\u0142 <a href=\"https:\/\/netflixtechblog.com\/bending-pause-times-to-your-will-with-generational-zgc-256629c9386b\">Bending pause times to your will with Generational ZGC<\/a> pokazuje zmiana znacz\u0105co podnios\u0142a wydajno\u015b\u0107 kluczowych us\u0142ug do streamingu wideo, z ponad po\u0142ow\u0105 z nich dzia\u0142a obecnie na JDK 21 i korzystaj\u0105cych z redukcji latencji request\u00f3w P99+ (przy skali Netflix nawet dalsze percentyle to wci\u0105\u017c olbrzymi wolumen u\u017cytkownik\u00f3w) oraz eliminacji przerw spowodowanych przez garbage collecting. Minimalizuj\u0105c te przerwy, Netflix nie tylko zmniejszy\u0142 ilo\u015b\u0107 timeout\u00f3w, ale tak\u017ce uzyska\u0142 ja\u015bniejszy wgl\u0105d w rzeczywiste \u017ar\u00f3d\u0142a op\u00f3\u017anie\u0144, co pozwala im dalej optymalizowa\u0107 wydajno\u015b\u0107 us\u0142ugi.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co ciekawe, Danny Thomas, tw\u00f3rca artyku\u0142u, wskazuje, \u017ce praktycznie nie wi\u0105\u017c\u0119 si\u0119 to z \u017cadnymi trade-offami, co jest w software engineeringu jakim\u015b ewenementem. Adopcja Generational ZGC przynios\u0142a bowiem r\u00f3wnie\u017c operacyjn\u0105 efektywno\u015b\u0107, a JVM Ecosystem Team Netflixa obserwuje teraz takie samo lub nawet lepsz\u0105 wykorzystanie CPU dla tego samego obci\u0105\u017cenia w por\u00f3wnaniu do G1. Nie wyst\u0119puj\u0105 te\u017c oczekiwane kompromisy w przepustowo\u015bci aplikacji, i to nawet na konfiguracji domy\u015blnej ZGC, kt\u00f3ry to nie wymagaj\u0105 jawnego dostrojenia i wraz z jego zdolno\u015bci\u0105 do obs\u0142ugi r\u00f3\u017cnorodnych obci\u0105\u017ce\u0144 z konsekwentnie dobr\u0105 wydajno\u015bci\u0105. Chocia\u017c uznaj\u0105c, \u017ce ZGC mo\u017ce nie nadawa\u0107 si\u0119 do wszystkich obci\u0105\u017ce\u0144, szczeg\u00f3lnie tych zorientowanych na przepustowo\u015b\u0107 z sporadycznymi wska\u017anikami alokacji, jest to raczej szukanie dziury w ca\u0142ym. Case Netflixa pokazuje, \u017ce tw\u00f3rcy Generational ZGC rzeczywi\u015bcie wprowadzaj\u0105c ostatnie zmiany zrobili kawa\u0142 dobrej roboty. Za ka\u017cdym razem, kiedy macie swoj\u0105 sesje Binge Watchingu, mo\u017cecie mie\u0107 z ty\u0142u g\u0142owy, \u017ce Wasze do\u015bwiadczenie jest nieco lepsze w\u0142a\u015bnie dzi\u0119ki ZGC.<\/p>\n","innerContent":["\n<p>Co ciekawe, Danny Thomas, tw\u00f3rca artyku\u0142u, wskazuje, \u017ce praktycznie nie wi\u0105\u017c\u0119 si\u0119 to z \u017cadnymi trade-offami, co jest w software engineeringu jakim\u015b ewenementem. Adopcja Generational ZGC przynios\u0142a bowiem r\u00f3wnie\u017c operacyjn\u0105 efektywno\u015b\u0107, a JVM Ecosystem Team Netflixa obserwuje teraz takie samo lub nawet lepsz\u0105 wykorzystanie CPU dla tego samego obci\u0105\u017cenia w por\u00f3wnaniu do G1. Nie wyst\u0119puj\u0105 te\u017c oczekiwane kompromisy w przepustowo\u015bci aplikacji, i to nawet na konfiguracji domy\u015blnej ZGC, kt\u00f3ry to nie wymagaj\u0105 jawnego dostrojenia i wraz z jego zdolno\u015bci\u0105 do obs\u0142ugi r\u00f3\u017cnorodnych obci\u0105\u017ce\u0144 z konsekwentnie dobr\u0105 wydajno\u015bci\u0105. Chocia\u017c uznaj\u0105c, \u017ce ZGC mo\u017ce nie nadawa\u0107 si\u0119 do wszystkich obci\u0105\u017ce\u0144, szczeg\u00f3lnie tych zorientowanych na przepustowo\u015b\u0107 z sporadycznymi wska\u017anikami alokacji, jest to raczej szukanie dziury w ca\u0142ym. Case Netflixa pokazuje, \u017ce tw\u00f3rcy Generational ZGC rzeczywi\u015bcie wprowadzaj\u0105c ostatnie zmiany zrobili kawa\u0142 dobrej roboty. Za ka\u017cdym razem, kiedy macie swoj\u0105 sesje Binge Watchingu, mo\u017cecie mie\u0107 z ty\u0142u g\u0142owy, \u017ce Wasze do\u015bwiadczenie jest nieco lepsze w\u0142a\u015bnie dzi\u0119ki ZGC.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17882,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-14.png\" alt=\"\" class=\"wp-image-17882\"\/><figcaption class=\"wp-element-caption\">Przy czym \"lepsze\" w kontek\u015bcie 8 godzinnego maratonu jest poj\u0119ciem nieco dyskusyjnym.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-14.png\" alt=\"\" class=\"wp-image-17882\"\/><figcaption class=\"wp-element-caption\">Przy czym \"lepsze\" w kontek\u015bcie 8 godzinnego maratonu jest poj\u0119ciem nieco dyskusyjnym.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>And finally something private from me: I had the opportunity along with Frank Delporte to be a technical reviewer of Otavio Santana new book <a href=\"https:\/\/www.packtpub.com\/product\/mastering-the-java-virtual-machine\/9781835467961\">Mastering the Java Virtual Machine<\/a> - and it's a very good book, so I'm sharing it with my network.<\/p>\n","innerContent":["\n<p>And finally something private from me: I had the opportunity along with Frank Delporte to be a technical reviewer of Otavio Santana new book <a href=\"https:\/\/www.packtpub.com\/product\/mastering-the-java-virtual-machine\/9781835467961\">Mastering the Java Virtual Machine<\/a> - and it's a very good book, so I'm sharing it with my network.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":17884,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-15-1024x768.png\" alt=\"\" class=\"wp-image-17884\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-15-1024x768.png\" alt=\"\" class=\"wp-image-17884\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>In his work, Otavio tackles the challenging topic of bringing readers closer to the technological and business horizon associated with the Java Virtual Machine. This is a rather niche subject, which in my opinion, should not be - because the JVM is perhaps the most interesting aspect of the entire Java ecosystem and its family languages - you may have noticed by reading this newsletter that this is my cup of tea.<\/p>\n","innerContent":["\n<p>In his work, Otavio tackles the challenging topic of bringing readers closer to the technological and business horizon associated with the Java Virtual Machine. This is a rather niche subject, which in my opinion, should not be - because the JVM is perhaps the most interesting aspect of the entire Java ecosystem and its family languages - you may have noticed by reading this newsletter that this is my cup of tea.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>PS: This is not a paid promotion (shame that it always has to be added on the internet), the topic is simply really interesting, and since I had the opportunity to get acquainted with the whole thing at a very early stage and I was able to add at least tiny bit to the overall experience, I'm sharing the good news further!<\/p>\n","innerContent":["\n<p>PS: This is not a paid promotion (shame that it always has to be added on the internet), the topic is simply really interesting, and since I had the opportunity to get acquainted with the whole thing at a very early stage and I was able to add at least tiny bit to the overall experience, I'm sharing the good news further!<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17873","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=17873"}],"version-history":[{"count":18,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17873\/revisions"}],"predecessor-version":[{"id":17920,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17873\/revisions\/17920"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/17903"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=17873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=17873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=17873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}