{"id":16588,"date":"2023-08-16T10:22:56","date_gmt":"2023-08-16T08:22:56","guid":{"rendered":"https:\/\/vived.io\/?p=16588"},"modified":"2023-08-22T16:33:43","modified_gmt":"2023-08-22T14:33:43","slug":"fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/","title":{"rendered":"Fury: Kompromis mi\u0119dzy Szybko\u015bci\u0105 a Elastyczno\u015bci\u0105 procesu serializacji &#8211; JVM Weekly vol. 145"},"content":{"rendered":"\n<h2 id=\"1-wydano-jdk-21-release-candidate\" data-num=1>1. Wydano JDK 21 Release Candidate<\/h2>\n\n\n\n<p>Tutaj b\u0119dzie do\u015b\u0107 kr\u00f3tko, ale jest to informacja, kt\u00f3rej nie chcia\u0142em sobie odpu\u015bci\u0107 &#8211; pojawi\u0142 si\u0119 bowiem <a href=\"https:\/\/jdk.java.net\/21\/\">pierwszy Release Candidate JDK 21<\/a>, wersji, na kt\u00f3r\u0105 masa os\u00f3b sobie ostrzy z\u0119by. Zdecydowanie nie b\u0119d\u0119 pr\u00f3bowa\u0142 teraz rozbija\u0107 jesiennej Javy na poszczeg\u00f3lne przychodz\u0105ce z ni\u0105 funkcje (to zrobi\u0142em ju\u017c przy okazji fazy Rampdown, a przyjdzie na to pewnie czas i przy wydaniu wersji Stabilnej). O ile <a href=\"https:\/\/tschatzl.github.io\/2023\/08\/04\/jdk21-g1-parallel-gc-changes.html\">publikacje Thomasa Schatzla<\/a> na temat Garbage Collector\u00f3w pozostawi\u0119 sobie ju\u017c na wspomniany finalny release, to podziel\u0119 si\u0119 kilkoma do\u015b\u0107 obiecuj\u0105cymi liczbami. <\/p>\n\n\n\n<p>Dla ludzi lubuj\u0105cych si\u0119 w benchmarkach mam bowiem dobre informacje na temat projektu Panama. Jeszcze w 2019 (te obecne projekty Javowe s\u0105 ju\u017c z nami troch\u0119 czasu, co nie?) <a href=\"https:\/\/github.com\/zakgof\">Alexander Zakusylo<\/a> por\u00f3wna\u0142 wydajno\u015b\u0107 kilku dost\u0119pnych w ekosystemie rozwi\u0105za\u0144 do robienia natywnych zapyta\u0144. Pod jego lup\u0105 znalaz\u0142o si\u0119 siedem r\u00f3\u017cnych podej\u015b\u0107 min. JNI, <a href=\"https:\/\/github.com\/nativelibs4java\/BridJ\">BridJ<\/a> czy w\u0142a\u015bnie Panama &#8211; dok\u0142ada opis poszczeg\u00f3lnych znajdziecie <a href=\"https:\/\/github.com\/zakgof\/java-native-benchmark\/tree\/August-2019#readme\">w oryginalnym tek\u015bcie<\/a>. Jeszcze cztery lata temu, Panama pozostawa\u0142a wielokrotnie wolniejsza od lider\u00f3w stawki. \u017byjemy jednak w 2023 i wida\u0107, \u017ce kolejne wersje preview nie posz\u0142y w las &#8211; Alexander zdecydowa\u0142 si\u0119 <a href=\"https:\/\/github.com\/zakgof\/java-native-benchmark\/#readme\">jeszcze raz przeprowadzi\u0107 testy<\/a>, tym razem z najnowsz\u0105 iteracj\u0105 pochodz\u0105c\u0105 z JDK 21&#8230; i Panama wskoczy\u0142a na szczyt rankingu. <strong>JDK Foreign Function\/Memory API Preview (JEP-424)<\/strong> dzia\u0142aj\u0105 oko\u0142o dwa razy szybciej ni\u017c JNI.<\/p>\n\n\n\n<p>Oczywi\u015bcie, jest to pojedynczy benchmark (a pewnie ju\u017c nied\u0142ugo nale\u017cy spodziewa\u0107 si\u0119 wysypu nast\u0119pnych), ale dobrze obrazuje przeskok wydajno\u015bciowy w projekcie. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/5eDMTVJ.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Who can handle such power?<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"2-pi4j-operating-system-for-java-development-on-raspberry-pi\" data-num=2>2. Pi4J Operating System for Java development on Raspberry Pi<\/h2>\n\n\n\n<p>Przez chwil\u0119&nbsp;wydawa\u0142o si\u0119, \u017ce czasy, gdy Raspberry Pi by\u0142o przyst\u0119pnym, tanim komputerem ju\u017c chyba min\u0119\u0142y,  aczkolwiek ostatnimi czasy wygl\u0105da na to, \u017ce powoli ceny zaczynaj\u0105 spada\u0107, przynajmniej w Polsce. Mimo, \u017ce od 2019 nie by\u0142o kolejnej iteracji, w dalszym ci\u0105gu to jednak zaskakuj\u0105co pot\u0119\u017cna maszyna, kt\u00f3ra u mnie s\u0142u\u017cy jako sterownik do infrastruktury sieciowej, VPN, serwer Plexa oraz Home Assistanta&#8230; r\u00f3wnocze\u015bnie. <\/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\/08\/image-1-1024x576.png\" alt=\"\" class=\"wp-image-16602\" width=\"768\" height=\"432\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-1-1024x576.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-1-300x169.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-1-768x432.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-1-1536x864.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-1-2048x1152.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><figcaption class=\"wp-element-caption\">Przez moment pr\u00f3bowa\u0142em te\u017c z niego zrobi\u0107 Steam Machine, i do\u015bwiadczenie by\u0142o prawie dobre&#8230; ale &#8222;prawie&#8221; przy grach robi jednak du\u017c\u0105 r\u00f3\u017cnic\u0119.<\/figcaption><\/figure><\/div>\n\n\n<p>Nie powinno zaskakiwa\u0107, \u017ce doskonale sprawdza si\u0119 jako komputer do nauki programowania.<\/p>\n\n\n\n<p>System Raspberry Pi (OS) zosta\u0142 zaprojektowany specjalnie dla programist\u00f3w JVM za spraw\u0105 inicjatywy Pi4J. Projekt Pi4J ma swoje korzenie u <a href=\"https:\/\/github.com\/ppmathis\">Pascala Mathisa<\/a>, studenta z Uniwersytetu FHNW w Szwajcarii, kt\u00f3ry zainicjowa\u0142 go, aby m\u00f3c kontrolowa\u0107 elementy I\/O Raspberry Pi (takie jak GPIO, SPI, I2C, SERIAL) przy u\u017cyciu Javy. <a href=\"http:\/\/github.com\/DieterHolz\">Dieter Holz<\/a>, wyk\u0142adowca na FHNW, rozbudowa\u0142 t\u0119 inicjatyw\u0119, opracowuj\u0105c r\u00f3\u017cnorodne edycje systemu operacyjnego, aby dostarczy\u0107 swoim studentom najlepsze \u015brodowisko pracy. Chodzi\u0142o o to, by studenci mogli skupi\u0107 si\u0119 na programowaniu, nie martwi\u0105c si\u0119 o konfiguracje Linuxa i powi\u0105zane z nim narz\u0119dzia.<\/p>\n\n\n\n<p>Zamiast stanowi\u0107 zupe\u0142nie nowy system operacyjny, Pi4J OS jest odga\u0142\u0119zieniem oficjalnego systemu operacyjnego Raspberry Pi z zintegrowanym projektem Pi4J. Oznacza to, \u017ce jest on wyposa\u017cony w dodatkowe narz\u0119dzia i ustawienia dostosowane dla developer\u00f3w Java i JavaFX. Ju\u017c od momentu instalacji zawiera wszystkie elementy potrzebne pocz\u0105tkuj\u0105cemu programi\u015bcie. Co wi\u0119cej, Pi4J u\u0142atwia obs\u0142ug\u0119 komponent\u00f3w Raspberry Pi, co czyni go idealnym dla tych, kt\u00f3rzy chc\u0105 rozpocz\u0105\u0107 swoj\u0105 przygod\u0119 z tym ekosystemem.<\/p>\n\n\n\n<p>Frank Delaport z Azula jest aktywnie zaanga\u017cowany w ten projekt i prezentuje w <a href=\"https:\/\/foojay.io\/today\/category\/tools\/pi4j\/\">serii artyku\u0142\u00f3w na foojay.io<\/a>, jak korzysta\u0107 z r\u00f3\u017cnych narz\u0119dzi ekosystemu JDK (takich jak SDKMan czy Kotlin) na Raspberry Pi. Jego prezentacja &#8222;<a href=\"https:\/\/fosdem.org\/2023\/schedule\/event\/pi\/\">Update on #JavaOnRaspberryPi and Pi4J<\/a>&#8221; stanowi doskona\u0142e wprowadzenie dla tych, kt\u00f3rzy maj\u0105 nieu\u017cywany mikrokomputer le\u017c\u0105cy w szufladzie i chc\u0105 go o\u017cywi\u0107.<\/p>\n\n\n\n<h2 id=\"3-release-radar\" data-num=3>3. Release Radar<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Liberica JDK Performance Edition<\/h3>\n\n\n\n<p>Zacznijmy od do\u015b\u0107 nietypowego projektu. BellSoft, o kt\u00f3rej to firmie nie raz zdarzy\u0142o mi si\u0119 ju\u017c pisa\u0107, wyda\u0142 <a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-brings-the-performance-of-jvm-17-to-jdk-11-with-liberica-jdk-performance-edition\/\">Liberica JDK Performance Edition<\/a>. Pod t\u0105 nazw\u0105 kryje si\u0119 JDK 11 zmodyfikowana poprzez integracj\u0119 z poprawkami wydajno\u015bciowymi maszyny wirtualnej pochodz\u0105cymi z JDK 17. Ten oryginalny koncept pozwala u\u017cytkownikom cieszy\u0107 si\u0119 wzrostem wydajno\u015bci do 10-15%, bez konieczno\u015bci dokonywania jakichkolwiek znacz\u0105cych zmian w kodzie. Jak \u0142atwo si\u0119 domy\u015ble\u0107, rozwi\u0105zanie jest skierowane szczeg\u00f3lnie do firm korzystaj\u0105cych z JDK 11, kt\u00f3re mog\u0105 by\u0107 niech\u0119tne lub niezdolne do przej\u015bcia na nowsze wersje. Do zbackportowanych ulepsze\u0144 nale\u017c\u0105 <a class=\"autolink\" href=\"https:\/\/m.in\">m.in<\/a>. poprawki do Garbage Collector\u00f3w czy lepsze wsparcie dla NUMA (Non-Uniform Memory Access).<\/p>\n\n\n\n<p>Dost\u0119pna od 1 sierpnia dla obecnych subskrybent\u00f3w Liberica JDK, ta edycja jest oferowana bez dodatkowych op\u0142at, w zestawie z innymi narz\u0119dziami od BellSoft. Zastanawiam si\u0119, czy w przysz\u0142o\u015bci b\u0119dziemy \u015bwiadkami pojawienia si\u0119 wi\u0119cej takich propozycji? Kluczow\u0105 kwesti\u0105 wydaje si\u0119 by\u0107 odpowied\u017a na pytanie, kt\u00f3re teraz mnie najbardziej intryguje &#8211; jakie projekty wybieraj\u0105 JDK z backportowanymi funkcjami VM zamiast prostego przej\u015bcia na JDK 17? Je\u017celi macie do\u015bwiadczenie w tej kwestii, ch\u0119tnie us\u0142ysz\u0119 Wasze historie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fury<\/h3>\n\n\n\n<p>Teraz wchodzimy w rejony, kt\u00f3rych zawsze si\u0119 nieco obawiam &#8211; serializacj\u0119. Raz ju\u017c <a href=\"https:\/\/vived.substack.com\/p\/loial-a-new-player-among-serialization\">przejecha\u0142em si\u0119 na nowej bibliotece w tym temacie<\/a>, wi\u0119c ka\u017cdemu rozwi\u0105zaniu przygl\u0105dam si\u0119 bardzo, bardzo uwa\u017cnie. Bo powiedzcie mi, jak nie by\u0107 sceptycznym, gdy widzi si\u0119 to:<\/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\/08\/yk1n84io0ifb1.png\" alt=\"\" width=\"589\" height=\"282\"\/><\/figure><\/div>\n\n\n<p>Wygl\u0105da jednak na to, \u017ce stworzony przez Ant Group <a href=\"https:\/\/github.com\/alipay\/fury\">Fury<\/a> jest rozwi\u0105zaniem bardzo legitym. Tw\u00f3rcy zreszt\u0105 pokusili si\u0119 na dok\u0142adne wyt\u0142umaczenie, sk\u0105d bior\u0105 si\u0119 takie a nie inne benchmarki w \u015bwietnym blog po\u015bcie: <a href=\"https:\/\/www.furyio.org\/blog\/fury_blazing_fast_multiple_language_serialization_framework\">Fury &#8211; A blazing fast multi-language serialization framework powered by jit and zero-copy<\/a>. A ja teraz spr\u00f3buje wyja\u015bni\u0107 to Wam, co wymaga\u0142o ode mnie pewnego doktoryzowania \ud83d\ude04<\/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\/08\/4d33462278aa37400299960959e31c3997bb6c2cb9b44ce401eac7297878d073_1.webp\" alt=\"\" width=\"540\" height=\"402\"\/><figcaption class=\"wp-element-caption\">POV<\/figcaption><\/figure><\/div>\n\n\n<p>Dwie podstawowe metody serializacji to metody statyczna i dynamiczna. Frameworki opieraj\u0105ce si\u0119 na serializacji statycznej, jak na przyk\u0142ad <strong>protobuf<\/strong>, bazuj\u0105 na ustalonym z g\u00f3ry schemacie. Serializacja odbywa si\u0119 zgodnie z tym schematem, co wymaga od nadawcy i odbiorcy jego wcze\u015bniejszej znajomo\u015bci. Takie podej\u015bcie gwarantuje szybko\u015b\u0107 oraz efektywno\u015b\u0107. Niemniej jednak ma swoje ograniczenia, g\u0142\u00f3wnie ze wzgl\u0119du na brak elastyczno\u015bci &#8211; komunikacja mi\u0119dzy r\u00f3\u017cnymi j\u0119zykami programowania opieraj\u0105ca si\u0119 na statycznej strukturze danych mo\u017ce by\u0107 problematyczna, zw\u0142aszcza gdy niezb\u0119dna jest ewolucja schematu. Z kolei dynamiczne frameworki serializacji, takie jak <code>Serializable<\/code> w JDK, Kryo czy Hessian, nie s\u0105 uzale\u017cnione od sta\u0142ego schematu. W trakcie dzia\u0142ania okre\u015blaj\u0105 one struktur\u0119 danych, co sprawia, \u017ce s\u0105 bardziej adaptacyjne. Daje to wi\u0119kszy komfort u\u017cytkowania i mo\u017cliwo\u015b\u0107 wykorzystania polimorfizmu. Niestety, taka elastyczno\u015b\u0107 cz\u0119sto idzie w parze z ni\u017csz\u0105 wydajno\u015bci\u0105, co mo\u017ce stanowi\u0107 wyzwanie w sytuacjach, gdy potrzebna jest du\u017ca przepustowo\u015b\u0107, np. przy masowej transmisji danych.<\/p>\n\n\n\n<p>Fury szuka kompromisu mi\u0119dzy tymi dwoma \u015bwiatami, staraj\u0105c si\u0119 po\u0142\u0105czy\u0107 zalety obu: elastyczno\u015b\u0107 dynamicznej serializacji i wydajno\u015b\u0107 serializacji statycznej. Framework jest zaprojektowany tak, aby oferowa\u0107 pe\u0142n\u0105 kompatybilno\u015b\u0107 z rozwi\u0105zaniami istniej\u0105cymi ju\u017c w Javie, a dodatkowo posiadaj\u0105c te\u017c warianty dla innych \u015brodowisk. Fury wykorzystuje szereg zaawansowanych technik serializacji, a tak\u017ce wsparcie dla operacji SIMD. Rozwi\u0105zanie wykorzystuje te\u017c Zero-Copy (technik\u0119 przesy\u0142ania danych komputerowych, w kt\u00f3rej dane nie s\u0105 fizycznie kopiowane mi\u0119dzy buforami pami\u0119ci lub innymi warstwami w systemie operacyjnym), minimalizuje op\u00f3\u017anienia podczas transfer\u00f3w danych, eliminuj\u0105c zb\u0119dne kopie pami\u0119ci. Dodatkowo, Fury u\u017cywa kompilatora JIT, kt\u00f3ry wykorzystuje dane o typie obiektu w czasie rzeczywistym, generuj\u0105c zoptymalizowany kod serializacji. Framework k\u0142adzie r\u00f3wnie\u017c nacisk na efektywne wykorzystanie pami\u0119ci podr\u0119cznej, maksymalizuj\u0105c trafienia w pami\u0119\u0107 podr\u0119czn\u0105 danych i instrukcji CPU, oraz obs\u0142uguje wiele protoko\u0142\u00f3w serializacji, dostosowuj\u0105c si\u0119 do r\u00f3\u017cnorodnych wymaga\u0144 aplikacji.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"922\" height=\"410\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-2.png\" alt=\"\" class=\"wp-image-16615\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-2.png 922w, https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-2-300x133.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-2-768x342.png 768w\" sizes=\"auto, (max-width: 922px) 100vw, 922px\" \/><figcaption class=\"wp-element-caption\">TLDR: Wspomniane efekty&#8230; no c\u00f3\u017c, maj\u0105 realne pokrycie w twardej in\u017cynierii.<\/figcaption><\/figure>\n\n\n\n<p>Je\u015bli komu\u015b nie wystarcza skompilowane przeze mnie wyt\u0142umaczenie, zapraszam oczywi\u015bcie do <a href=\"https:\/\/www.furyio.org\/blog\/fury_blazing_fast_multiple_language_serialization_framework\">oryginalnej publikacji<\/a>. No i najwa\u017cniejsze pytanie &#8211; to co, kto testuje na produkcji?<\/p>\n\n\n\n<h2 id=\"eclipse-jnosql-1-0-0\" data-num=4>Eclipse JNoSQL 1.0.0<\/h2>\n\n\n\n<p>To teraz przechodzimy w rejony Jakarta EE. Przegapi\u0142em bowiem wydanie JNoSQL 1.0.0, ale wykorzystam wydanie <a href=\"https:\/\/github.com\/eclipse\/jnosql\/releases\">wersji 1.0.1<\/a> (oraz publikacje <a href=\"https:\/\/dzone.com\/articles\/eclipse-jnosql-100-streamlining-java-and-nosql-int\">artyku\u0142u na DZone<\/a>) na przedstawienie Wam tego projektu.<\/p>\n\n\n\n<p>Eclipse JNoSQL to framework Java, b\u0119d\u0105cy zgodn\u0105 implementacj\u0105 specyfikacji Jakarta NoSQL i Jakarta Data. Jest zaprojektowany w celu u\u0142atwienia integracji aplikacji Java z bazami danych NoSQL. Framework ma oferowa\u0107 takich funkcji jak integracja z Contextami i CDI, oraz mo\u017cliwo\u015b\u0107 tworzenia Java-based Query czy wzorce znane w \u015bwiecie enterprise Javy jak Repozytoria i Template. Ponadto wprowadza on anotacje b\u0119d\u0105ce odpowiednikami tych z JPA, jak <code>@Column<\/code> czy <code>@Entity<\/code>. Te adnotacje upraszczaj\u0105 mapowanie obiekt\u00f3w Java do ponad dwudziestu baz danych NoSQL &#8211; <a href=\"http:\/\/www.jnosql.org\/docs\/supported_dbs.html\">list\u0119 znajdziecie tutaj<\/a>.<\/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\/08\/WWfGbSq.png\" alt=\"\" width=\"521\" height=\"411\"\/><figcaption class=\"wp-element-caption\">Przy okazji tego artyku\u0142u odkry\u0142em, \u017ce stara dobra http:\/\/annotatiomania.com\/ ju\u017c znik\u0142a z odm\u0119t\u00f3w internetu. Ale nie martwcie si\u0119 &#8211; mamy Wayback Machine \ud83d\ude04<\/figcaption><\/figure><\/div>\n\n\n<p>Eclipse JNoSQL, 1.0.0, wprowadzi\u0142o szereg usprawnie\u0144 maj\u0105cych na celu popraw\u0119 mo\u017cliwo\u015bci frameworku oraz procesu integracji mi\u0119dzy Java a bazami danych NoSQL. Nowa wersja oferuje prostsz\u0105 konfiguracj\u0119 bazy danych, zmniejszaj\u0105c nak\u0142ad pracy zwi\u0105zany z pocz\u0105tkow\u0105 konfiguracj\u0105. Wprowadzono te\u017c wsparcie dla Java Records, i ich bezproblemowe mapowanie na struktury danych NoSQL. <\/p>\n\n\n\n<p>I musz\u0119 przyzna\u0107, \u017ce o ile zdarza mi si\u0119 u\u017cywa\u0107 np. Spring Data, o tyle zawsze, kiedy bior\u0119 jaki\u015b generyczny framework NoSQL&#8230; czuje si\u0119 do\u015b\u0107 dziwnie. Mam wtedy wra\u017cenie, \u017ce r\u00f3wnie dobrze m\u00f3g\u0142bym u\u017cywa\u0107 pod spodem zwyk\u0142ego PostgreSQL \ud83e\udd37\u200d\u2642\ufe0f.<\/p>\n\n\n\n<h2 id=\"jlama-llama2-java\" data-num=5>Jlama &amp; <a class=\"autolink\" href=\"https:\/\/llama2.java\">llama2.java<\/a><\/h2>\n\n\n\n<p>W konkluzji, mamy dwa projekty o podobnej naturze, lecz w tym zawirowaniu tkwi pewna logika.<\/p>\n\n\n\n<p>2023 rok wydaje si\u0119 nadal dominowa\u0107 tematem Du\u017cych Modeli J\u0119zykowych, a informacje o nowych inicjatywach w tej dziedzinie pojawiaj\u0105 si\u0119 niemal nieustannie. Jednym z najbardziej wyr\u00f3\u017cniaj\u0105cych si\u0119 jest LLaMA stworzona przez firm\u0119 Meta, stanowi\u0105ca konkurencj\u0119 dla GPT od OpenAI. Niedawno Meta przedstawi\u0142a LLaMA 2, ulepszon\u0105 wersj\u0119 swojego modelu. Kluczow\u0105 informacj\u0105 dla tego artyku\u0142u jest fakt, \u017ce ten model jest dost\u0119pny w otwartym \u017ar\u00f3dle i jest licencjonowany do zastosowa\u0144 komercyjnych, w odr\u00f3\u017cnieniu od jego poprzednika skierowanego wy\u0142\u0105cznie do bada\u0144 naukowych. W kr\u00f3tkim czasie zdoby\u0142a ona uwag\u0119 wielu podmiot\u00f3w na rynku, w tym niespodziewanie Microsoftu, kt\u00f3ry wsp\u00f3\u0142pracuje z OpenAI. Rozpocz\u0119\u0142a si\u0119 wi\u0119c rywalizacja w bran\u017cy, kt\u00f3ra przenios\u0142a si\u0119 r\u00f3wnie\u017c do \u015bwiata Java. W tej konkurencji wyra\u017anie wyr\u00f3\u017cniaj\u0105 si\u0119 dwa projekty: Jlama oraz <a class=\"autolink\" href=\"https:\/\/llama2.java\">llama2.java<\/a>.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/tjake\/Jlama\">Jlama<\/a> to silnik przetwarzania oparty na Javie dla LLM, kompatybilny z modelami takimi jak Llama, Llama2 czy GPT-2 (kt\u00f3ry tak\u017ce zosta\u0142 udost\u0119pniony), a tak\u017ce z formatem modelu Huggingface SafeTensors. Aby dzia\u0142a\u0107, wymaga on Javy 20 oraz korzysta z cz\u0119sto omawianego tutaj Vector API, kt\u00f3re umo\u017cliwia szybkie obliczenia wektorowe niezb\u0119dne podczas wnioskowania z modeli. Na ten moment to g\u0142\u00f3wne informacje na jego temat, cho\u0107 warto zwr\u00f3ci\u0107 uwag\u0119, \u017ce jest on udost\u0119pniony na licencji Apache.<\/p>\n\n\n\n<p>Z kolei <a href=\"https:\/\/github.com\/mukel\/llama2.java\">llama2.java<\/a> to bardziej zaawansowany projekt. Ten wspiera tylko Llama 2 &#8211; jest to bowiem bezpo\u015bredni port llama2.scala, kt\u00f3ry z kolei bazuje na llama2.c stworzonym przez Andreja Karpathy&#8217;ego. Co ciekawe, projekt ma na celu s\u0142u\u017cy\u0107 jako pole do testowania nowych funkcji j\u0119zykowych, ale tak\u017ce por\u00f3wnywa\u0107 wydajno\u015b\u0107 GraalVM w stosunku do wersji w C. W repozytorium znajduj\u0105 si\u0119 odpowiednie testy wydajno\u015bciowe. Aby skorzysta\u0107 z tej biblioteki, potrzebujesz Javy w wersji 20+, wraz ze wsparciem dla <code>MemorySegment<\/code> i <code>Vector API<\/code>.<\/p>\n\n\n\n<p>Co edycj\u0119 pojawiaj\u0105 si\u0119 nam nowo\u015bci dotycz\u0105ce Javowych rozwi\u0105za\u0144 w dziedzinie sztucznej inteligencji, co napawa mnie entuzjazmem. Te projekty bowiem potwierdzaj\u0105 moje przekonanie: najnowsze funkcje j\u0119zyka otwieraj\u0105 drzwi przed kolejnymi zastosowaniami, a ich wp\u0142yw si\u0119ga znacznie dalej ni\u017c zwyk\u0142e s\u0142odziki sk\u0142adniowe. Dzi\u0119ki dynamicznemu rozwojowi w ostatnich latach oraz tego rodzaju projektom, Java demonstruje, \u017ce znajduje si\u0119 w czo\u0142\u00f3wce narz\u0119dzi stosowanych w nowoczesnych rozwi\u0105zaniach, co skutecznie ucisza jej sceptyk\u00f3w, wieszcz\u0105cym jej rych\u0142\u0105 \u015bmier\u0107.<\/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\/08\/sRNzVfc.png\" alt=\"\" width=\"600\" height=\"500\"\/><\/figure><\/div>\n\n\n<p>I tym optymistycznym stwierdzeniem \u017cegnam si\u0119 &#8211; widzimy si\u0119 za tydzie\u0144 (ju\u017c my\u015bl\u0119 w regularnym, wtorkowym trybie)! <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Na starcie chcia\u0142em Was przeprosi\u0107 za ostatni brak regularno\u015bci, kt\u00f3ry jest spowodowany zbiegni\u0119ciem si\u0119 mojego urlopu i dnia wolnego w Polsce. Postaram si\u0119 jednak od przysz\u0142ego tygodnia ju\u017c wr\u00f3ci\u0107 do regularnego, wtorkowego trybu wydawniczego. <\/p>\n","protected":false},"author":10,"featured_media":16628,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[23,259],"tags":[],"class_list":["post-16588","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm","category-jvm-pl"],"acf":{"estimated_reading_time":"10","feature_image_blog":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-2.png","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Fury: Kompromis mi\u0119dzy Szybko\u015bci\u0105 a Elastyczno\u015bci\u0105 procesu serializacji - JVM Weekly vol. 145 - 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\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fury: Kompromis mi\u0119dzy Szybko\u015bci\u0105 a Elastyczno\u015bci\u0105 procesu serializacji - JVM Weekly vol. 145 - Vived\" \/>\n<meta property=\"og:description\" content=\"Na starcie chcia\u0142em Was przeprosi\u0107 za ostatni brak regularno\u015bci, kt\u00f3ry jest spowodowany zbiegni\u0119ciem si\u0119 mojego urlopu i dnia wolnego w Polsce. Postaram si\u0119 jednak od przysz\u0142ego tygodnia ju\u017c wr\u00f3ci\u0107 do regularnego, wtorkowego trybu wydawniczego.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-16T08:22:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T14:33:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-3.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\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Fury: Kompromis mi\u0119dzy Szybko\u015bci\u0105 a Elastyczno\u015bci\u0105 procesu serializacji &#8211; JVM Weekly vol. 145\",\"datePublished\":\"2023-08-16T08:22:56+00:00\",\"dateModified\":\"2023-08-22T14:33:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/\"},\"wordCount\":2055,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-3.png\",\"articleSection\":[\"JVM\",\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/\",\"url\":\"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/\",\"name\":\"Fury: Kompromis mi\u0119dzy Szybko\u015bci\u0105 a Elastyczno\u015bci\u0105 procesu serializacji - JVM Weekly vol. 145 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-3.png\",\"datePublished\":\"2023-08-16T08:22:56+00:00\",\"dateModified\":\"2023-08-22T14:33:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-3.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-3.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fury: Kompromis mi\u0119dzy Szybko\u015bci\u0105 a Elastyczno\u015bci\u0105 procesu serializacji &#8211; JVM Weekly vol. 145\"}]},{\"@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":"Fury: Kompromis mi\u0119dzy Szybko\u015bci\u0105 a Elastyczno\u015bci\u0105 procesu serializacji - JVM Weekly vol. 145 - 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\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/","og_locale":"pl_PL","og_type":"article","og_title":"Fury: Kompromis mi\u0119dzy Szybko\u015bci\u0105 a Elastyczno\u015bci\u0105 procesu serializacji - JVM Weekly vol. 145 - Vived","og_description":"Na starcie chcia\u0142em Was przeprosi\u0107 za ostatni brak regularno\u015bci, kt\u00f3ry jest spowodowany zbiegni\u0119ciem si\u0119 mojego urlopu i dnia wolnego w Polsce. Postaram si\u0119 jednak od przysz\u0142ego tygodnia ju\u017c wr\u00f3ci\u0107 do regularnego, wtorkowego trybu wydawniczego.","og_url":"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/","og_site_name":"Vived","article_published_time":"2023-08-16T08:22:56+00:00","article_modified_time":"2023-08-22T14:33:43+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-3.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\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Fury: Kompromis mi\u0119dzy Szybko\u015bci\u0105 a Elastyczno\u015bci\u0105 procesu serializacji &#8211; JVM Weekly vol. 145","datePublished":"2023-08-16T08:22:56+00:00","dateModified":"2023-08-22T14:33:43+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/"},"wordCount":2055,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-3.png","articleSection":["JVM","JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/","url":"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/","name":"Fury: Kompromis mi\u0119dzy Szybko\u015bci\u0105 a Elastyczno\u015bci\u0105 procesu serializacji - JVM Weekly vol. 145 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-3.png","datePublished":"2023-08-16T08:22:56+00:00","dateModified":"2023-08-22T14:33:43+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-3.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-3.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/fury-kompromis-miedzy-szybkoscia-a-elastycznoscia-procesu-serializacji-jvm-weekly-vol-145\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Fury: Kompromis mi\u0119dzy Szybko\u015bci\u0105 a Elastyczno\u015bci\u0105 procesu serializacji &#8211; JVM Weekly vol. 145"}]},{"@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. Wydano JDK 21 Release Candidate<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">1. Wydano JDK 21 Release Candidate<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tutaj b\u0119dzie do\u015b\u0107 kr\u00f3tko, ale jest to informacja, kt\u00f3rej nie chcia\u0142em sobie odpu\u015bci\u0107 - pojawi\u0142 si\u0119 bowiem <a href=\"https:\/\/jdk.java.net\/21\/\">pierwszy Release Candidate JDK 21<\/a>, wersji, na kt\u00f3r\u0105 masa os\u00f3b sobie ostrzy z\u0119by. Zdecydowanie nie b\u0119d\u0119 pr\u00f3bowa\u0142 teraz rozbija\u0107 jesiennej Javy na poszczeg\u00f3lne przychodz\u0105ce z ni\u0105 funkcje (to zrobi\u0142em ju\u017c przy okazji fazy Rampdown, a przyjdzie na to pewnie czas i przy wydaniu wersji Stabilnej). O ile <a href=\"https:\/\/tschatzl.github.io\/2023\/08\/04\/jdk21-g1-parallel-gc-changes.html\">publikacje Thomasa Schatzla<\/a> na temat Garbage Collector\u00f3w pozostawi\u0119 sobie ju\u017c na wspomniany finalny release, to podziel\u0119 si\u0119 kilkoma do\u015b\u0107 obiecuj\u0105cymi liczbami. <\/p>\n","innerContent":["\n<p>Tutaj b\u0119dzie do\u015b\u0107 kr\u00f3tko, ale jest to informacja, kt\u00f3rej nie chcia\u0142em sobie odpu\u015bci\u0107 - pojawi\u0142 si\u0119 bowiem <a href=\"https:\/\/jdk.java.net\/21\/\">pierwszy Release Candidate JDK 21<\/a>, wersji, na kt\u00f3r\u0105 masa os\u00f3b sobie ostrzy z\u0119by. Zdecydowanie nie b\u0119d\u0119 pr\u00f3bowa\u0142 teraz rozbija\u0107 jesiennej Javy na poszczeg\u00f3lne przychodz\u0105ce z ni\u0105 funkcje (to zrobi\u0142em ju\u017c przy okazji fazy Rampdown, a przyjdzie na to pewnie czas i przy wydaniu wersji Stabilnej). O ile <a href=\"https:\/\/tschatzl.github.io\/2023\/08\/04\/jdk21-g1-parallel-gc-changes.html\">publikacje Thomasa Schatzla<\/a> na temat Garbage Collector\u00f3w pozostawi\u0119 sobie ju\u017c na wspomniany finalny release, to podziel\u0119 si\u0119 kilkoma do\u015b\u0107 obiecuj\u0105cymi liczbami. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dla ludzi lubuj\u0105cych si\u0119 w benchmarkach mam bowiem dobre informacje na temat projektu Panama. Jeszcze w 2019 (te obecne projekty Javowe s\u0105 ju\u017c z nami troch\u0119 czasu, co nie?) <a href=\"https:\/\/github.com\/zakgof\">Alexander Zakusylo<\/a> por\u00f3wna\u0142 wydajno\u015b\u0107 kilku dost\u0119pnych w ekosystemie rozwi\u0105za\u0144 do robienia natywnych zapyta\u0144. Pod jego lup\u0105 znalaz\u0142o si\u0119 siedem r\u00f3\u017cnych podej\u015b\u0107 min. JNI, <a href=\"https:\/\/github.com\/nativelibs4java\/BridJ\">BridJ<\/a> czy w\u0142a\u015bnie Panama - dok\u0142ada opis poszczeg\u00f3lnych znajdziecie <a href=\"https:\/\/github.com\/zakgof\/java-native-benchmark\/tree\/August-2019#readme\">w oryginalnym tek\u015bcie<\/a>. Jeszcze cztery lata temu, Panama pozostawa\u0142a wielokrotnie wolniejsza od lider\u00f3w stawki. \u017byjemy jednak w 2023 i wida\u0107, \u017ce kolejne wersje preview nie posz\u0142y w las - Alexander zdecydowa\u0142 si\u0119 <a href=\"https:\/\/github.com\/zakgof\/java-native-benchmark\/#readme\">jeszcze raz przeprowadzi\u0107 testy<\/a>, tym razem z najnowsz\u0105 iteracj\u0105 pochodz\u0105c\u0105 z JDK 21... i Panama wskoczy\u0142a na szczyt rankingu. <strong>JDK Foreign Function\/Memory API Preview (JEP-424)<\/strong> dzia\u0142aj\u0105 oko\u0142o dwa razy szybciej ni\u017c JNI.<\/p>\n","innerContent":["\n<p>Dla ludzi lubuj\u0105cych si\u0119 w benchmarkach mam bowiem dobre informacje na temat projektu Panama. Jeszcze w 2019 (te obecne projekty Javowe s\u0105 ju\u017c z nami troch\u0119 czasu, co nie?) <a href=\"https:\/\/github.com\/zakgof\">Alexander Zakusylo<\/a> por\u00f3wna\u0142 wydajno\u015b\u0107 kilku dost\u0119pnych w ekosystemie rozwi\u0105za\u0144 do robienia natywnych zapyta\u0144. Pod jego lup\u0105 znalaz\u0142o si\u0119 siedem r\u00f3\u017cnych podej\u015b\u0107 min. JNI, <a href=\"https:\/\/github.com\/nativelibs4java\/BridJ\">BridJ<\/a> czy w\u0142a\u015bnie Panama - dok\u0142ada opis poszczeg\u00f3lnych znajdziecie <a href=\"https:\/\/github.com\/zakgof\/java-native-benchmark\/tree\/August-2019#readme\">w oryginalnym tek\u015bcie<\/a>. Jeszcze cztery lata temu, Panama pozostawa\u0142a wielokrotnie wolniejsza od lider\u00f3w stawki. \u017byjemy jednak w 2023 i wida\u0107, \u017ce kolejne wersje preview nie posz\u0142y w las - Alexander zdecydowa\u0142 si\u0119 <a href=\"https:\/\/github.com\/zakgof\/java-native-benchmark\/#readme\">jeszcze raz przeprowadzi\u0107 testy<\/a>, tym razem z najnowsz\u0105 iteracj\u0105 pochodz\u0105c\u0105 z JDK 21... i Panama wskoczy\u0142a na szczyt rankingu. <strong>JDK Foreign Function\/Memory API Preview (JEP-424)<\/strong> dzia\u0142aj\u0105 oko\u0142o dwa razy szybciej ni\u017c JNI.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oczywi\u015bcie, jest to pojedynczy benchmark (a pewnie ju\u017c nied\u0142ugo nale\u017cy spodziewa\u0107 si\u0119 wysypu nast\u0119pnych), ale dobrze obrazuje przeskok wydajno\u015bciowy w projekcie. <\/p>\n","innerContent":["\n<p>Oczywi\u015bcie, jest to pojedynczy benchmark (a pewnie ju\u017c nied\u0142ugo nale\u017cy spodziewa\u0107 si\u0119 wysypu nast\u0119pnych), ale dobrze obrazuje przeskok wydajno\u015bciowy w projekcie. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/5eDMTVJ.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Who can handle such power?<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/5eDMTVJ.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Who can handle such power?<\/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\">2. Pi4J Operating System for Java development on Raspberry Pi<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">2. Pi4J Operating System for Java development on Raspberry Pi<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przez chwil\u0119&nbsp;wydawa\u0142o si\u0119, \u017ce czasy, gdy Raspberry Pi by\u0142o przyst\u0119pnym, tanim komputerem ju\u017c chyba min\u0119\u0142y,  aczkolwiek ostatnimi czasy wygl\u0105da na to, \u017ce powoli ceny zaczynaj\u0105 spada\u0107, przynajmniej w Polsce. Mimo, \u017ce od 2019 nie by\u0142o kolejnej iteracji, w dalszym ci\u0105gu to jednak zaskakuj\u0105co pot\u0119\u017cna maszyna, kt\u00f3ra u mnie s\u0142u\u017cy jako sterownik do infrastruktury sieciowej, VPN, serwer Plexa oraz Home Assistanta... r\u00f3wnocze\u015bnie. <\/p>\n","innerContent":["\n<p>Przez chwil\u0119&nbsp;wydawa\u0142o si\u0119, \u017ce czasy, gdy Raspberry Pi by\u0142o przyst\u0119pnym, tanim komputerem ju\u017c chyba min\u0119\u0142y,  aczkolwiek ostatnimi czasy wygl\u0105da na to, \u017ce powoli ceny zaczynaj\u0105 spada\u0107, przynajmniej w Polsce. Mimo, \u017ce od 2019 nie by\u0142o kolejnej iteracji, w dalszym ci\u0105gu to jednak zaskakuj\u0105co pot\u0119\u017cna maszyna, kt\u00f3ra u mnie s\u0142u\u017cy jako sterownik do infrastruktury sieciowej, VPN, serwer Plexa oraz Home Assistanta... r\u00f3wnocze\u015bnie. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16602,"width":768,"height":432,"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\/08\/image-1-1024x576.png\" alt=\"\" class=\"wp-image-16602\" width=\"768\" height=\"432\"\/><figcaption class=\"wp-element-caption\">Przez moment pr\u00f3bowa\u0142em te\u017c z niego zrobi\u0107 Steam Machine, i do\u015bwiadczenie by\u0142o prawie dobre... ale \"prawie\" przy grach robi jednak du\u017c\u0105 r\u00f3\u017cnic\u0119.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-1-1024x576.png\" alt=\"\" class=\"wp-image-16602\" width=\"768\" height=\"432\"\/><figcaption class=\"wp-element-caption\">Przez moment pr\u00f3bowa\u0142em te\u017c z niego zrobi\u0107 Steam Machine, i do\u015bwiadczenie by\u0142o prawie dobre... ale \"prawie\" przy grach robi jednak du\u017c\u0105 r\u00f3\u017cnic\u0119.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nie powinno zaskakiwa\u0107, \u017ce doskonale sprawdza si\u0119 jako komputer do nauki programowania.<\/p>\n","innerContent":["\n<p>Nie powinno zaskakiwa\u0107, \u017ce doskonale sprawdza si\u0119 jako komputer do nauki programowania.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>System Raspberry Pi (OS) zosta\u0142 zaprojektowany specjalnie dla programist\u00f3w JVM za spraw\u0105 inicjatywy Pi4J. Projekt Pi4J ma swoje korzenie u <a href=\"https:\/\/github.com\/ppmathis\">Pascala Mathisa<\/a>, studenta z Uniwersytetu FHNW w Szwajcarii, kt\u00f3ry zainicjowa\u0142 go, aby m\u00f3c kontrolowa\u0107 elementy I\/O Raspberry Pi (takie jak GPIO, SPI, I2C, SERIAL) przy u\u017cyciu Javy. <a href=\"http:\/\/github.com\/DieterHolz\">Dieter Holz<\/a>, wyk\u0142adowca na FHNW, rozbudowa\u0142 t\u0119 inicjatyw\u0119, opracowuj\u0105c r\u00f3\u017cnorodne edycje systemu operacyjnego, aby dostarczy\u0107 swoim studentom najlepsze \u015brodowisko pracy. Chodzi\u0142o o to, by studenci mogli skupi\u0107 si\u0119 na programowaniu, nie martwi\u0105c si\u0119 o konfiguracje Linuxa i powi\u0105zane z nim narz\u0119dzia.<\/p>\n","innerContent":["\n<p>System Raspberry Pi (OS) zosta\u0142 zaprojektowany specjalnie dla programist\u00f3w JVM za spraw\u0105 inicjatywy Pi4J. Projekt Pi4J ma swoje korzenie u <a href=\"https:\/\/github.com\/ppmathis\">Pascala Mathisa<\/a>, studenta z Uniwersytetu FHNW w Szwajcarii, kt\u00f3ry zainicjowa\u0142 go, aby m\u00f3c kontrolowa\u0107 elementy I\/O Raspberry Pi (takie jak GPIO, SPI, I2C, SERIAL) przy u\u017cyciu Javy. <a href=\"http:\/\/github.com\/DieterHolz\">Dieter Holz<\/a>, wyk\u0142adowca na FHNW, rozbudowa\u0142 t\u0119 inicjatyw\u0119, opracowuj\u0105c r\u00f3\u017cnorodne edycje systemu operacyjnego, aby dostarczy\u0107 swoim studentom najlepsze \u015brodowisko pracy. Chodzi\u0142o o to, by studenci mogli skupi\u0107 si\u0119 na programowaniu, nie martwi\u0105c si\u0119 o konfiguracje Linuxa i powi\u0105zane z nim narz\u0119dzia.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zamiast stanowi\u0107 zupe\u0142nie nowy system operacyjny, Pi4J OS jest odga\u0142\u0119zieniem oficjalnego systemu operacyjnego Raspberry Pi z zintegrowanym projektem Pi4J. Oznacza to, \u017ce jest on wyposa\u017cony w dodatkowe narz\u0119dzia i ustawienia dostosowane dla developer\u00f3w Java i JavaFX. Ju\u017c od momentu instalacji zawiera wszystkie elementy potrzebne pocz\u0105tkuj\u0105cemu programi\u015bcie. Co wi\u0119cej, Pi4J u\u0142atwia obs\u0142ug\u0119 komponent\u00f3w Raspberry Pi, co czyni go idealnym dla tych, kt\u00f3rzy chc\u0105 rozpocz\u0105\u0107 swoj\u0105 przygod\u0119 z tym ekosystemem.<\/p>\n","innerContent":["\n<p>Zamiast stanowi\u0107 zupe\u0142nie nowy system operacyjny, Pi4J OS jest odga\u0142\u0119zieniem oficjalnego systemu operacyjnego Raspberry Pi z zintegrowanym projektem Pi4J. Oznacza to, \u017ce jest on wyposa\u017cony w dodatkowe narz\u0119dzia i ustawienia dostosowane dla developer\u00f3w Java i JavaFX. Ju\u017c od momentu instalacji zawiera wszystkie elementy potrzebne pocz\u0105tkuj\u0105cemu programi\u015bcie. Co wi\u0119cej, Pi4J u\u0142atwia obs\u0142ug\u0119 komponent\u00f3w Raspberry Pi, co czyni go idealnym dla tych, kt\u00f3rzy chc\u0105 rozpocz\u0105\u0107 swoj\u0105 przygod\u0119 z tym ekosystemem.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Frank Delaport z Azula jest aktywnie zaanga\u017cowany w ten projekt i prezentuje w <a href=\"https:\/\/foojay.io\/today\/category\/tools\/pi4j\/\">serii artyku\u0142\u00f3w na foojay.io<\/a>, jak korzysta\u0107 z r\u00f3\u017cnych narz\u0119dzi ekosystemu JDK (takich jak SDKMan czy Kotlin) na Raspberry Pi. Jego prezentacja \"<a href=\"https:\/\/fosdem.org\/2023\/schedule\/event\/pi\/\">Update on #JavaOnRaspberryPi and Pi4J<\/a>\" stanowi doskona\u0142e wprowadzenie dla tych, kt\u00f3rzy maj\u0105 nieu\u017cywany mikrokomputer le\u017c\u0105cy w szufladzie i chc\u0105 go o\u017cywi\u0107.<\/p>\n","innerContent":["\n<p>Frank Delaport z Azula jest aktywnie zaanga\u017cowany w ten projekt i prezentuje w <a href=\"https:\/\/foojay.io\/today\/category\/tools\/pi4j\/\">serii artyku\u0142\u00f3w na foojay.io<\/a>, jak korzysta\u0107 z r\u00f3\u017cnych narz\u0119dzi ekosystemu JDK (takich jak SDKMan czy Kotlin) na Raspberry Pi. Jego prezentacja \"<a href=\"https:\/\/fosdem.org\/2023\/schedule\/event\/pi\/\">Update on #JavaOnRaspberryPi and Pi4J<\/a>\" stanowi doskona\u0142e wprowadzenie dla tych, kt\u00f3rzy maj\u0105 nieu\u017cywany mikrokomputer le\u017c\u0105cy w szufladzie i chc\u0105 go o\u017cywi\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">3. Release Radar<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">3. Release Radar<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Liberica JDK Performance Edition<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Liberica JDK Performance Edition<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zacznijmy od do\u015b\u0107 nietypowego projektu. BellSoft, o kt\u00f3rej to firmie nie raz zdarzy\u0142o mi si\u0119 ju\u017c pisa\u0107, wyda\u0142 <a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-brings-the-performance-of-jvm-17-to-jdk-11-with-liberica-jdk-performance-edition\/\">Liberica JDK Performance Edition<\/a>. Pod t\u0105 nazw\u0105 kryje si\u0119 JDK 11 zmodyfikowana poprzez integracj\u0119 z poprawkami wydajno\u015bciowymi maszyny wirtualnej pochodz\u0105cymi z JDK 17. Ten oryginalny koncept pozwala u\u017cytkownikom cieszy\u0107 si\u0119 wzrostem wydajno\u015bci do 10-15%, bez konieczno\u015bci dokonywania jakichkolwiek znacz\u0105cych zmian w kodzie. Jak \u0142atwo si\u0119 domy\u015ble\u0107, rozwi\u0105zanie jest skierowane szczeg\u00f3lnie do firm korzystaj\u0105cych z JDK 11, kt\u00f3re mog\u0105 by\u0107 niech\u0119tne lub niezdolne do przej\u015bcia na nowsze wersje. Do zbackportowanych ulepsze\u0144 nale\u017c\u0105 <a class=\"autolink\" href=\"https:\/\/m.in\">m.in<\/a>. poprawki do Garbage Collector\u00f3w czy lepsze wsparcie dla NUMA (Non-Uniform Memory Access).<\/p>\n","innerContent":["\n<p>Zacznijmy od do\u015b\u0107 nietypowego projektu. BellSoft, o kt\u00f3rej to firmie nie raz zdarzy\u0142o mi si\u0119 ju\u017c pisa\u0107, wyda\u0142 <a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-brings-the-performance-of-jvm-17-to-jdk-11-with-liberica-jdk-performance-edition\/\">Liberica JDK Performance Edition<\/a>. Pod t\u0105 nazw\u0105 kryje si\u0119 JDK 11 zmodyfikowana poprzez integracj\u0119 z poprawkami wydajno\u015bciowymi maszyny wirtualnej pochodz\u0105cymi z JDK 17. Ten oryginalny koncept pozwala u\u017cytkownikom cieszy\u0107 si\u0119 wzrostem wydajno\u015bci do 10-15%, bez konieczno\u015bci dokonywania jakichkolwiek znacz\u0105cych zmian w kodzie. Jak \u0142atwo si\u0119 domy\u015ble\u0107, rozwi\u0105zanie jest skierowane szczeg\u00f3lnie do firm korzystaj\u0105cych z JDK 11, kt\u00f3re mog\u0105 by\u0107 niech\u0119tne lub niezdolne do przej\u015bcia na nowsze wersje. Do zbackportowanych ulepsze\u0144 nale\u017c\u0105 <a class=\"autolink\" href=\"https:\/\/m.in\">m.in<\/a>. poprawki do Garbage Collector\u00f3w czy lepsze wsparcie dla NUMA (Non-Uniform Memory Access).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dost\u0119pna od 1 sierpnia dla obecnych subskrybent\u00f3w Liberica JDK, ta edycja jest oferowana bez dodatkowych op\u0142at, w zestawie z innymi narz\u0119dziami od BellSoft. Zastanawiam si\u0119, czy w przysz\u0142o\u015bci b\u0119dziemy \u015bwiadkami pojawienia si\u0119 wi\u0119cej takich propozycji? Kluczow\u0105 kwesti\u0105 wydaje si\u0119 by\u0107 odpowied\u017a na pytanie, kt\u00f3re teraz mnie najbardziej intryguje - jakie projekty wybieraj\u0105 JDK z backportowanymi funkcjami VM zamiast prostego przej\u015bcia na JDK 17? Je\u017celi macie do\u015bwiadczenie w tej kwestii, ch\u0119tnie us\u0142ysz\u0119 Wasze historie.<\/p>\n","innerContent":["\n<p>Dost\u0119pna od 1 sierpnia dla obecnych subskrybent\u00f3w Liberica JDK, ta edycja jest oferowana bez dodatkowych op\u0142at, w zestawie z innymi narz\u0119dziami od BellSoft. Zastanawiam si\u0119, czy w przysz\u0142o\u015bci b\u0119dziemy \u015bwiadkami pojawienia si\u0119 wi\u0119cej takich propozycji? Kluczow\u0105 kwesti\u0105 wydaje si\u0119 by\u0107 odpowied\u017a na pytanie, kt\u00f3re teraz mnie najbardziej intryguje - jakie projekty wybieraj\u0105 JDK z backportowanymi funkcjami VM zamiast prostego przej\u015bcia na JDK 17? Je\u017celi macie do\u015bwiadczenie w tej kwestii, ch\u0119tnie us\u0142ysz\u0119 Wasze historie.<\/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\">Fury<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Fury<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Teraz wchodzimy w rejony, kt\u00f3rych zawsze si\u0119 nieco obawiam - serializacj\u0119. Raz ju\u017c <a href=\"https:\/\/vived.substack.com\/p\/loial-a-new-player-among-serialization\">przejecha\u0142em si\u0119 na nowej bibliotece w tym temacie<\/a>, wi\u0119c ka\u017cdemu rozwi\u0105zaniu przygl\u0105dam si\u0119 bardzo, bardzo uwa\u017cnie. Bo powiedzcie mi, jak nie by\u0107 sceptycznym, gdy widzi si\u0119 to:<\/p>\n","innerContent":["\n<p>Teraz wchodzimy w rejony, kt\u00f3rych zawsze si\u0119 nieco obawiam - serializacj\u0119. Raz ju\u017c <a href=\"https:\/\/vived.substack.com\/p\/loial-a-new-player-among-serialization\">przejecha\u0142em si\u0119 na nowej bibliotece w tym temacie<\/a>, wi\u0119c ka\u017cdemu rozwi\u0105zaniu przygl\u0105dam si\u0119 bardzo, bardzo uwa\u017cnie. Bo powiedzcie mi, jak nie by\u0107 sceptycznym, gdy widzi si\u0119 to:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":589,"height":282},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/yk1n84io0ifb1.png\" alt=\"\" width=\"589\" height=\"282\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/yk1n84io0ifb1.png\" alt=\"\" width=\"589\" height=\"282\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wygl\u0105da jednak na to, \u017ce stworzony przez Ant Group <a href=\"https:\/\/github.com\/alipay\/fury\">Fury<\/a> jest rozwi\u0105zaniem bardzo legitym. Tw\u00f3rcy zreszt\u0105 pokusili si\u0119 na dok\u0142adne wyt\u0142umaczenie, sk\u0105d bior\u0105 si\u0119 takie a nie inne benchmarki w \u015bwietnym blog po\u015bcie: <a href=\"https:\/\/www.furyio.org\/blog\/fury_blazing_fast_multiple_language_serialization_framework\">Fury - A blazing fast multi-language serialization framework powered by jit and zero-copy<\/a>. A ja teraz spr\u00f3buje wyja\u015bni\u0107 to Wam, co wymaga\u0142o ode mnie pewnego doktoryzowania \ud83d\ude04<\/p>\n","innerContent":["\n<p>Wygl\u0105da jednak na to, \u017ce stworzony przez Ant Group <a href=\"https:\/\/github.com\/alipay\/fury\">Fury<\/a> jest rozwi\u0105zaniem bardzo legitym. Tw\u00f3rcy zreszt\u0105 pokusili si\u0119 na dok\u0142adne wyt\u0142umaczenie, sk\u0105d bior\u0105 si\u0119 takie a nie inne benchmarki w \u015bwietnym blog po\u015bcie: <a href=\"https:\/\/www.furyio.org\/blog\/fury_blazing_fast_multiple_language_serialization_framework\">Fury - A blazing fast multi-language serialization framework powered by jit and zero-copy<\/a>. A ja teraz spr\u00f3buje wyja\u015bni\u0107 to Wam, co wymaga\u0142o ode mnie pewnego doktoryzowania \ud83d\ude04<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":540,"height":402},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/4d33462278aa37400299960959e31c3997bb6c2cb9b44ce401eac7297878d073_1.webp\" alt=\"\" width=\"540\" height=\"402\"\/><figcaption class=\"wp-element-caption\">POV<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/4d33462278aa37400299960959e31c3997bb6c2cb9b44ce401eac7297878d073_1.webp\" alt=\"\" width=\"540\" height=\"402\"\/><figcaption class=\"wp-element-caption\">POV<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dwie podstawowe metody serializacji to metody statyczna i dynamiczna. Frameworki opieraj\u0105ce si\u0119 na serializacji statycznej, jak na przyk\u0142ad <strong>protobuf<\/strong>, bazuj\u0105 na ustalonym z g\u00f3ry schemacie. Serializacja odbywa si\u0119 zgodnie z tym schematem, co wymaga od nadawcy i odbiorcy jego wcze\u015bniejszej znajomo\u015bci. Takie podej\u015bcie gwarantuje szybko\u015b\u0107 oraz efektywno\u015b\u0107. Niemniej jednak ma swoje ograniczenia, g\u0142\u00f3wnie ze wzgl\u0119du na brak elastyczno\u015bci - komunikacja mi\u0119dzy r\u00f3\u017cnymi j\u0119zykami programowania opieraj\u0105ca si\u0119 na statycznej strukturze danych mo\u017ce by\u0107 problematyczna, zw\u0142aszcza gdy niezb\u0119dna jest ewolucja schematu. Z kolei dynamiczne frameworki serializacji, takie jak <code>Serializable<\/code> w JDK, Kryo czy Hessian, nie s\u0105 uzale\u017cnione od sta\u0142ego schematu. W trakcie dzia\u0142ania okre\u015blaj\u0105 one struktur\u0119 danych, co sprawia, \u017ce s\u0105 bardziej adaptacyjne. Daje to wi\u0119kszy komfort u\u017cytkowania i mo\u017cliwo\u015b\u0107 wykorzystania polimorfizmu. Niestety, taka elastyczno\u015b\u0107 cz\u0119sto idzie w parze z ni\u017csz\u0105 wydajno\u015bci\u0105, co mo\u017ce stanowi\u0107 wyzwanie w sytuacjach, gdy potrzebna jest du\u017ca przepustowo\u015b\u0107, np. przy masowej transmisji danych.<\/p>\n","innerContent":["\n<p>Dwie podstawowe metody serializacji to metody statyczna i dynamiczna. Frameworki opieraj\u0105ce si\u0119 na serializacji statycznej, jak na przyk\u0142ad <strong>protobuf<\/strong>, bazuj\u0105 na ustalonym z g\u00f3ry schemacie. Serializacja odbywa si\u0119 zgodnie z tym schematem, co wymaga od nadawcy i odbiorcy jego wcze\u015bniejszej znajomo\u015bci. Takie podej\u015bcie gwarantuje szybko\u015b\u0107 oraz efektywno\u015b\u0107. Niemniej jednak ma swoje ograniczenia, g\u0142\u00f3wnie ze wzgl\u0119du na brak elastyczno\u015bci - komunikacja mi\u0119dzy r\u00f3\u017cnymi j\u0119zykami programowania opieraj\u0105ca si\u0119 na statycznej strukturze danych mo\u017ce by\u0107 problematyczna, zw\u0142aszcza gdy niezb\u0119dna jest ewolucja schematu. Z kolei dynamiczne frameworki serializacji, takie jak <code>Serializable<\/code> w JDK, Kryo czy Hessian, nie s\u0105 uzale\u017cnione od sta\u0142ego schematu. W trakcie dzia\u0142ania okre\u015blaj\u0105 one struktur\u0119 danych, co sprawia, \u017ce s\u0105 bardziej adaptacyjne. Daje to wi\u0119kszy komfort u\u017cytkowania i mo\u017cliwo\u015b\u0107 wykorzystania polimorfizmu. Niestety, taka elastyczno\u015b\u0107 cz\u0119sto idzie w parze z ni\u017csz\u0105 wydajno\u015bci\u0105, co mo\u017ce stanowi\u0107 wyzwanie w sytuacjach, gdy potrzebna jest du\u017ca przepustowo\u015b\u0107, np. przy masowej transmisji danych.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Fury szuka kompromisu mi\u0119dzy tymi dwoma \u015bwiatami, staraj\u0105c si\u0119 po\u0142\u0105czy\u0107 zalety obu: elastyczno\u015b\u0107 dynamicznej serializacji i wydajno\u015b\u0107 serializacji statycznej. Framework jest zaprojektowany tak, aby oferowa\u0107 pe\u0142n\u0105 kompatybilno\u015b\u0107 z rozwi\u0105zaniami istniej\u0105cymi ju\u017c w Javie, a dodatkowo posiadaj\u0105c te\u017c warianty dla innych \u015brodowisk. Fury wykorzystuje szereg zaawansowanych technik serializacji, a tak\u017ce wsparcie dla operacji SIMD. Rozwi\u0105zanie wykorzystuje te\u017c Zero-Copy (technik\u0119 przesy\u0142ania danych komputerowych, w kt\u00f3rej dane nie s\u0105 fizycznie kopiowane mi\u0119dzy buforami pami\u0119ci lub innymi warstwami w systemie operacyjnym), minimalizuje op\u00f3\u017anienia podczas transfer\u00f3w danych, eliminuj\u0105c zb\u0119dne kopie pami\u0119ci. Dodatkowo, Fury u\u017cywa kompilatora JIT, kt\u00f3ry wykorzystuje dane o typie obiektu w czasie rzeczywistym, generuj\u0105c zoptymalizowany kod serializacji. Framework k\u0142adzie r\u00f3wnie\u017c nacisk na efektywne wykorzystanie pami\u0119ci podr\u0119cznej, maksymalizuj\u0105c trafienia w pami\u0119\u0107 podr\u0119czn\u0105 danych i instrukcji CPU, oraz obs\u0142uguje wiele protoko\u0142\u00f3w serializacji, dostosowuj\u0105c si\u0119 do r\u00f3\u017cnorodnych wymaga\u0144 aplikacji.<\/p>\n","innerContent":["\n<p>Fury szuka kompromisu mi\u0119dzy tymi dwoma \u015bwiatami, staraj\u0105c si\u0119 po\u0142\u0105czy\u0107 zalety obu: elastyczno\u015b\u0107 dynamicznej serializacji i wydajno\u015b\u0107 serializacji statycznej. Framework jest zaprojektowany tak, aby oferowa\u0107 pe\u0142n\u0105 kompatybilno\u015b\u0107 z rozwi\u0105zaniami istniej\u0105cymi ju\u017c w Javie, a dodatkowo posiadaj\u0105c te\u017c warianty dla innych \u015brodowisk. Fury wykorzystuje szereg zaawansowanych technik serializacji, a tak\u017ce wsparcie dla operacji SIMD. Rozwi\u0105zanie wykorzystuje te\u017c Zero-Copy (technik\u0119 przesy\u0142ania danych komputerowych, w kt\u00f3rej dane nie s\u0105 fizycznie kopiowane mi\u0119dzy buforami pami\u0119ci lub innymi warstwami w systemie operacyjnym), minimalizuje op\u00f3\u017anienia podczas transfer\u00f3w danych, eliminuj\u0105c zb\u0119dne kopie pami\u0119ci. Dodatkowo, Fury u\u017cywa kompilatora JIT, kt\u00f3ry wykorzystuje dane o typie obiektu w czasie rzeczywistym, generuj\u0105c zoptymalizowany kod serializacji. Framework k\u0142adzie r\u00f3wnie\u017c nacisk na efektywne wykorzystanie pami\u0119ci podr\u0119cznej, maksymalizuj\u0105c trafienia w pami\u0119\u0107 podr\u0119czn\u0105 danych i instrukcji CPU, oraz obs\u0142uguje wiele protoko\u0142\u00f3w serializacji, dostosowuj\u0105c si\u0119 do r\u00f3\u017cnorodnych wymaga\u0144 aplikacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":16615,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-2.png\" alt=\"\" class=\"wp-image-16615\"\/><figcaption class=\"wp-element-caption\">TLDR: Wspomniane efekty... no c\u00f3\u017c, maj\u0105 realne pokrycie w twardej in\u017cynierii.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-2.png\" alt=\"\" class=\"wp-image-16615\"\/><figcaption class=\"wp-element-caption\">TLDR: Wspomniane efekty... no c\u00f3\u017c, maj\u0105 realne pokrycie w twardej in\u017cynierii.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli komu\u015b nie wystarcza skompilowane przeze mnie wyt\u0142umaczenie, zapraszam oczywi\u015bcie do <a href=\"https:\/\/www.furyio.org\/blog\/fury_blazing_fast_multiple_language_serialization_framework\">oryginalnej publikacji<\/a>. No i najwa\u017cniejsze pytanie - to co, kto testuje na produkcji?<\/p>\n","innerContent":["\n<p>Je\u015bli komu\u015b nie wystarcza skompilowane przeze mnie wyt\u0142umaczenie, zapraszam oczywi\u015bcie do <a href=\"https:\/\/www.furyio.org\/blog\/fury_blazing_fast_multiple_language_serialization_framework\">oryginalnej publikacji<\/a>. No i najwa\u017cniejsze pytanie - to co, kto testuje na produkcji?<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Eclipse JNoSQL 1.0.0<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Eclipse JNoSQL 1.0.0<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To teraz przechodzimy w rejony Jakarta EE. Przegapi\u0142em bowiem wydanie JNoSQL 1.0.0, ale wykorzystam wydanie <a href=\"https:\/\/github.com\/eclipse\/jnosql\/releases\">wersji 1.0.1<\/a> (oraz publikacje <a href=\"https:\/\/dzone.com\/articles\/eclipse-jnosql-100-streamlining-java-and-nosql-int\">artyku\u0142u na DZone<\/a>) na przedstawienie Wam tego projektu.<\/p>\n","innerContent":["\n<p>To teraz przechodzimy w rejony Jakarta EE. Przegapi\u0142em bowiem wydanie JNoSQL 1.0.0, ale wykorzystam wydanie <a href=\"https:\/\/github.com\/eclipse\/jnosql\/releases\">wersji 1.0.1<\/a> (oraz publikacje <a href=\"https:\/\/dzone.com\/articles\/eclipse-jnosql-100-streamlining-java-and-nosql-int\">artyku\u0142u na DZone<\/a>) na przedstawienie Wam tego projektu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Eclipse JNoSQL to framework Java, b\u0119d\u0105cy zgodn\u0105 implementacj\u0105 specyfikacji Jakarta NoSQL i Jakarta Data. Jest zaprojektowany w celu u\u0142atwienia integracji aplikacji Java z bazami danych NoSQL. Framework ma oferowa\u0107 takich funkcji jak integracja z Contextami i CDI, oraz mo\u017cliwo\u015b\u0107 tworzenia Java-based Query czy wzorce znane w \u015bwiecie enterprise Javy jak Repozytoria i Template. Ponadto wprowadza on anotacje b\u0119d\u0105ce odpowiednikami tych z JPA, jak <code>@Column<\/code> czy <code>@Entity<\/code>. Te adnotacje upraszczaj\u0105 mapowanie obiekt\u00f3w Java do ponad dwudziestu baz danych NoSQL - <a href=\"http:\/\/www.jnosql.org\/docs\/supported_dbs.html\">list\u0119 znajdziecie tutaj<\/a>.<\/p>\n","innerContent":["\n<p>Eclipse JNoSQL to framework Java, b\u0119d\u0105cy zgodn\u0105 implementacj\u0105 specyfikacji Jakarta NoSQL i Jakarta Data. Jest zaprojektowany w celu u\u0142atwienia integracji aplikacji Java z bazami danych NoSQL. Framework ma oferowa\u0107 takich funkcji jak integracja z Contextami i CDI, oraz mo\u017cliwo\u015b\u0107 tworzenia Java-based Query czy wzorce znane w \u015bwiecie enterprise Javy jak Repozytoria i Template. Ponadto wprowadza on anotacje b\u0119d\u0105ce odpowiednikami tych z JPA, jak <code>@Column<\/code> czy <code>@Entity<\/code>. Te adnotacje upraszczaj\u0105 mapowanie obiekt\u00f3w Java do ponad dwudziestu baz danych NoSQL - <a href=\"http:\/\/www.jnosql.org\/docs\/supported_dbs.html\">list\u0119 znajdziecie tutaj<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":521,"height":411},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/WWfGbSq.png\" alt=\"\" width=\"521\" height=\"411\"\/><figcaption class=\"wp-element-caption\">Przy okazji tego artyku\u0142u odkry\u0142em, \u017ce stara dobra http:\/\/annotatiomania.com\/ ju\u017c znik\u0142a z odm\u0119t\u00f3w internetu. Ale nie martwcie si\u0119 - mamy Wayback Machine \ud83d\ude04<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/WWfGbSq.png\" alt=\"\" width=\"521\" height=\"411\"\/><figcaption class=\"wp-element-caption\">Przy okazji tego artyku\u0142u odkry\u0142em, \u017ce stara dobra http:\/\/annotatiomania.com\/ ju\u017c znik\u0142a z odm\u0119t\u00f3w internetu. Ale nie martwcie si\u0119 - mamy Wayback Machine \ud83d\ude04<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Eclipse JNoSQL, 1.0.0, wprowadzi\u0142o szereg usprawnie\u0144 maj\u0105cych na celu popraw\u0119 mo\u017cliwo\u015bci frameworku oraz procesu integracji mi\u0119dzy Java a bazami danych NoSQL. Nowa wersja oferuje prostsz\u0105 konfiguracj\u0119 bazy danych, zmniejszaj\u0105c nak\u0142ad pracy zwi\u0105zany z pocz\u0105tkow\u0105 konfiguracj\u0105. Wprowadzono te\u017c wsparcie dla Java Records, i ich bezproblemowe mapowanie na struktury danych NoSQL. <\/p>\n","innerContent":["\n<p>Eclipse JNoSQL, 1.0.0, wprowadzi\u0142o szereg usprawnie\u0144 maj\u0105cych na celu popraw\u0119 mo\u017cliwo\u015bci frameworku oraz procesu integracji mi\u0119dzy Java a bazami danych NoSQL. Nowa wersja oferuje prostsz\u0105 konfiguracj\u0119 bazy danych, zmniejszaj\u0105c nak\u0142ad pracy zwi\u0105zany z pocz\u0105tkow\u0105 konfiguracj\u0105. Wprowadzono te\u017c wsparcie dla Java Records, i ich bezproblemowe mapowanie na struktury danych NoSQL. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>I musz\u0119 przyzna\u0107, \u017ce o ile zdarza mi si\u0119 u\u017cywa\u0107 np. Spring Data, o tyle zawsze, kiedy bior\u0119 jaki\u015b generyczny framework NoSQL... czuje si\u0119 do\u015b\u0107 dziwnie. Mam wtedy wra\u017cenie, \u017ce r\u00f3wnie dobrze m\u00f3g\u0142bym u\u017cywa\u0107 pod spodem zwyk\u0142ego PostgreSQL \ud83e\udd37\u200d\u2642\ufe0f.<\/p>\n","innerContent":["\n<p>I musz\u0119 przyzna\u0107, \u017ce o ile zdarza mi si\u0119 u\u017cywa\u0107 np. Spring Data, o tyle zawsze, kiedy bior\u0119 jaki\u015b generyczny framework NoSQL... czuje si\u0119 do\u015b\u0107 dziwnie. Mam wtedy wra\u017cenie, \u017ce r\u00f3wnie dobrze m\u00f3g\u0142bym u\u017cywa\u0107 pod spodem zwyk\u0142ego PostgreSQL \ud83e\udd37\u200d\u2642\ufe0f.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Jlama &amp; <a class=\"autolink\" href=\"https:\/\/llama2.java\">llama2.java<\/a><\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Jlama &amp; <a class=\"autolink\" href=\"https:\/\/llama2.java\">llama2.java<\/a><\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W konkluzji, mamy dwa projekty o podobnej naturze, lecz w tym zawirowaniu tkwi pewna logika.<\/p>\n","innerContent":["\n<p>W konkluzji, mamy dwa projekty o podobnej naturze, lecz w tym zawirowaniu tkwi pewna logika.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>2023 rok wydaje si\u0119 nadal dominowa\u0107 tematem Du\u017cych Modeli J\u0119zykowych, a informacje o nowych inicjatywach w tej dziedzinie pojawiaj\u0105 si\u0119 niemal nieustannie. Jednym z najbardziej wyr\u00f3\u017cniaj\u0105cych si\u0119 jest LLaMA stworzona przez firm\u0119 Meta, stanowi\u0105ca konkurencj\u0119 dla GPT od OpenAI. Niedawno Meta przedstawi\u0142a LLaMA 2, ulepszon\u0105 wersj\u0119 swojego modelu. Kluczow\u0105 informacj\u0105 dla tego artyku\u0142u jest fakt, \u017ce ten model jest dost\u0119pny w otwartym \u017ar\u00f3dle i jest licencjonowany do zastosowa\u0144 komercyjnych, w odr\u00f3\u017cnieniu od jego poprzednika skierowanego wy\u0142\u0105cznie do bada\u0144 naukowych. W kr\u00f3tkim czasie zdoby\u0142a ona uwag\u0119 wielu podmiot\u00f3w na rynku, w tym niespodziewanie Microsoftu, kt\u00f3ry wsp\u00f3\u0142pracuje z OpenAI. Rozpocz\u0119\u0142a si\u0119 wi\u0119c rywalizacja w bran\u017cy, kt\u00f3ra przenios\u0142a si\u0119 r\u00f3wnie\u017c do \u015bwiata Java. W tej konkurencji wyra\u017anie wyr\u00f3\u017cniaj\u0105 si\u0119 dwa projekty: Jlama oraz <a class=\"autolink\" href=\"https:\/\/llama2.java\">llama2.java<\/a>.<\/p>\n","innerContent":["\n<p>2023 rok wydaje si\u0119 nadal dominowa\u0107 tematem Du\u017cych Modeli J\u0119zykowych, a informacje o nowych inicjatywach w tej dziedzinie pojawiaj\u0105 si\u0119 niemal nieustannie. Jednym z najbardziej wyr\u00f3\u017cniaj\u0105cych si\u0119 jest LLaMA stworzona przez firm\u0119 Meta, stanowi\u0105ca konkurencj\u0119 dla GPT od OpenAI. Niedawno Meta przedstawi\u0142a LLaMA 2, ulepszon\u0105 wersj\u0119 swojego modelu. Kluczow\u0105 informacj\u0105 dla tego artyku\u0142u jest fakt, \u017ce ten model jest dost\u0119pny w otwartym \u017ar\u00f3dle i jest licencjonowany do zastosowa\u0144 komercyjnych, w odr\u00f3\u017cnieniu od jego poprzednika skierowanego wy\u0142\u0105cznie do bada\u0144 naukowych. W kr\u00f3tkim czasie zdoby\u0142a ona uwag\u0119 wielu podmiot\u00f3w na rynku, w tym niespodziewanie Microsoftu, kt\u00f3ry wsp\u00f3\u0142pracuje z OpenAI. Rozpocz\u0119\u0142a si\u0119 wi\u0119c rywalizacja w bran\u017cy, kt\u00f3ra przenios\u0142a si\u0119 r\u00f3wnie\u017c do \u015bwiata Java. W tej konkurencji wyra\u017anie wyr\u00f3\u017cniaj\u0105 si\u0119 dwa projekty: Jlama oraz <a class=\"autolink\" href=\"https:\/\/llama2.java\">llama2.java<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/github.com\/tjake\/Jlama\">Jlama<\/a> to silnik przetwarzania oparty na Javie dla LLM, kompatybilny z modelami takimi jak Llama, Llama2 czy GPT-2 (kt\u00f3ry tak\u017ce zosta\u0142 udost\u0119pniony), a tak\u017ce z formatem modelu Huggingface SafeTensors. Aby dzia\u0142a\u0107, wymaga on Javy 20 oraz korzysta z cz\u0119sto omawianego tutaj Vector API, kt\u00f3re umo\u017cliwia szybkie obliczenia wektorowe niezb\u0119dne podczas wnioskowania z modeli. Na ten moment to g\u0142\u00f3wne informacje na jego temat, cho\u0107 warto zwr\u00f3ci\u0107 uwag\u0119, \u017ce jest on udost\u0119pniony na licencji Apache.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/github.com\/tjake\/Jlama\">Jlama<\/a> to silnik przetwarzania oparty na Javie dla LLM, kompatybilny z modelami takimi jak Llama, Llama2 czy GPT-2 (kt\u00f3ry tak\u017ce zosta\u0142 udost\u0119pniony), a tak\u017ce z formatem modelu Huggingface SafeTensors. Aby dzia\u0142a\u0107, wymaga on Javy 20 oraz korzysta z cz\u0119sto omawianego tutaj Vector API, kt\u00f3re umo\u017cliwia szybkie obliczenia wektorowe niezb\u0119dne podczas wnioskowania z modeli. Na ten moment to g\u0142\u00f3wne informacje na jego temat, cho\u0107 warto zwr\u00f3ci\u0107 uwag\u0119, \u017ce jest on udost\u0119pniony na licencji Apache.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z kolei <a href=\"https:\/\/github.com\/mukel\/llama2.java\">llama2.java<\/a> to bardziej zaawansowany projekt. Ten wspiera tylko Llama 2 - jest to bowiem bezpo\u015bredni port llama2.scala, kt\u00f3ry z kolei bazuje na llama2.c stworzonym przez Andreja Karpathy'ego. Co ciekawe, projekt ma na celu s\u0142u\u017cy\u0107 jako pole do testowania nowych funkcji j\u0119zykowych, ale tak\u017ce por\u00f3wnywa\u0107 wydajno\u015b\u0107 GraalVM w stosunku do wersji w C. W repozytorium znajduj\u0105 si\u0119 odpowiednie testy wydajno\u015bciowe. Aby skorzysta\u0107 z tej biblioteki, potrzebujesz Javy w wersji 20+, wraz ze wsparciem dla <code>MemorySegment<\/code> i <code>Vector API<\/code>.<\/p>\n","innerContent":["\n<p>Z kolei <a href=\"https:\/\/github.com\/mukel\/llama2.java\">llama2.java<\/a> to bardziej zaawansowany projekt. Ten wspiera tylko Llama 2 - jest to bowiem bezpo\u015bredni port llama2.scala, kt\u00f3ry z kolei bazuje na llama2.c stworzonym przez Andreja Karpathy'ego. Co ciekawe, projekt ma na celu s\u0142u\u017cy\u0107 jako pole do testowania nowych funkcji j\u0119zykowych, ale tak\u017ce por\u00f3wnywa\u0107 wydajno\u015b\u0107 GraalVM w stosunku do wersji w C. W repozytorium znajduj\u0105 si\u0119 odpowiednie testy wydajno\u015bciowe. Aby skorzysta\u0107 z tej biblioteki, potrzebujesz Javy w wersji 20+, wraz ze wsparciem dla <code>MemorySegment<\/code> i <code>Vector API<\/code>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co edycj\u0119 pojawiaj\u0105 si\u0119 nam nowo\u015bci dotycz\u0105ce Javowych rozwi\u0105za\u0144 w dziedzinie sztucznej inteligencji, co napawa mnie entuzjazmem. Te projekty bowiem potwierdzaj\u0105 moje przekonanie: najnowsze funkcje j\u0119zyka otwieraj\u0105 drzwi przed kolejnymi zastosowaniami, a ich wp\u0142yw si\u0119ga znacznie dalej ni\u017c zwyk\u0142e s\u0142odziki sk\u0142adniowe. Dzi\u0119ki dynamicznemu rozwojowi w ostatnich latach oraz tego rodzaju projektom, Java demonstruje, \u017ce znajduje si\u0119 w czo\u0142\u00f3wce narz\u0119dzi stosowanych w nowoczesnych rozwi\u0105zaniach, co skutecznie ucisza jej sceptyk\u00f3w, wieszcz\u0105cym jej rych\u0142\u0105 \u015bmier\u0107.<\/p>\n","innerContent":["\n<p>Co edycj\u0119 pojawiaj\u0105 si\u0119 nam nowo\u015bci dotycz\u0105ce Javowych rozwi\u0105za\u0144 w dziedzinie sztucznej inteligencji, co napawa mnie entuzjazmem. Te projekty bowiem potwierdzaj\u0105 moje przekonanie: najnowsze funkcje j\u0119zyka otwieraj\u0105 drzwi przed kolejnymi zastosowaniami, a ich wp\u0142yw si\u0119ga znacznie dalej ni\u017c zwyk\u0142e s\u0142odziki sk\u0142adniowe. Dzi\u0119ki dynamicznemu rozwojowi w ostatnich latach oraz tego rodzaju projektom, Java demonstruje, \u017ce znajduje si\u0119 w czo\u0142\u00f3wce narz\u0119dzi stosowanych w nowoczesnych rozwi\u0105zaniach, co skutecznie ucisza jej sceptyk\u00f3w, wieszcz\u0105cym jej rych\u0142\u0105 \u015bmier\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":600,"height":500},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/sRNzVfc.png\" alt=\"\" width=\"600\" height=\"500\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/sRNzVfc.png\" alt=\"\" width=\"600\" height=\"500\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>I tym optymistycznym stwierdzeniem \u017cegnam si\u0119 - widzimy si\u0119 za tydzie\u0144 (ju\u017c my\u015bl\u0119 w regularnym, wtorkowym trybie)! <\/p>\n","innerContent":["\n<p>I tym optymistycznym stwierdzeniem \u017cegnam si\u0119 - widzimy si\u0119 za tydzie\u0144 (ju\u017c my\u015bl\u0119 w regularnym, wtorkowym trybie)! <\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16588","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=16588"}],"version-history":[{"count":37,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16588\/revisions"}],"predecessor-version":[{"id":16641,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16588\/revisions\/16641"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/16628"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=16588"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=16588"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=16588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}