{"id":10146,"date":"2021-04-27T09:29:03","date_gmt":"2021-04-27T07:29:03","guid":{"rendered":"https:\/\/vived.io\/jvm-tuesday-vol-35\/"},"modified":"2022-09-19T13:10:54","modified_gmt":"2022-09-19T11:10:54","slug":"jvm-tuesday-vol-35","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/","title":{"rendered":"JVM Tuesday vol. 35"},"content":{"rendered":"<h2 id=\"1-graalvm-21-1-szybszy-rozruch-aplikacji-dzieki-wielopoziomowej-kompilacji\" data-num=1>1. <a href=\"https:\/\/medium.com\/graalvm\/graalvm-21-1-96e18f6806bf\">GraalVM 21.1: Szybszy rozruch aplikacji dzi\u0119ki wielopoziomowej kompilacji <\/a><\/h2>\n<p>Opisuj\u0105c z tygodnia na tydzie\u0144 zmiany w ekosystemie j\u0119zyka\/platformy (a robimy to dla Was ju\u017c ponad p\u00f3\u0142 roku, a prawie kwarta\u0142 w formie blogowej ), si\u0142\u0105 rzeczy niekt\u00f3re tematy po prostu musz\u0105 w miar\u0119 regularnie wraca\u0107. Z perspektywy redaktora (jak to dumnie brzmi!) wydaje mi si\u0119, \u017ce dopiero co dotykali\u015bmy tematu nowo\u015bci w GraalVM, aczkolwiek po sprawdzeniu okazuje si\u0119, \u017ce <a href=\"https:\/\/blog.vived.io\/jvm-tuesday-vol-22\/\">ostatni raz robili\u015bmy to w\u2026 styczniu<\/a>. Projekty JVMowe rozwijaj\u0105 si\u0119 jednak bardzo dynamicznie, w zwi\u0105zku z czym, ostatni tydzie\u0144 sta\u0142 pod znakiem dalszego rozwoju tego meta-frameworku. Na rynek trafi\u0142a bowiem wersja 21.1, kt\u00f3ra mimo niepozornej numeracji przynosi mas\u0119 interesuj\u0105cych zmian.<\/p>\n<p>Zacznijmy od \u201cciep\u0142ej wody w kranie\u201d. O ile GraalVM zawsze targetuje bie\u017c\u0105c\u0105 Jav\u0119 w wersji LTS, to jego nowa ods\u0142ona wprowadza bonusowo eksperymentalne wsparcie dla JDK 16. Tw\u00f3rcy z g\u00f3ry zastrzegaj\u0105, \u017ce jest to rozwi\u0105zanie dalekie od produkcyjnego, a bior\u0105c pod uwag\u0119 rych\u0142\u0105 premier\u0119 Javy 17, kt\u00f3ra b\u0119dzie kolejn\u0105 wersj\u0105 o d\u0142ugim wsparciu, potencjalnie nigdy si\u0119 nie uprodukcyjni. Jest to bardzo interesuj\u0105ca sytuacja, w kt\u00f3rej wersje po\u015brednie JDK bardziej pomagaj\u0105 tw\u00f3rcom narz\u0119dzi &#8211; mo\u017cliwo\u015b\u0107 poeksperymentowania z Jav\u0105 16 na tym etapie upro\u015bci proces przechodzenia GraalVM na nowego LTSa. Nowe wydanie to te\u017c okazja do po\u017cegnania si\u0119 ze wsparciem dla JDK 8 &#8211; od wersji 21.1, ta wci\u0105\u017c najpopularniejsza, a jednak dzi\u015b ju\u017c mocno przestarza\u0142a wersja Javy, b\u0119dzie mog\u0142a by\u0107 wspierana tylko w wersji Enterprise.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif\" alt=\"\" \/><figcaption>Na pewno jest to \u0142agodniejsza \u201cdeprekacja\u201d ni\u017c ta, kt\u00f3r\u0105 Graal realizowa\u0142 w \u201cIndiana Jones and Last Crusade\u201d<\/figcaption><\/figure>\n<p>Wsparcie dla Node.js\u2019a r\u00f3wnie\u017c zosta\u0142o zaktualizowane, \u00a0jednocze\u015bnie w ramach odchudzania bazowej wersji GraalVM, zosta\u0142o wsparcie tej platformy wydzielone z g\u0142\u00f3wnego wydania do zewn\u0119trznego modu\u0142u, kt\u00f3ry nale\u017cy doinstalowa\u0107 w ramach. Co ciekawe, ten sam los nie spotka\u0142 wsparcia dla JavaScriptu, kt\u00f3re pozostaje integraln\u0105 cz\u0119\u015bci\u0105 GraalVM.<\/p>\n<p>Nowe wydanie to r\u00f3wnie\u017c kilka interesuj\u0105cych zmian w samym procesie kompilacji. Generowany natywny kod znacznie agresywniej teraz podchodzi do tematu wsp\u00f3\u0142bie\u017cno\u015bci, w mniej asekuracyjny spos\u00f3b podchodz\u0105c do tego, jakie operacje mog\u0105 by\u0107 wykonane r\u00f3wnolegle. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce zmiany s\u0105 szczeg\u00f3lnie widoczne np. podczas u\u017cywania <em>ConcurrentHashMap<\/em>.<\/p>\n<figure class=\"kg-card kg-image-card\"><img loading=\"lazy\" decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-17.png\" alt=\"\" width=\"421\" height=\"427\" \/><\/figure>\n<p>Jednak chyba najbardziej interesuj\u0105cym dodatkiem, kt\u00f3ry przynosi nowa edycja jest tak zwana wielopoziomowa kompilacja \u00a0(Multi-Tier Compilation), dzia\u0142aj\u0105ca na zasadach zbli\u017conych do tych znanych z kompilatora JIT. Jest ona dost\u0119pna dla programist\u00f3w, kt\u00f3rzy zdecyduj\u0105 si\u0119 na u\u017cycie wbudowanego w GraalVM narz\u0119dzia Truffle, o kt\u00f3rym nieco wi\u0119cej pisali\u015bmy przy okazji <a href=\"https:\/\/blog.vived.io\/jvm-tuesday-vol-22\/\">jednej z poprzednich edycji<\/a> (kiedy to pocz\u0105tkiem roku <a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">dosta\u0142 wsparcie r\u00f3wnie\u017c dla Javy<\/a>). W praktyce sprowadza si\u0119 to do tego, \u017ce zaraz po uruchomieniu, pocz\u0105tkowe optymalizacje s\u0105 nieco mniej agresywne, co pozwala jednak na szybszy rozruch. Dopiero, gdy aplikacja jest ju\u017c w pe\u0142ni gotowa do dzia\u0142ania, nast\u0119puje druga faza optymalizacji. Ca\u0142o\u015b\u0107 ma za zadanie przyspieszy\u0107 pocz\u0105tkowy rozruch aplikacji.onkretne benchmarki zosta\u0142y <a href=\"https:\/\/medium.com\/graalvm\/multi-tier-compilation-in-graalvm-5fbc65f92402\">opisane za\u015b w tym artykule<\/a>. W nim te\u017c znajdziecie dok\u0142adny opis ca\u0142ego procesu.<\/p>\n<p>Og\u00f3lnie GraalVM idzie ostro do przodu i wszystko wskazuje na to, \u017ce jeszcze nie raz o nim od nas us\u0142yszycie.<\/p>\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"GraalVM 21.1 Unboxing\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/74OLj92QWiA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<p>PS: Je\u017celi lubicie wersje wideo, wczoraj ukaza\u0142o si\u0119 bardzo fajnie przej\u015bcie przez opisywane przez nas zmiany<\/p>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n<li><a href=\"https:\/\/medium.com\/graalvm\/graalvm-21-1-96e18f6806bf\">Faster warmup, smaller downloads, JDK 16 \u2014 GraalVM 21.1 is here!<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/graalvm\/multi-tier-compilation-in-graalvm-5fbc65f92402\">Multi-Tier Compilation in GraalVM<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">Java on Truffle \u2014 Going Fully Metacircular<\/a><\/li>\n<\/ul>\n<h2 id=\"2-project-valhalla-wymusza-grube-zmiany-w-modelu-danych-jvm\" data-num=2>2. <a href=\"https:\/\/github.com\/openjdk\/valhalla-docs\/blob\/main\/site\/design-notes\/state-of-valhalla\/03-vm-model.md\">Project Valhalla wymusza grube zmiany w modelu danych JVM <\/a><\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abfabea0.png\" alt=\"\" \/><\/figure>\n<p>Dzisiejsz\u0105 edycj\u0119 mo\u017cna og\u00f3lnie uzna\u0107 za dosy\u0107 \u201cinternalow\u0105\u201d. Po zmianach w do\u015b\u0107 niszowym, jednak wci\u0105\u017c, GraalVM, dzielimy si\u0119 z Wami r\u00f3wnie\u017c dokumentem opisuj\u0105cy rozw\u00f3j prac nad Valhall\u0105 &#8211; jednym z najwa\u017cniejszych obecnie rozwijanych projekt\u00f3w odbywaj\u0105cych si\u0119 w ramach JVMa. Dzi\u0119ki pracy Johna Rose\u2019a i Briana Goetza mamy okazj\u0119 dowiedzie\u0107 si\u0119, jak w swoim bie\u017c\u0105cym kszta\u0142cie wp\u0142ynie on na bytecode samego JVMa.<\/p>\n<p>I cho\u0107 zdajemy sobie spraw\u0119, \u017ce ci\u0119\u017cko o bardziej hermetyczny temat (rozkminy, jak na poziomie bajtkodu b\u0119dzie zachowywa\u0107 si\u0119 funkcjonalno\u015b\u0107 j\u0119zyka, kt\u00f3rej jeszcze nie ma), to jednak publikacja zapewnia sporo ciekawych informacji o decyzjach projektowych i ich reperkusjach. Tekst nie nale\u017cy do najprostszych (mimo, \u017ce napisany jest w jak najbardziej przyst\u0119pny spos\u00f3b, po prostu ta tematyka jest z za\u0142o\u017cenia mocno z\u0142o\u017cona), ale dla nas, \u015bmiertelnych klepaczy kodu, wnosi tyle \u017ce bogowie JVMa zdecydowali si\u0119 do\u015b\u0107 mocno maszyn\u0119 wirtualn\u0105, przeora\u0107 na potrzeby zmian wprowadzonych w Valhalli. Najwi\u0119ksz\u0105 r\u00f3\u017cnic\u0105 w stosunku do oryginalnych za\u0142o\u017ce\u0144 jest fakt, \u017ce projektanci Valhalli zdecydowali si\u0119 na porzucenie pocz\u0105tkowego konceptu \u201cwt\u0142oczenia\u201d klas prymitywnych w ju\u017c istniej\u0105ce <a href=\"https:\/\/stackoverflow.com\/questions\/38079081\/l-z-and-v-in-java-method-signature\">JVMowe typy typ L &#8211; oznacza to, \u017ce mamy do czynienia z referencj\u0105 do obiektu.<\/a><\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img loading=\"lazy\" decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/carbon-1.png\" sizes=\"auto, (min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_carbon-1.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_carbon-1.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_carbon-1.png 1600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/carbon-1.png 2048w\" alt=\"\" width=\"2000\" height=\"469\" \/><figcaption>Je\u017celi zastanawiali\u015bcie si\u0119 kiedy\u015b, co oznacza L, kt\u00f3re pojawia si\u0119 przed nazw\u0105 pakietu po kompilacji [Ljava.lang.Object, to mamy dla Was odpowied\u017a. Jest to w\u0142a\u015bnie deskryptor typu maszyny wirtualnej.\u00a0<\/figcaption><\/figure>\n<blockquote><p>Ciekawostka &#8211; nikt nie ma poj\u0119cia, dlaczego wybrane zosta\u0142o L. Artyku\u0142 sugeruje, \u017ce C mog\u0142o by\u0107 po prostu ju\u017c zaj\u0119te przez Char, wybrano wi\u0119c drug\u0105 literk\u0119 s\u0142owa Class.<\/p><\/blockquote>\n<p>Zamiast tego tw\u00f3rcy zdecydowali si\u0119 rozszerzy\u0107 hierarchi\u0119 o dodatkowy typ Q, maj\u0105cy opisywa\u0107 \u201cklasy egzotyczne\u201d, kt\u00f3rych jedynym reprezentantem na ten moment s\u0105 w\u0142a\u015bnie \u201cklasy prymitywne\u201d. Maj\u0105 one bazowa\u0107 na wspomnianym ju\u017c typie L. G\u0142\u00f3wna r\u00f3\u017cnica mi\u0119dzy tymi dwoma ma sprowadza\u0107 si\u0119 do tego, \u017ce obiekty \u201cL\u201d s\u0105 leniwe &#8211; mog\u0105 zosta\u0107 zaczytane przez JVM dopiero przy pierwszym u\u017cyciu. Obiekty typu Q musz\u0105 zosta\u0107 od samego pocz\u0105tku w pe\u0142ni \u201czrozumia\u0142e\u201d przez JVM,dzi\u0119ki temu mo\u017cliwa jest znacznie bardziej agresywna optymalizacja pami\u0119ci.<\/p>\n<p>Oczywi\u015bcie, to o czym pisz\u0119 dla Was, to wierzcho\u0142ek g\u00f3ry lodowej &#8211; ch\u0119tnych zapraszam do <a href=\"https:\/\/github.com\/openjdk\/valhalla-docs\/blob\/main\/site\/design-notes\/state-of-valhalla\/03-vm-model.md\">pe\u0142nej publikacji<\/a>. Moja obawa po lekturze jest taka, \u017ce bior\u0105c pod uwag\u0119 zakres planowanych zmian, ja Valhalli chyba nigdy nie do\u017cyje.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0ac0e3c1d.png\" alt=\"\" \/><figcaption>Mam przynajmniej nadzieje, \u017ce moje wnuki z tego projektu skorzystaj\u0105.\u00a0<\/figcaption><\/figure>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-1\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n<li><a href=\"https:\/\/stackoverflow.com\/questions\/38079081\/l-z-and-v-in-java-method-signature\">L, Z and V in Java method signature<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/openjdk\/valhalla-docs\/blob\/main\/site\/design-notes\/state-of-valhalla\/03-vm-model.md\">State of Valhalla &#8211; Section 3: JVM Model<\/a><\/li>\n<\/ul>\n<h2 id=\"3-cos-dla-fullstackow-jhipster-7-wydany\" data-num=3>3. <a href=\"https:\/\/www.infoq.com\/news\/2021\/04\/jhipster-java-app-generator\/\">Co\u015b dla fullstack\u00f3w &#8211; JHipster 7 wydany <\/a><\/h2>\n<p>Dobra, na koniec zostawili\u015bmy sobie projekt, kt\u00f3ry nosi chocia\u017c znamiona czego\u015b, co w roku 2021, kto\u015b z nas mo\u017ce u\u017cy\u0107 w realnym projekcie.<\/p>\n<p>Ot\u00f3\u017c niedawno &#8211; ko\u0144cem marca, sami ten fakt przegapili\u015bmy &#8211; ukaza\u0142a si\u0119 wersja si\u00f3dma generatora fullstackowych aplikacji Javowych o wdzi\u0119cznej nazwie JHipster. Projekt ten od d\u0142u\u017cszego czasu \u017cyje sobie na marginesie spo\u0142eczno\u015bci, zapewniaj\u0105c mo\u017cliwo\u015b\u0107 szybkiego wygenerowania w pe\u0142ni skonfigurowanej aplikacji posiadaj\u0105cej Javowy backend oraz funkcjonalny frontend. W mojej g\u0142owie, JHipster zawsze kojarzy\u0142 si\u0119 z idealnym rozwi\u0105zaniem na potrzeby hackathon\u00f3w. \u00a0Niemal natychmiastowo pozwala on bowiem zbootstrapowa\u0107 dzia\u0142aj\u0105cy szkielet, kt\u00f3ry nast\u0119pnie \u0142atwo i szybko mo\u017cna rozwija\u0107. Jednocze\u015bnie jednak, do\u015b\u0107 sceptycznie podchodzi\u0142em do wszelkich potencjalnych wdro\u017ce\u0144 komercyjnych &#8211; powiedzmy sobie szczerze, jak cz\u0119sto zdarza si\u0119 Wam w pracy setupowa\u0107 od podstaw ca\u0142e projekty, zw\u0142aszcza takie posiadaj\u0105ce zar\u00f3wno frontend, jak i backend? No w\u0142a\u015bnie . Jednocze\u015bnie jednak, tw\u00f3rcy chwal\u0105 si\u0119 <a href=\"https:\/\/www.jhipster.tech\/companies-using-jhipster\/\">ca\u0142kiem spor\u0105 list\u0105 klient\u00f3w<\/a>, mo\u017cliwe wi\u0119c, \u017ce to moje patrzenie jest tutaj do\u015b\u0107 tunelowe.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0ac1939ff.png\" alt=\"\" \/><figcaption>Aczkolwiek patrz\u0105c na przyk\u0142adowe wdro\u017cenia, wydaje mi si\u0119 \u017ce jednak te wszystkie \u201cu\u017cywane przez Google\u201d mog\u0105 oznacza\u0107 raczej aplikacje dla firmowych sto\u0142\u00f3wek ni\u017c oprogramowanie krytyczne dla biznesu.<\/figcaption><\/figure>\n<p>JHipster od kilku edycji rozwija si\u0119 \u201cwszerz\u201d. Pocz\u0105tkowo b\u0119d\u0105c w pe\u0142ni \u201cwyopiowanym\u201d rozwi\u0105zaniem Spring Boot + Angular, przez lata zacz\u0105\u0142 pozwala\u0107 na du\u017co bardziej elastyczny dob\u00f3r technologii frontowym. Nowe wydanie idzie jednak o krok dalej, pozwalaj\u0105c na dopasowanie pod siebie r\u00f3wnie\u017c backendu &#8211; w\u015br\u00f3d dost\u0119pnych rozwi\u0105za\u0144 opr\u00f3cz Spring Boota pojawi\u0142 si\u0119 m.in. Quarkus i Micronaut. Ewolucj\u0119 przesz\u0142o te\u017c podej\u015bcie do testowania frontendu. Protractor zosta\u0142 zast\u0105piony przez rozpychaj\u0105cego si\u0119 \u0142okciami ostatnio Cypressa.<\/p>\n<p>Je\u017celi z wcze\u015bniejszych akapit\u00f3w nie wyczytali\u015bcie zbytniego entuzjazmu, pami\u0119tajcie \u017ce wynika to z moich wcze\u015bniejszych do\u015bwiadcze\u0144 m.in. niespe\u0142nionym obietnicom podobnego projektu ze \u015brodowiska Node.js, yeomana, z kt\u00f3rym zawsze by\u0142o wi\u0119cej aktualizacji i walki ni\u017c realnego po\u017cytku. Jak to jednak m\u00f3wi\u0105, \u201cyour mileage may vary\u201d, wi\u0119c je\u015bli macie w g\u0142owie jaki\u015b przypadek u\u017cycia, mo\u017cliwe \u017ce warto si\u0119 JHipsterem zainteresowa\u0107.<\/p>\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"Co m\u00f3wi\u0105: HIPSTERZY\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/842rALjSvsU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<p>Przepraszam za feeling youtubowej karty \u201cNa Czasie\u201d, ale ten filmik to moje guilty pleasure i nie mog\u0142em si\u0119 powstrzyma\u0107.<\/p>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-2\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2021\/04\/jhipster-java-app-generator\/\">JHipster 7.0: Java Application Generator Stretches beyond Spring Boot Roots<\/a><\/li>\n<li><a href=\"https:\/\/www.jhipster.tech\/2021\/03\/21\/jhipster-release-7.0.0.html\">JHipster release v7.0.0<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>W dzisiejszej edycji sporo internali. Project Valhalla przyniesie du\u017ce zmiany w JVMie, a nowa wersja GraalVM dodaje wielopoziomow\u0105 kompilacje. Nieco na prze\u0142amanie, mamy te\u017c now\u0105 edycje JHipstera dla wszystkich tych kt\u00f3rzy czuj\u0105 si\u0119 FullStackami \ud83e\uddd4. Zapraszamy do lektury!<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-10146","post","type-post","status-publish","format-standard","hentry","category-jvm-pl"],"acf":{"weekly_summary":true,"estimated_reading_time":"7"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JVM Tuesday vol. 35 - 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\/jvm-tuesday-vol-35\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Tuesday vol. 35 - Vived\" \/>\n<meta property=\"og:description\" content=\"W dzisiejszej edycji sporo internali. Project Valhalla przyniesie du\u017ce zmiany w JVMie, a nowa wersja GraalVM dodaje wielopoziomow\u0105 kompilacje. Nieco na prze\u0142amanie, mamy te\u017c now\u0105 edycje JHipstera dla wszystkich tych kt\u00f3rzy czuj\u0105 si\u0119 FullStackami \ud83e\uddd4. Zapraszamy do lektury!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-27T07:29:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif\" \/>\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\/jvm-tuesday-vol-35\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM Tuesday vol. 35\",\"datePublished\":\"2021-04-27T07:29:03+00:00\",\"dateModified\":\"2022-09-19T11:10:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/\"},\"wordCount\":1508,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/\",\"name\":\"JVM Tuesday vol. 35 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif\",\"datePublished\":\"2021-04-27T07:29:03+00:00\",\"dateModified\":\"2022-09-19T11:10:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Tuesday vol. 35\"}]},{\"@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":"JVM Tuesday vol. 35 - 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\/jvm-tuesday-vol-35\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM Tuesday vol. 35 - Vived","og_description":"W dzisiejszej edycji sporo internali. Project Valhalla przyniesie du\u017ce zmiany w JVMie, a nowa wersja GraalVM dodaje wielopoziomow\u0105 kompilacje. Nieco na prze\u0142amanie, mamy te\u017c now\u0105 edycje JHipstera dla wszystkich tych kt\u00f3rzy czuj\u0105 si\u0119 FullStackami \ud83e\uddd4. Zapraszamy do lektury!","og_url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/","og_site_name":"Vived","article_published_time":"2021-04-27T07:29:03+00:00","article_modified_time":"2022-09-19T11:10:54+00:00","og_image":[{"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif","type":"","width":"","height":""}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM Tuesday vol. 35","datePublished":"2021-04-27T07:29:03+00:00","dateModified":"2022-09-19T11:10:54+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/"},"wordCount":1508,"commentCount":0,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif","articleSection":["JVM"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/","url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/","name":"JVM Tuesday vol. 35 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif","datePublished":"2021-04-27T07:29:03+00:00","dateModified":"2022-09-19T11:10:54+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif"},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-35\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM Tuesday vol. 35"}]},{"@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":null,"attrs":[],"innerBlocks":[],"innerHTML":"<h2 id=\"1-graalvm-211-szybszy-rozruch-aplikacji-dzi%C4%99ki-wielopoziomowej-kompilacji-%F0%9F%8D%B0\">1. <a href=\"https:\/\/medium.com\/graalvm\/graalvm-21-1-96e18f6806bf\">GraalVM 21.1: Szybszy rozruch aplikacji dzi\u0119ki wielopoziomowej kompilacji <\/a><\/h2>\nOpisuj\u0105c z tygodnia na tydzie\u0144 zmiany w ekosystemie j\u0119zyka\/platformy (a robimy to dla Was ju\u017c ponad p\u00f3\u0142 roku, a prawie kwarta\u0142 w formie blogowej ), si\u0142\u0105 rzeczy niekt\u00f3re tematy po prostu musz\u0105 w miar\u0119 regularnie wraca\u0107. Z perspektywy redaktora (jak to dumnie brzmi!) wydaje mi si\u0119, \u017ce dopiero co dotykali\u015bmy tematu nowo\u015bci w GraalVM, aczkolwiek po sprawdzeniu okazuje si\u0119, \u017ce <a href=\"https:\/\/blog.vived.io\/jvm-tuesday-vol-22\/\">ostatni raz robili\u015bmy to w\u2026 styczniu<\/a>. Projekty JVMowe rozwijaj\u0105 si\u0119 jednak bardzo dynamicznie, w zwi\u0105zku z czym, ostatni tydzie\u0144 sta\u0142 pod znakiem dalszego rozwoju tego meta-frameworku. Na rynek trafi\u0142a bowiem wersja 21.1, kt\u00f3ra mimo niepozornej numeracji przynosi mas\u0119 interesuj\u0105cych zmian.\n\nZacznijmy od \u201cciep\u0142ej wody w kranie\u201d. O ile GraalVM zawsze targetuje bie\u017c\u0105c\u0105 Jav\u0119 w wersji LTS, to jego nowa ods\u0142ona wprowadza bonusowo eksperymentalne wsparcie dla JDK 16. Tw\u00f3rcy z g\u00f3ry zastrzegaj\u0105, \u017ce jest to rozwi\u0105zanie dalekie od produkcyjnego, a bior\u0105c pod uwag\u0119 rych\u0142\u0105 premier\u0119 Javy 17, kt\u00f3ra b\u0119dzie kolejn\u0105 wersj\u0105 o d\u0142ugim wsparciu, potencjalnie nigdy si\u0119 nie uprodukcyjni. Jest to bardzo interesuj\u0105ca sytuacja, w kt\u00f3rej wersje po\u015brednie JDK bardziej pomagaj\u0105 tw\u00f3rcom narz\u0119dzi - mo\u017cliwo\u015b\u0107 poeksperymentowania z Jav\u0105 16 na tym etapie upro\u015bci proces przechodzenia GraalVM na nowego LTSa. Nowe wydanie to te\u017c okazja do po\u017cegnania si\u0119 ze wsparciem dla JDK 8 - od wersji 21.1, ta wci\u0105\u017c najpopularniejsza, a jednak dzi\u015b ju\u017c mocno przestarza\u0142a wersja Javy, b\u0119dzie mog\u0142a by\u0107 wspierana tylko w wersji Enterprise.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif\" alt=\"\" \/>\n<figcaption>Na pewno jest to \u0142agodniejsza \u201cdeprekacja\u201d ni\u017c ta, kt\u00f3r\u0105 Graal realizowa\u0142 w \u201cIndiana Jones and Last Crusade\u201d<\/figcaption><\/figure>\nWsparcie dla Node.js\u2019a r\u00f3wnie\u017c zosta\u0142o zaktualizowane, \u00a0jednocze\u015bnie w ramach odchudzania bazowej wersji GraalVM, zosta\u0142o wsparcie tej platformy wydzielone z g\u0142\u00f3wnego wydania do zewn\u0119trznego modu\u0142u, kt\u00f3ry nale\u017cy doinstalowa\u0107 w ramach. Co ciekawe, ten sam los nie spotka\u0142 wsparcia dla JavaScriptu, kt\u00f3re pozostaje integraln\u0105 cz\u0119\u015bci\u0105 GraalVM.\n\nNowe wydanie to r\u00f3wnie\u017c kilka interesuj\u0105cych zmian w samym procesie kompilacji. Generowany natywny kod znacznie agresywniej teraz podchodzi do tematu wsp\u00f3\u0142bie\u017cno\u015bci, w mniej asekuracyjny spos\u00f3b podchodz\u0105c do tego, jakie operacje mog\u0105 by\u0107 wykonane r\u00f3wnolegle. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce zmiany s\u0105 szczeg\u00f3lnie widoczne np. podczas u\u017cywania <em>ConcurrentHashMap<\/em>.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-17.png\" alt=\"\" width=\"421\" height=\"427\" \/><\/figure>\nJednak chyba najbardziej interesuj\u0105cym dodatkiem, kt\u00f3ry przynosi nowa edycja jest tak zwana wielopoziomowa kompilacja \u00a0(Multi-Tier Compilation), dzia\u0142aj\u0105ca na zasadach zbli\u017conych do tych znanych z kompilatora JIT. Jest ona dost\u0119pna dla programist\u00f3w, kt\u00f3rzy zdecyduj\u0105 si\u0119 na u\u017cycie wbudowanego w GraalVM narz\u0119dzia Truffle, o kt\u00f3rym nieco wi\u0119cej pisali\u015bmy przy okazji <a href=\"https:\/\/blog.vived.io\/jvm-tuesday-vol-22\/\">jednej z poprzednich edycji<\/a> (kiedy to pocz\u0105tkiem roku <a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">dosta\u0142 wsparcie r\u00f3wnie\u017c dla Javy<\/a>). W praktyce sprowadza si\u0119 to do tego, \u017ce zaraz po uruchomieniu, pocz\u0105tkowe optymalizacje s\u0105 nieco mniej agresywne, co pozwala jednak na szybszy rozruch. Dopiero, gdy aplikacja jest ju\u017c w pe\u0142ni gotowa do dzia\u0142ania, nast\u0119puje druga faza optymalizacji. Ca\u0142o\u015b\u0107 ma za zadanie przyspieszy\u0107 pocz\u0105tkowy rozruch aplikacji.onkretne benchmarki zosta\u0142y <a href=\"https:\/\/medium.com\/graalvm\/multi-tier-compilation-in-graalvm-5fbc65f92402\">opisane za\u015b w tym artykule<\/a>. W nim te\u017c znajdziecie dok\u0142adny opis ca\u0142ego procesu.\n\nOg\u00f3lnie GraalVM idzie ostro do przodu i wszystko wskazuje na to, \u017ce jeszcze nie raz o nim od nas us\u0142yszycie.\n\nhttps:\/\/www.youtube.com\/watch?v=74OLj92QWiA\nPS: Je\u017celi lubicie wersje wideo, wczoraj ukaza\u0142o si\u0119 bardzo fajnie przej\u015bcie przez opisywane przez nas zmiany\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/medium.com\/graalvm\/graalvm-21-1-96e18f6806bf\">Faster warmup, smaller downloads, JDK 16 \u2014 GraalVM 21.1 is here!<\/a><\/li>\n \t<li><a href=\"https:\/\/medium.com\/graalvm\/multi-tier-compilation-in-graalvm-5fbc65f92402\">Multi-Tier Compilation in GraalVM<\/a><\/li>\n \t<li><a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">Java on Truffle \u2014 Going Fully Metacircular<\/a><\/li>\n<\/ul>\n<h2 id=\"2-project-valhalla-wymusza-grube-zmiany-w-modelu-danych-jvm-%F0%9F%98%B0\">2. <a href=\"https:\/\/github.com\/openjdk\/valhalla-docs\/blob\/main\/site\/design-notes\/state-of-valhalla\/03-vm-model.md\">Project Valhalla wymusza grube zmiany w modelu danych JVM <\/a><\/h2>\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abfabea0.png\" alt=\"\" \/><\/figure>\nDzisiejsz\u0105 edycj\u0119 mo\u017cna og\u00f3lnie uzna\u0107 za dosy\u0107 \u201cinternalow\u0105\u201d. Po zmianach w do\u015b\u0107 niszowym, jednak wci\u0105\u017c, GraalVM, dzielimy si\u0119 z Wami r\u00f3wnie\u017c dokumentem opisuj\u0105cy rozw\u00f3j prac nad Valhall\u0105 - jednym z najwa\u017cniejszych obecnie rozwijanych projekt\u00f3w odbywaj\u0105cych si\u0119 w ramach JVMa. Dzi\u0119ki pracy Johna Rose\u2019a i Briana Goetza mamy okazj\u0119 dowiedzie\u0107 si\u0119, jak w swoim bie\u017c\u0105cym kszta\u0142cie wp\u0142ynie on na bytecode samego JVMa.\n\nI cho\u0107 zdajemy sobie spraw\u0119, \u017ce ci\u0119\u017cko o bardziej hermetyczny temat (rozkminy, jak na poziomie bajtkodu b\u0119dzie zachowywa\u0107 si\u0119 funkcjonalno\u015b\u0107 j\u0119zyka, kt\u00f3rej jeszcze nie ma), to jednak publikacja zapewnia sporo ciekawych informacji o decyzjach projektowych i ich reperkusjach. Tekst nie nale\u017cy do najprostszych (mimo, \u017ce napisany jest w jak najbardziej przyst\u0119pny spos\u00f3b, po prostu ta tematyka jest z za\u0142o\u017cenia mocno z\u0142o\u017cona), ale dla nas, \u015bmiertelnych klepaczy kodu, wnosi tyle \u017ce bogowie JVMa zdecydowali si\u0119 do\u015b\u0107 mocno maszyn\u0119 wirtualn\u0105, przeora\u0107 na potrzeby zmian wprowadzonych w Valhalli. Najwi\u0119ksz\u0105 r\u00f3\u017cnic\u0105 w stosunku do oryginalnych za\u0142o\u017ce\u0144 jest fakt, \u017ce projektanci Valhalli zdecydowali si\u0119 na porzucenie pocz\u0105tkowego konceptu \u201cwt\u0142oczenia\u201d klas prymitywnych w ju\u017c istniej\u0105ce <a href=\"https:\/\/stackoverflow.com\/questions\/38079081\/l-z-and-v-in-java-method-signature\">JVMowe typy typ L - oznacza to, \u017ce mamy do czynienia z referencj\u0105 do obiektu.<\/a>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/carbon-1.png\" sizes=\"(min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_carbon-1.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_carbon-1.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_carbon-1.png 1600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/carbon-1.png 2048w\" alt=\"\" width=\"2000\" height=\"469\" \/>\n\n<figcaption>Je\u017celi zastanawiali\u015bcie si\u0119 kiedy\u015b, co oznacza L, kt\u00f3re pojawia si\u0119 przed nazw\u0105 pakietu po kompilacji [Ljava.lang.Object, to mamy dla Was odpowied\u017a. Jest to w\u0142a\u015bnie deskryptor typu maszyny wirtualnej.\u00a0<\/figcaption><\/figure>\n<blockquote>Ciekawostka - nikt nie ma poj\u0119cia, dlaczego wybrane zosta\u0142o L. Artyku\u0142 sugeruje, \u017ce C mog\u0142o by\u0107 po prostu ju\u017c zaj\u0119te przez Char, wybrano wi\u0119c drug\u0105 literk\u0119 s\u0142owa Class.<\/blockquote>\nZamiast tego tw\u00f3rcy zdecydowali si\u0119 rozszerzy\u0107 hierarchi\u0119 o dodatkowy typ Q, maj\u0105cy opisywa\u0107 \u201cklasy egzotyczne\u201d, kt\u00f3rych jedynym reprezentantem na ten moment s\u0105 w\u0142a\u015bnie \u201cklasy prymitywne\u201d. Maj\u0105 one bazowa\u0107 na wspomnianym ju\u017c typie L. G\u0142\u00f3wna r\u00f3\u017cnica mi\u0119dzy tymi dwoma ma sprowadza\u0107 si\u0119 do tego, \u017ce obiekty \u201cL\u201d s\u0105 leniwe - mog\u0105 zosta\u0107 zaczytane przez JVM dopiero przy pierwszym u\u017cyciu. Obiekty typu Q musz\u0105 zosta\u0107 od samego pocz\u0105tku w pe\u0142ni \u201czrozumia\u0142e\u201d przez JVM,dzi\u0119ki temu mo\u017cliwa jest znacznie bardziej agresywna optymalizacja pami\u0119ci.\n\nOczywi\u015bcie, to o czym pisz\u0119 dla Was, to wierzcho\u0142ek g\u00f3ry lodowej - ch\u0119tnych zapraszam do <a href=\"https:\/\/github.com\/openjdk\/valhalla-docs\/blob\/main\/site\/design-notes\/state-of-valhalla\/03-vm-model.md\">pe\u0142nej publikacji<\/a>. Moja obawa po lekturze jest taka, \u017ce bior\u0105c pod uwag\u0119 zakres planowanych zmian, ja Valhalli chyba nigdy nie do\u017cyje.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0ac0e3c1d.png\" alt=\"\" \/>\n\n<figcaption>Mam przynajmniej nadzieje, \u017ce moje wnuki z tego projektu skorzystaj\u0105.\u00a0<\/figcaption><\/figure>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-1\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/stackoverflow.com\/questions\/38079081\/l-z-and-v-in-java-method-signature\">L, Z and V in Java method signature<\/a><\/li>\n \t<li><a href=\"https:\/\/github.com\/openjdk\/valhalla-docs\/blob\/main\/site\/design-notes\/state-of-valhalla\/03-vm-model.md\">State of Valhalla - Section 3: JVM Model<\/a><\/li>\n<\/ul>\n<h2 id=\"3-co%C5%9B-dla-fullstack%C3%B3wjhipster-7-wydany-%F0%9F%A7%94\">3. <a href=\"https:\/\/www.infoq.com\/news\/2021\/04\/jhipster-java-app-generator\/\">Co\u015b dla fullstack\u00f3w - JHipster 7 wydany <\/a><\/h2>\nDobra, na koniec zostawili\u015bmy sobie projekt, kt\u00f3ry nosi chocia\u017c znamiona czego\u015b, co w roku 2021, kto\u015b z nas mo\u017ce u\u017cy\u0107 w realnym projekcie.\n\nOt\u00f3\u017c niedawno - ko\u0144cem marca, sami ten fakt przegapili\u015bmy - ukaza\u0142a si\u0119 wersja si\u00f3dma generatora fullstackowych aplikacji Javowych o wdzi\u0119cznej nazwie JHipster. Projekt ten od d\u0142u\u017cszego czasu \u017cyje sobie na marginesie spo\u0142eczno\u015bci, zapewniaj\u0105c mo\u017cliwo\u015b\u0107 szybkiego wygenerowania w pe\u0142ni skonfigurowanej aplikacji posiadaj\u0105cej Javowy backend oraz funkcjonalny frontend. W mojej g\u0142owie, JHipster zawsze kojarzy\u0142 si\u0119 z idealnym rozwi\u0105zaniem na potrzeby hackathon\u00f3w. \u00a0Niemal natychmiastowo pozwala on bowiem zbootstrapowa\u0107 dzia\u0142aj\u0105cy szkielet, kt\u00f3ry nast\u0119pnie \u0142atwo i szybko mo\u017cna rozwija\u0107. Jednocze\u015bnie jednak, do\u015b\u0107 sceptycznie podchodzi\u0142em do wszelkich potencjalnych wdro\u017ce\u0144 komercyjnych - powiedzmy sobie szczerze, jak cz\u0119sto zdarza si\u0119 Wam w pracy setupowa\u0107 od podstaw ca\u0142e projekty, zw\u0142aszcza takie posiadaj\u0105ce zar\u00f3wno frontend, jak i backend? No w\u0142a\u015bnie . Jednocze\u015bnie jednak, tw\u00f3rcy chwal\u0105 si\u0119 <a href=\"https:\/\/www.jhipster.tech\/companies-using-jhipster\/\">ca\u0142kiem spor\u0105 list\u0105 klient\u00f3w<\/a>, mo\u017cliwe wi\u0119c, \u017ce to moje patrzenie jest tutaj do\u015b\u0107 tunelowe.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0ac1939ff.png\" alt=\"\" \/>\n\n<figcaption>Aczkolwiek patrz\u0105c na przyk\u0142adowe wdro\u017cenia, wydaje mi si\u0119 \u017ce jednak te wszystkie \u201cu\u017cywane przez Google\u201d mog\u0105 oznacza\u0107 raczej aplikacje dla firmowych sto\u0142\u00f3wek ni\u017c oprogramowanie krytyczne dla biznesu.<\/figcaption><\/figure>\nJHipster od kilku edycji rozwija si\u0119 \u201cwszerz\u201d. Pocz\u0105tkowo b\u0119d\u0105c w pe\u0142ni \u201cwyopiowanym\u201d rozwi\u0105zaniem Spring Boot + Angular, przez lata zacz\u0105\u0142 pozwala\u0107 na du\u017co bardziej elastyczny dob\u00f3r technologii frontowym. Nowe wydanie idzie jednak o krok dalej, pozwalaj\u0105c na dopasowanie pod siebie r\u00f3wnie\u017c backendu - w\u015br\u00f3d dost\u0119pnych rozwi\u0105za\u0144 opr\u00f3cz Spring Boota pojawi\u0142 si\u0119 m.in. Quarkus i Micronaut. Ewolucj\u0119 przesz\u0142o te\u017c podej\u015bcie do testowania frontendu. Protractor zosta\u0142 zast\u0105piony przez rozpychaj\u0105cego si\u0119 \u0142okciami ostatnio Cypressa.\n\nJe\u017celi z wcze\u015bniejszych akapit\u00f3w nie wyczytali\u015bcie zbytniego entuzjazmu, pami\u0119tajcie \u017ce wynika to z moich wcze\u015bniejszych do\u015bwiadcze\u0144 m.in. niespe\u0142nionym obietnicom podobnego projektu ze \u015brodowiska Node.js, yeomana, z kt\u00f3rym zawsze by\u0142o wi\u0119cej aktualizacji i walki ni\u017c realnego po\u017cytku. Jak to jednak m\u00f3wi\u0105, \u201cyour mileage may vary\u201d, wi\u0119c je\u015bli macie w g\u0142owie jaki\u015b przypadek u\u017cycia, mo\u017cliwe \u017ce warto si\u0119 JHipsterem zainteresowa\u0107.\n\nhttps:\/\/www.youtube.com\/watch?v=842rALjSvsU\nPrzepraszam za feeling youtubowej karty \u201cNa Czasie\u201d, ale ten filmik to moje guilty pleasure i nie mog\u0142em si\u0119 powstrzyma\u0107.\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-2\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/www.infoq.com\/news\/2021\/04\/jhipster-java-app-generator\/\">JHipster 7.0: Java Application Generator Stretches beyond Spring Boot Roots<\/a><\/li>\n \t<li><a href=\"https:\/\/www.jhipster.tech\/2021\/03\/21\/jhipster-release-7.0.0.html\">JHipster release v7.0.0<\/a><\/li>\n<\/ul>","innerContent":["<h2 id=\"1-graalvm-211-szybszy-rozruch-aplikacji-dzi%C4%99ki-wielopoziomowej-kompilacji-%F0%9F%8D%B0\">1. <a href=\"https:\/\/medium.com\/graalvm\/graalvm-21-1-96e18f6806bf\">GraalVM 21.1: Szybszy rozruch aplikacji dzi\u0119ki wielopoziomowej kompilacji <\/a><\/h2>\nOpisuj\u0105c z tygodnia na tydzie\u0144 zmiany w ekosystemie j\u0119zyka\/platformy (a robimy to dla Was ju\u017c ponad p\u00f3\u0142 roku, a prawie kwarta\u0142 w formie blogowej ), si\u0142\u0105 rzeczy niekt\u00f3re tematy po prostu musz\u0105 w miar\u0119 regularnie wraca\u0107. Z perspektywy redaktora (jak to dumnie brzmi!) wydaje mi si\u0119, \u017ce dopiero co dotykali\u015bmy tematu nowo\u015bci w GraalVM, aczkolwiek po sprawdzeniu okazuje si\u0119, \u017ce <a href=\"https:\/\/blog.vived.io\/jvm-tuesday-vol-22\/\">ostatni raz robili\u015bmy to w\u2026 styczniu<\/a>. Projekty JVMowe rozwijaj\u0105 si\u0119 jednak bardzo dynamicznie, w zwi\u0105zku z czym, ostatni tydzie\u0144 sta\u0142 pod znakiem dalszego rozwoju tego meta-frameworku. Na rynek trafi\u0142a bowiem wersja 21.1, kt\u00f3ra mimo niepozornej numeracji przynosi mas\u0119 interesuj\u0105cych zmian.\n\nZacznijmy od \u201cciep\u0142ej wody w kranie\u201d. O ile GraalVM zawsze targetuje bie\u017c\u0105c\u0105 Jav\u0119 w wersji LTS, to jego nowa ods\u0142ona wprowadza bonusowo eksperymentalne wsparcie dla JDK 16. Tw\u00f3rcy z g\u00f3ry zastrzegaj\u0105, \u017ce jest to rozwi\u0105zanie dalekie od produkcyjnego, a bior\u0105c pod uwag\u0119 rych\u0142\u0105 premier\u0119 Javy 17, kt\u00f3ra b\u0119dzie kolejn\u0105 wersj\u0105 o d\u0142ugim wsparciu, potencjalnie nigdy si\u0119 nie uprodukcyjni. Jest to bardzo interesuj\u0105ca sytuacja, w kt\u00f3rej wersje po\u015brednie JDK bardziej pomagaj\u0105 tw\u00f3rcom narz\u0119dzi - mo\u017cliwo\u015b\u0107 poeksperymentowania z Jav\u0105 16 na tym etapie upro\u015bci proces przechodzenia GraalVM na nowego LTSa. Nowe wydanie to te\u017c okazja do po\u017cegnania si\u0119 ze wsparciem dla JDK 8 - od wersji 21.1, ta wci\u0105\u017c najpopularniejsza, a jednak dzi\u015b ju\u017c mocno przestarza\u0142a wersja Javy, b\u0119dzie mog\u0142a by\u0107 wspierana tylko w wersji Enterprise.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abed8044.gif\" alt=\"\" \/>\n<figcaption>Na pewno jest to \u0142agodniejsza \u201cdeprekacja\u201d ni\u017c ta, kt\u00f3r\u0105 Graal realizowa\u0142 w \u201cIndiana Jones and Last Crusade\u201d<\/figcaption><\/figure>\nWsparcie dla Node.js\u2019a r\u00f3wnie\u017c zosta\u0142o zaktualizowane, \u00a0jednocze\u015bnie w ramach odchudzania bazowej wersji GraalVM, zosta\u0142o wsparcie tej platformy wydzielone z g\u0142\u00f3wnego wydania do zewn\u0119trznego modu\u0142u, kt\u00f3ry nale\u017cy doinstalowa\u0107 w ramach. Co ciekawe, ten sam los nie spotka\u0142 wsparcia dla JavaScriptu, kt\u00f3re pozostaje integraln\u0105 cz\u0119\u015bci\u0105 GraalVM.\n\nNowe wydanie to r\u00f3wnie\u017c kilka interesuj\u0105cych zmian w samym procesie kompilacji. Generowany natywny kod znacznie agresywniej teraz podchodzi do tematu wsp\u00f3\u0142bie\u017cno\u015bci, w mniej asekuracyjny spos\u00f3b podchodz\u0105c do tego, jakie operacje mog\u0105 by\u0107 wykonane r\u00f3wnolegle. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce zmiany s\u0105 szczeg\u00f3lnie widoczne np. podczas u\u017cywania <em>ConcurrentHashMap<\/em>.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-17.png\" alt=\"\" width=\"421\" height=\"427\" \/><\/figure>\nJednak chyba najbardziej interesuj\u0105cym dodatkiem, kt\u00f3ry przynosi nowa edycja jest tak zwana wielopoziomowa kompilacja \u00a0(Multi-Tier Compilation), dzia\u0142aj\u0105ca na zasadach zbli\u017conych do tych znanych z kompilatora JIT. Jest ona dost\u0119pna dla programist\u00f3w, kt\u00f3rzy zdecyduj\u0105 si\u0119 na u\u017cycie wbudowanego w GraalVM narz\u0119dzia Truffle, o kt\u00f3rym nieco wi\u0119cej pisali\u015bmy przy okazji <a href=\"https:\/\/blog.vived.io\/jvm-tuesday-vol-22\/\">jednej z poprzednich edycji<\/a> (kiedy to pocz\u0105tkiem roku <a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">dosta\u0142 wsparcie r\u00f3wnie\u017c dla Javy<\/a>). W praktyce sprowadza si\u0119 to do tego, \u017ce zaraz po uruchomieniu, pocz\u0105tkowe optymalizacje s\u0105 nieco mniej agresywne, co pozwala jednak na szybszy rozruch. Dopiero, gdy aplikacja jest ju\u017c w pe\u0142ni gotowa do dzia\u0142ania, nast\u0119puje druga faza optymalizacji. Ca\u0142o\u015b\u0107 ma za zadanie przyspieszy\u0107 pocz\u0105tkowy rozruch aplikacji.onkretne benchmarki zosta\u0142y <a href=\"https:\/\/medium.com\/graalvm\/multi-tier-compilation-in-graalvm-5fbc65f92402\">opisane za\u015b w tym artykule<\/a>. W nim te\u017c znajdziecie dok\u0142adny opis ca\u0142ego procesu.\n\nOg\u00f3lnie GraalVM idzie ostro do przodu i wszystko wskazuje na to, \u017ce jeszcze nie raz o nim od nas us\u0142yszycie.\n\nhttps:\/\/www.youtube.com\/watch?v=74OLj92QWiA\nPS: Je\u017celi lubicie wersje wideo, wczoraj ukaza\u0142o si\u0119 bardzo fajnie przej\u015bcie przez opisywane przez nas zmiany\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/medium.com\/graalvm\/graalvm-21-1-96e18f6806bf\">Faster warmup, smaller downloads, JDK 16 \u2014 GraalVM 21.1 is here!<\/a><\/li>\n \t<li><a href=\"https:\/\/medium.com\/graalvm\/multi-tier-compilation-in-graalvm-5fbc65f92402\">Multi-Tier Compilation in GraalVM<\/a><\/li>\n \t<li><a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">Java on Truffle \u2014 Going Fully Metacircular<\/a><\/li>\n<\/ul>\n<h2 id=\"2-project-valhalla-wymusza-grube-zmiany-w-modelu-danych-jvm-%F0%9F%98%B0\">2. <a href=\"https:\/\/github.com\/openjdk\/valhalla-docs\/blob\/main\/site\/design-notes\/state-of-valhalla\/03-vm-model.md\">Project Valhalla wymusza grube zmiany w modelu danych JVM <\/a><\/h2>\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0abfabea0.png\" alt=\"\" \/><\/figure>\nDzisiejsz\u0105 edycj\u0119 mo\u017cna og\u00f3lnie uzna\u0107 za dosy\u0107 \u201cinternalow\u0105\u201d. Po zmianach w do\u015b\u0107 niszowym, jednak wci\u0105\u017c, GraalVM, dzielimy si\u0119 z Wami r\u00f3wnie\u017c dokumentem opisuj\u0105cy rozw\u00f3j prac nad Valhall\u0105 - jednym z najwa\u017cniejszych obecnie rozwijanych projekt\u00f3w odbywaj\u0105cych si\u0119 w ramach JVMa. Dzi\u0119ki pracy Johna Rose\u2019a i Briana Goetza mamy okazj\u0119 dowiedzie\u0107 si\u0119, jak w swoim bie\u017c\u0105cym kszta\u0142cie wp\u0142ynie on na bytecode samego JVMa.\n\nI cho\u0107 zdajemy sobie spraw\u0119, \u017ce ci\u0119\u017cko o bardziej hermetyczny temat (rozkminy, jak na poziomie bajtkodu b\u0119dzie zachowywa\u0107 si\u0119 funkcjonalno\u015b\u0107 j\u0119zyka, kt\u00f3rej jeszcze nie ma), to jednak publikacja zapewnia sporo ciekawych informacji o decyzjach projektowych i ich reperkusjach. Tekst nie nale\u017cy do najprostszych (mimo, \u017ce napisany jest w jak najbardziej przyst\u0119pny spos\u00f3b, po prostu ta tematyka jest z za\u0142o\u017cenia mocno z\u0142o\u017cona), ale dla nas, \u015bmiertelnych klepaczy kodu, wnosi tyle \u017ce bogowie JVMa zdecydowali si\u0119 do\u015b\u0107 mocno maszyn\u0119 wirtualn\u0105, przeora\u0107 na potrzeby zmian wprowadzonych w Valhalli. Najwi\u0119ksz\u0105 r\u00f3\u017cnic\u0105 w stosunku do oryginalnych za\u0142o\u017ce\u0144 jest fakt, \u017ce projektanci Valhalli zdecydowali si\u0119 na porzucenie pocz\u0105tkowego konceptu \u201cwt\u0142oczenia\u201d klas prymitywnych w ju\u017c istniej\u0105ce <a href=\"https:\/\/stackoverflow.com\/questions\/38079081\/l-z-and-v-in-java-method-signature\">JVMowe typy typ L - oznacza to, \u017ce mamy do czynienia z referencj\u0105 do obiektu.<\/a>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/carbon-1.png\" sizes=\"(min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_carbon-1.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_carbon-1.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_carbon-1.png 1600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/carbon-1.png 2048w\" alt=\"\" width=\"2000\" height=\"469\" \/>\n\n<figcaption>Je\u017celi zastanawiali\u015bcie si\u0119 kiedy\u015b, co oznacza L, kt\u00f3re pojawia si\u0119 przed nazw\u0105 pakietu po kompilacji [Ljava.lang.Object, to mamy dla Was odpowied\u017a. Jest to w\u0142a\u015bnie deskryptor typu maszyny wirtualnej.\u00a0<\/figcaption><\/figure>\n<blockquote>Ciekawostka - nikt nie ma poj\u0119cia, dlaczego wybrane zosta\u0142o L. Artyku\u0142 sugeruje, \u017ce C mog\u0142o by\u0107 po prostu ju\u017c zaj\u0119te przez Char, wybrano wi\u0119c drug\u0105 literk\u0119 s\u0142owa Class.<\/blockquote>\nZamiast tego tw\u00f3rcy zdecydowali si\u0119 rozszerzy\u0107 hierarchi\u0119 o dodatkowy typ Q, maj\u0105cy opisywa\u0107 \u201cklasy egzotyczne\u201d, kt\u00f3rych jedynym reprezentantem na ten moment s\u0105 w\u0142a\u015bnie \u201cklasy prymitywne\u201d. Maj\u0105 one bazowa\u0107 na wspomnianym ju\u017c typie L. G\u0142\u00f3wna r\u00f3\u017cnica mi\u0119dzy tymi dwoma ma sprowadza\u0107 si\u0119 do tego, \u017ce obiekty \u201cL\u201d s\u0105 leniwe - mog\u0105 zosta\u0107 zaczytane przez JVM dopiero przy pierwszym u\u017cyciu. Obiekty typu Q musz\u0105 zosta\u0107 od samego pocz\u0105tku w pe\u0142ni \u201czrozumia\u0142e\u201d przez JVM,dzi\u0119ki temu mo\u017cliwa jest znacznie bardziej agresywna optymalizacja pami\u0119ci.\n\nOczywi\u015bcie, to o czym pisz\u0119 dla Was, to wierzcho\u0142ek g\u00f3ry lodowej - ch\u0119tnych zapraszam do <a href=\"https:\/\/github.com\/openjdk\/valhalla-docs\/blob\/main\/site\/design-notes\/state-of-valhalla\/03-vm-model.md\">pe\u0142nej publikacji<\/a>. Moja obawa po lekturze jest taka, \u017ce bior\u0105c pod uwag\u0119 zakres planowanych zmian, ja Valhalli chyba nigdy nie do\u017cyje.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0ac0e3c1d.png\" alt=\"\" \/>\n\n<figcaption>Mam przynajmniej nadzieje, \u017ce moje wnuki z tego projektu skorzystaj\u0105.\u00a0<\/figcaption><\/figure>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-1\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/stackoverflow.com\/questions\/38079081\/l-z-and-v-in-java-method-signature\">L, Z and V in Java method signature<\/a><\/li>\n \t<li><a href=\"https:\/\/github.com\/openjdk\/valhalla-docs\/blob\/main\/site\/design-notes\/state-of-valhalla\/03-vm-model.md\">State of Valhalla - Section 3: JVM Model<\/a><\/li>\n<\/ul>\n<h2 id=\"3-co%C5%9B-dla-fullstack%C3%B3wjhipster-7-wydany-%F0%9F%A7%94\">3. <a href=\"https:\/\/www.infoq.com\/news\/2021\/04\/jhipster-java-app-generator\/\">Co\u015b dla fullstack\u00f3w - JHipster 7 wydany <\/a><\/h2>\nDobra, na koniec zostawili\u015bmy sobie projekt, kt\u00f3ry nosi chocia\u017c znamiona czego\u015b, co w roku 2021, kto\u015b z nas mo\u017ce u\u017cy\u0107 w realnym projekcie.\n\nOt\u00f3\u017c niedawno - ko\u0144cem marca, sami ten fakt przegapili\u015bmy - ukaza\u0142a si\u0119 wersja si\u00f3dma generatora fullstackowych aplikacji Javowych o wdzi\u0119cznej nazwie JHipster. Projekt ten od d\u0142u\u017cszego czasu \u017cyje sobie na marginesie spo\u0142eczno\u015bci, zapewniaj\u0105c mo\u017cliwo\u015b\u0107 szybkiego wygenerowania w pe\u0142ni skonfigurowanej aplikacji posiadaj\u0105cej Javowy backend oraz funkcjonalny frontend. W mojej g\u0142owie, JHipster zawsze kojarzy\u0142 si\u0119 z idealnym rozwi\u0105zaniem na potrzeby hackathon\u00f3w. \u00a0Niemal natychmiastowo pozwala on bowiem zbootstrapowa\u0107 dzia\u0142aj\u0105cy szkielet, kt\u00f3ry nast\u0119pnie \u0142atwo i szybko mo\u017cna rozwija\u0107. Jednocze\u015bnie jednak, do\u015b\u0107 sceptycznie podchodzi\u0142em do wszelkich potencjalnych wdro\u017ce\u0144 komercyjnych - powiedzmy sobie szczerze, jak cz\u0119sto zdarza si\u0119 Wam w pracy setupowa\u0107 od podstaw ca\u0142e projekty, zw\u0142aszcza takie posiadaj\u0105ce zar\u00f3wno frontend, jak i backend? No w\u0142a\u015bnie . Jednocze\u015bnie jednak, tw\u00f3rcy chwal\u0105 si\u0119 <a href=\"https:\/\/www.jhipster.tech\/companies-using-jhipster\/\">ca\u0142kiem spor\u0105 list\u0105 klient\u00f3w<\/a>, mo\u017cliwe wi\u0119c, \u017ce to moje patrzenie jest tutaj do\u015b\u0107 tunelowe.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0ac1939ff.png\" alt=\"\" \/>\n\n<figcaption>Aczkolwiek patrz\u0105c na przyk\u0142adowe wdro\u017cenia, wydaje mi si\u0119 \u017ce jednak te wszystkie \u201cu\u017cywane przez Google\u201d mog\u0105 oznacza\u0107 raczej aplikacje dla firmowych sto\u0142\u00f3wek ni\u017c oprogramowanie krytyczne dla biznesu.<\/figcaption><\/figure>\nJHipster od kilku edycji rozwija si\u0119 \u201cwszerz\u201d. Pocz\u0105tkowo b\u0119d\u0105c w pe\u0142ni \u201cwyopiowanym\u201d rozwi\u0105zaniem Spring Boot + Angular, przez lata zacz\u0105\u0142 pozwala\u0107 na du\u017co bardziej elastyczny dob\u00f3r technologii frontowym. Nowe wydanie idzie jednak o krok dalej, pozwalaj\u0105c na dopasowanie pod siebie r\u00f3wnie\u017c backendu - w\u015br\u00f3d dost\u0119pnych rozwi\u0105za\u0144 opr\u00f3cz Spring Boota pojawi\u0142 si\u0119 m.in. Quarkus i Micronaut. Ewolucj\u0119 przesz\u0142o te\u017c podej\u015bcie do testowania frontendu. Protractor zosta\u0142 zast\u0105piony przez rozpychaj\u0105cego si\u0119 \u0142okciami ostatnio Cypressa.\n\nJe\u017celi z wcze\u015bniejszych akapit\u00f3w nie wyczytali\u015bcie zbytniego entuzjazmu, pami\u0119tajcie \u017ce wynika to z moich wcze\u015bniejszych do\u015bwiadcze\u0144 m.in. niespe\u0142nionym obietnicom podobnego projektu ze \u015brodowiska Node.js, yeomana, z kt\u00f3rym zawsze by\u0142o wi\u0119cej aktualizacji i walki ni\u017c realnego po\u017cytku. Jak to jednak m\u00f3wi\u0105, \u201cyour mileage may vary\u201d, wi\u0119c je\u015bli macie w g\u0142owie jaki\u015b przypadek u\u017cycia, mo\u017cliwe \u017ce warto si\u0119 JHipsterem zainteresowa\u0107.\n\nhttps:\/\/www.youtube.com\/watch?v=842rALjSvsU\nPrzepraszam za feeling youtubowej karty \u201cNa Czasie\u201d, ale ten filmik to moje guilty pleasure i nie mog\u0142em si\u0119 powstrzyma\u0107.\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-2\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/www.infoq.com\/news\/2021\/04\/jhipster-java-app-generator\/\">JHipster 7.0: Java Application Generator Stretches beyond Spring Boot Roots<\/a><\/li>\n \t<li><a href=\"https:\/\/www.jhipster.tech\/2021\/03\/21\/jhipster-release-7.0.0.html\">JHipster release v7.0.0<\/a><\/li>\n<\/ul>"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10146","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=10146"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10146\/revisions"}],"predecessor-version":[{"id":10576,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10146\/revisions\/10576"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}