Wybór języka

Virtual Threads

Wykład odbył się jak na razie tylko raz i tylko dla Silesia JUG w Katowicach, po angielsku. Chętnych na wersję polską zapraszam do kontaktu:

Let’s talk about Java 21 and have a sneak-peek into Java 22, and things like: Java was supposed “to be slow”. However, Java turns out to evolve so fast, that next releases aren’t just version bumps, but might significantly change the rules of the game. That’s a good reason to check out what’s new in Java. To name a few changes:

Java™ 21 is real now. And so are virtual threads. Everyone got excited about them, yet you prefer to keep your Java 8 job forever, and you already have a nice plan to “accidentally” derail the migration to 21 by using virtual threads in a very, very unfortunate way. What a pity…

So you decided to come for this talk to look for some inspiration ;-)

Okay, please join us to learn how NOT to use virtual threads, and see the potential performance pitfalls of using them the wrong way.

Minęło kolejne pół roku, pora na wdrożenie kolejnej wersji Javy™ na produkcji. Tym razem na pewno, bo to w końcu LTS. ;-)

Zdaniem wielu “Java jest wolna”. Okazuje się, że rozwój Javy jest tak “wolny”, że kolejne wydania nie są tylko podbiciem wersji, bo mogą znacząco zmieniać reguły gry. To dobry powód na kolejny deep dive w Javie. Będzie mowa o:

  • Virtual Threads,
  • Pattern Matching for switch,
  • Record Patterns,
  • Structured Concurrency,
  • String Templates,
  • korzystaniu z rzeczy natywnych,
  • co wyleciało i wyleci,
  • i innych.

Dużo rzeczy pokazane w kodzie, nie tylko na slajdach.

Pozwólcie mi rozpocząć ten wpis od suchara.

Uproszczony model atomu

Jedzie sobie elektron na motorze. Nagle zatrzymuje go policjant i mówi:

“Musiałem Pana zatrzymać, bo przekroczył Pan znacznie prędkość, jadąc dokładnie 178 i pół kilometra na godzinę.”

“No WIELKIE DZIĘKI, panie policjancie. To teraz kompletnie nie wiem, gdzie jestem!”

Niektóre suchary są niesamowicie słabe, więc nie martw się, jeśli ten Cię nie rozbawił. Ten sprowadza się to do zasady nieoznaczoności. W niezwykle uproszczonym ujęciu: niektóre rzeczy we wszechświecie nie mogą być obserwowane we wszystkich swoich aspektach. Jeśli masz jabłko, możesz zmierzyć jego masę, objętość, rozmiar (i jeśli spadnie Ci na głowę) prędkość, wszystko jednocześnie. Bez wpływu na samo jabłko. Jednak jeśli interesują Cię elektrony, im dokładniej znasz ich prędkość, tym mniej wiesz o ich położeniu, i odwrotnie, stąd chmura elektronowa. (Do licha, czy rzeczy atomowe przestaną mnie ścigać? 😅)

Minęło kolejne pół roku, pora na wdrożenie kolejnej wersji Javy™ na produkcji. Tym razem na pewno, bo to w końcu LTS. ;-)

Zdaniem wielu “Java jest wolna”. Okazuje się, że rozwój Javy jest tak “wolny”, że kolejne wydania nie są tylko podbiciem wersji, bo mogą znacząco zmieniać reguły gry. To dobry powód na kolejny deep dive w Javie. Będzie mowa o:

  • Pattern Matching for switch,
  • Record Patterns,
  • Virtual Threads,
  • korzystanie z rzeczy natywnych,
  • co wyleciało i wyleci,
  • i innych.

Dużo rzeczy pokazane w kodzie, nie tylko na slajdach.

W poprzednim wpisie testowaliśmy, czy Wątki Wirtualne Javy nie są używane w sposób, który powoduje ich przyszpilenie/przypięcie (ang. pinning). Chcemy bowiem (i aczkolwiek!), aby nasze Wątki Platformowe (szczególnie te w puli ForkJoin Sp. z o.o.) stale obsługiwały coraz więcej nowych Wątków Wirtualnych, zamiast “nie wyłączać silnika”, podczas gdy VTs są przyszpilone. (Przynajmniej tak długo, jak nie możemy dostarczyć własnych pul wątków do przenoszenia WW).
Spoiler alert: będziemy korzystać z Testcontainers oraz Toxiproxy!

Fun will now commence

Niestety, tłumacz aktualnie jest mocno zarobiony i na razie nie da rady przetłumaczyć tego wpisu. Całość dostępna po angielsku.

Jak włączyć Wątki Wirtualne?

W czasie moich wykładów, gdzie omawiana jest Java 19 (i gdzie obowiązkowo pojawia się sekcja dotycząca Wątków Wirtualnych), padało pytanie: jak włączyć wątki wirtualne na JVM przynajmniej kilka razy.

Niestety, tłumacz aktualnie jest mocno zarobiony i na razie nie da rady przetłumaczyć tego wpisu. Całość dostępna po angielsku.

You shall not pin Virtual Threads!

Bądźmy szczerzy: na Wątki Wirtualne (ang. Virtual Threads) czekaliśmy dość długo. Czekaliśmy z niecierpliwością, widzieliśmy zmieniające się nazwy (to nie są fibers ludziska), ale oto wreszcie są: Wątki Wirtualne.

Niektórzy twierdzą, że Project Loom jest największą zmianą w Javie od czasu wersji 8, lambd i strumieni. Inni uważają, że jest to jeszcze większa zmiana. Odkładając dyskusje na bok, zapowiada się na wielką zmianę.

Pamiętam, jak byliśmy podekscytowani (byłem wtedy jeszcze na studiach), że w końcu możemy używać prawdziwych wątków w Javie na Windowsie. Jednak czas leci, branża się zmieniła, sprzęt się zmienił, sposób, w jaki budujemy nasze systemy, również się zmienił. Choć znaleźliśmy sposoby na obejście ograniczeń “jeden wątek systemowy na jeden wątek Javy”, to jednak miało to swoją cenę: zagmatwane stosy wywołań i trudne debugowanie to pierwsze, co przychodzi na myśl. Wątki Wirtualne mają za zadanie utrzymać nas w nuuuuudnym, ale łatwym do zrozumienia modelu wątek-na-żądanie (ang. thread-per-request), jednocześnie odblokowując moc krzemu poniżej.

Minęło kolejne pół roku, pora na wdrożenie kolejnej wersji Javy™ na produkcji. Tym razem na pewno, bo to w końcu LTS. ;-)

Zdaniem wielu “Java jest wolna”. Okazuje się, że rozwój Javy jest tak “wolny”, że kolejne wydania nie są tylko podbiciem wersji, bo mogą znacząco zmieniać reguły gry. To dobry powód na kolejny deep dive w Javie. Będzie mowa o:

  • Pattern Matching for switch,
  • Record Patterns,
  • Virtual Threads,
  • Simple Web server,
  • co wyleciało i wyleci,
  • i innych.

Dużo rzeczy pokazane w kodzie, nie tylko na slajdach.