First edition of the month (kinda, I was late with the rest of the story đ), so this is the Friends Of OpenJDK (foojay) roundup. It has two parts this time.
The first is about Foojay itself. The site was rebuilt over the summer, went live in September, and I asked Frank Delporte whether the October roundup could be a tour of the new house. His answer was âplease do!!!!â, with four exclamation marks, so here we are. After the tour come the four September articles I liked most.
The second part is about JDD, the Java conference in KrakĂłw, which runs on 20 and 21 October. I was a part of program comitee and helped create the agenda so I shouldnât pick my darlings, but I picked the speakers I would plan my day around, and found what they talked about last year, so you can watch before you decide.
1. Foojay moved off WordPress, and the address stayed the same
Start with the podcast
If you prefer to listen, start with Foojay Podcast #102: Why Foojay Walked Away From WordPress for Static Sites, published on 5 October. Frank talks to two people from the Quarkus team at Red Hat. Andy DAMEVIN built code.quarkus.io and created Roq, a static site generator built on Quarkus. Holly Cummins, led the migration of quarkus.io from Jekyll to Roq.
The episode starts with the move and then asks the larger question: does a traditional CMS still make sense for a content site in 2026? The show notes give the number that frames the security part, âmore than 10,000 vulnerabilities found in WordPress plugins since 2025 aloneâ. The guests make a point I agree with: what breaks on a WordPress site is almost never WordPress core, it is the plugins you need to do anything with it. The rest of the episode compares Hugo and Jekyll with Roq, shows how to extend Roq in Java, and talks about recovery when your content lives in Git rather than a database.
There is a small irony here, and Frank names it himself. Foojay is the site for the Friends of OpenJDK, and the new site is built with Hugo, which is written in Go. In the announcement he explains why: he looked at JBake, which had gone quiet between early 2023 and late 2025 (it has since shipped 2.7.0, and he says so), and somebody on the Foojay Slack pointed him at Roq. His verdict on Roq is generous: âif you want your generator in Java too, start thereâ. He picked Hugo because he already knew it.
Which is how a podcast episode about Roq ended up on a site built with Hugo. The Java is in the glue, and there is a lot of glue.
What changed
The short version from the video walkthrough Frank published on 22 September: âa static, open-source site where publishing an article is a pull request. Same URLs, same archive, much faster.â
Foojay ran on WordPress for six years. The new site is generated by Hugo and deployed to GitHub Pages from the public foojayio/website repository. Everything came across: more than 2,250 articles, more than 350 author profiles, more than 50 JVM terms, the JUG directory, the calendar and the sponsors. Old links still work, including the /blog/ scheme from years ago.
The new features:
Search runs as a static index in your browser. Nothing goes to a server.
Comments moved to GitHub Discussions through giscus. The 580 old WordPress comments stay on the pages as an archive.
Podcast transcripts. All 100 earlier episodes now have a transcript on the page, about 824,000 words. You can finally find the episode where somebody said that thing about garbage collectors with Ctrl+F.
Read counts come from a Cloudflare Worker that Foojay runs itself. It stores a page key and a number, nothing about you, and the code is under two hundred lines. The 13.8 million reads from the old site were carried over.
Writing for Foojay is now a pull request. You copy a template from the repository, write in Markdown or AsciiDoc, and around forty automated checks click through the built site before deploy. Mermaid diagrams work too, which got its own post, as did AsciiDoc support.
The site targets WCAG 2.2 AA. Frank lists what is still missing: about 3,000 images in the archive have no alt text, and no script can or should invent one.
Where to find things now
The top menu has four entries. Here is what sits under each.
News has the daily articles, the podcast, the event calendar, the JC-AI Newsletter from Miroslav (Miro) Wengner, the AI Portal and the list of all categories. It also has the Foojay Monthly Review, which I will come back to in a moment.
Resources has the free Sustainability for Java Developers ebook, the Java Almanac (every Java version with its docs and API diffs), JVM Options (every flag, per JDK version and per vendor), the JUG map and the Java Champions list.
Java Basics is for people starting out: Java Terms Explained, installation guides for Windows, macOS and Linux, and a ten-step Quick Start tutorial that goes from choosing an editor to streams. If someone in your family asks how to start with Java, this is the link.
About has the team, the authors, the sponsors and the advisory board. On the right are two buttons that matter if you want to take part: âJoin our Slackâ and âWrite for Foojayâ.
The home page shows the newest posts, the sponsors, and a âComing soonâ column with posts already scheduled. On the day I checked, it listed Rafael Winterhalterâs âIntroducing Jenesisâ for 8 October. Further down are two featured authors per month (October: Bazlur Rahman and Nicolas Fränkel) and a list of events in the next two weeks. Every category and every author has an RSS feed, and every page has an âEdit this page on GitHubâ link.
Our own page
Now the self-promotion!
Under News there is a new page called Foojay Monthly Review. It collects every Foojay edition of JVM Weekly, and this one will join them.
The JUG directory, and a side effect
The Java User Groups page now puts every JUG on a world map. The data comes from the community-run World Wide JUGs repository, refreshed on every build of the site.
The calendar reads the iCal feed that each JUG already publishes on Meetup or elsewhere, once a day, so meetups appear without anyone typing them in. Frankâs comparison for September: 11 hand-typed entries on the old site, 23 automatic ones on the new site. When I checked, it showed 70 events from 27 JUGs and 9 conferences in 12 countries.
Making that repository the source for Foojay woke it up. From 20 July to today, 20 pull requests were merged. In the same length of time before that, there were none, and in the whole year before, nine. The biggest one, #113 from 2 October, compared the 104 groups in the repository with the roughly 300 on dev.java and âhad a background agent create the 188 genuinely-missing onesâ. So the map shows 305 groups now, while the announcement from 22 September still says 102. If you lead a JUG, this is a good week to check your entry.
If your JUG is missing or out of date, you fix it there with a pull request against the _jugs folder, one small Markdown file per group. đ
And now... the highlights of the month at Foojay!
Why Every JVM In Your Fleet Warms Up Alone
JiĹĂ HoluĹĄa , Senior Product Manager of Azul Platform Prime, starts from a question everyone running more than a few replicas has asked. Instance 1 of a service spends its first minutes finding hot methods and compiling them. Instance 1000 starts two hours later and does the same work again. Why canât it take the compiled code from instance 1?
He splits the problem in three. Identity: a class is its name plus its class loader, so a lookup by name only guesses. Validity: every entry must hold, and the check must cost much less than compiling. Profitability: branch and type profiles cannot be checked at all, so correct code can still be slow code. He quotes JEP 544 on AOT code âthat fails to age wellâ. Part 2 will compare Project Leydenâs AOT caches with Azulâs approach, so the vendor part is still to come. Read part 1 for the mechanics, which you get without a sales pitch.
Durable Execution Is a Property, Not a Product
Nicholas Dâhondt works at JobRunr and says so early on. Vol. 194 covered the JobRunr 9 release. This piece is the argument behind it, and it comes with numbers.
He takes a three-step workflow (charge a payment, reserve inventory, send an email) and counts what a workflow engine does with it: 23 history events, 15 durable state transitions and 15 gRPC round trips. Then he points out that exactly-once is not available anywhere, because Temporalâs own documentation says activities can run more than once. So both approaches need idempotent steps, and the real comparison is a checkpoint in a database row against event-sourced replay. He shows the checkpoint version as about thirty lines of JDBC.
The benchmark: 1,000 orders, 24 workers, an 8-core Hetzner server. He tilted the setup toward Temporal: the production image instead of the dev server, 512 history shards, and task pollers raised from 5 to 24. With instant steps, JobRunr finished in 1.8 s against 13.6 s, used 13.3 CPU-seconds against 83.2, and committed 1,181 Postgres transactions against 113,218. That last pair is â95 times the durable writesâ. The harness is on GitHub, and the article has a fair section on when the engine is worth it: replay debugging, signals, child workflows, orchestration across languages. The last line is a good one: âBuy the product when you need the product. Never buy it to get a property you already own.â
(If you want the other side of the argument, Geertjan Wielenga will add Temporal to Spring Pet Clinic at JDD two weeks from now. Details in part 2.)
Masking a JVM thread dump without breaking the analysis
Felipe Maschio runs ThreadMine, a hosted thread dump analyzer, and discloses it twice. The article began with a comment on r/java: the problem is not taking the dump, it is that uploading a production dump to a third-party site is against policy. He agreed, and wrote tm-anon, an MIT-licensed CLI that masks the dump on your machine.
An analyzer needs most of the dump: JDK frames, pool names like http-nio-8080-exec-, lock addresses for the deadlock graph, thread states. So everything the JDK or a known framework wrote stays byte for byte, and everything that is yours becomes a token. Tokens come from HMAC-SHA256 with a local 256-bit key, so the same name always gets the same token, and comparisons across dumps still work. He also shows where dumps leak more than you think. An OpenJ9 javacore has your full command line and classpath. The JSON output of jcmd Thread.dump_to_file has a container field with the toString() of your executor or StructuredTaskScope.
One Database, Two Models: MySQL JSON Duality Views
A N M âBazlurâ Rahman, Java Champion and one of Foojayâs featured authors this month, tests a MySQL feature from Java and reports where it breaks. A JSON duality view gives you an order as one JSON document (customer, lines, products) while the data stays in normal tables. You can write the document back and MySQL updates the right rows. Duality views arrived in MySQL 9.4, and writes reached the free Community edition in 9.7.0.
Reading got simpler: the repository method returns one JSON string, and Spring sends it as is. Writing has sharp edges, and he lists them. Empty collections come back as null, not []. A write replaces the whole document, so âThink of it as PUT, never PATCH.â The worst one: the etag that protects against stale writes is optional, and âWhen I left _metadata out, MySQL accepted a stale document and silently overwrote a newer cancellation.â He also ran EXPLAIN and found that a lookup by ID builds every order document first and filters afterwards.
The comparison with ORMs is useful too. By his count from the MySQL query log, one order takes one SELECT through the duality view, a plain JDBC join or JPA with join fetch, and four through Spring Data JDBC.
2. JDD 2026: who to see in KrakĂłw, and what they said last year
JDD takes place on 20 and 21 October at the Metropolo hotel in KrakĂłw, with workshops the day before. It is one of the older Java conferences in Poland. I picked the speakers I would plan my two days around. Most of them gave the same or a related talk somewhere in 2025, so you can watch first and decide later. Where a recording exists, it is below.
Monica Beckwith opens day two
Monica Beckwith (Microsoft, Java Champion) works on JVM performance in upstream OpenJDK and in the Microsoft Build of OpenJDK, and wrote JVM Performance Engineering: Inside OpenJDK and the HotSpot JVM.
Her keynote on 21 October is âFrom Bytecode to Tokens: What the JVM Taught Me About the AI Stackâ. The abstract contains the sentence I would put on a wall: âa number is where the real work starts, not where it ends.â In JVM performance work, you do not act on a metric until you understand it. The keynote applies that habit to AI infrastructure.
Marit van Dijk and Piotr PrzybyĹ: modern Java in the IDE
đŠđťđť Marit van Dijk (JetBrains) and đĽźPiotr PrzybyĹ (Elastic), both Java Champions, bring âLearning modern Java the playful wayâ. It is aimed at people who have not used recent Java versions much. They explain features like Structured Concurrency and Stream Gatherers and then show how to use them in the IDE, so you can try them the next day.
They gave this talk at Confitura 2025, but trust me - this is something you want to see in person, so hillarious thing - and Java evolved too meanwhile:
If you want Piotrâs opinions without the IDE, he was a guest on episode 3 of the JDD Podcast (in Polish). His view of LTS releases is direct, and I will not spoil it.
Andrzej Grzesik and JarosĹaw PaĹka, separately this time
These two often present together. At JDD 2025 they gave âGentle Introduction to Lock-Free Programming in Javaâ. JDDâs own recording of it is not public, but the same talk from JNation 2025 is. It covers progress guarantees, compare-and-swap, the ABA problem, and three lock-free structures written live: a stack, a queue and a linked list.
This year they speak separately. Andrzej Grzesik does Fast && pain-free, Java and native code, about the Foreign Function & Memory API from Project Panama: calling C from Java without JNI, calling Java from C, and then Lua, Rust, Python and AI inference. The abstract has more footnotes than some JEPs, and it claims FFM is faster than JNI. JarosĹaw PaĹka does âWspĂłĹbieĹźnoĹÄ, czyli Ĺźarty siÄ skoĹczyĹyâ (âConcurrency, or the jokes are overâ), in Polish.
Treat these two as a kinda duology đ
Thanos Stratikopoulos: Java on CUDA
Thanos Stratikopoulos is one of the lead developers of TornadoVM and a Research Fellow at the University of Manchester. TornadoVM appeared in this newsletter many times, most recently in vol. 194, when it shipped two major versions in three weeks after JVMCI left the JDK. His JDD talk, âJava Goes CUDA-Nativeâ, shows the CUDA backend from the inside. Java methods go through Graal IR, become CUDA C, are compiled at runtime with NVRTC, and run as GPU kernels. Then he covers the new Hybrid API, which puts cuBLAS calls in the same TaskGraph as your own kernels, on the same device buffers. The demo is GPULlama3.java running models from GGUF files.
Last yearâs version was a two-and-a-half-hour Deep Dive session at Devoxx Belgium 2025: GPU basics, the TornadoVM API, the IntelliJ plugin for profiling, and LLM optimizations shown live.
If two and a half hours is too much, the Devoxx channel uploaded a 27-minute talk on the Hybrid API this week.
Kevlin Henney opens day one, and runs a workshop
Kevlin Henney co-edited 97 Things Every Java Programmer Should Know and co-wrote two volumes of Pattern-Oriented Software Architecture. He opens JDD on 20 October with âAbstraction? You Keep Using that Wordâ.
The abstract says developers often confuse abstraction with generalisation, or with being vague, and that a clear definition helps you judge claims about AI and abstraction. If the title pattern sounds familiar, at Craft 2025 he gave âLambda? You Keep Using that Letterâ, about what Java, C# and Python mean by âlambdaâ compared with lambda calculus.
Brian Vermeer closes the conference
đ§đźđť Brian V. (Snyk, Java Champion) gives the closing keynote on 21 October, âUnderstanding Prompt Injection â Techniques, Challenges, and Advanced Escalationâ.
If you read the Bazlur Rahman article above, you already know why a customer named âIgnore previous instructionsâ belongs in your threat model.
And Geertjan Wielenga, with the other side of the durable execution argument
Last but not least Geertjan Wielenga, Java Champion and the founder of Foojay (I like how this editions rhyme). His talk, âFrom CRUD to Durable: Adding Temporal Workflows to the Spring Pet Clinicâ, adds appointment reminders that survive restarts, multi-year vaccination schedules with Signals and Queries, and a saga for payments. One promise in the abstract caught my attention: he will show which operations benefit from Temporal, âand which donâtâ.
So the person who founded Foojay will answer, on stage, the question a Foojay article asked three weeks earlier. I recommend reading Dâhondt first and then going to this talk.
From the JDD 2025 playlist
JDD publishes its own recordings with a delay, and 19 of the 63 videos from 2025 are public so far. Two of them are good choices for a JVM audience. Sebastian Kozak OpenTelemetry Tracing - to nie takie proste (in Polish) covers the OTel Java agent, trace context lost across executors and an outbox, and tail sampling that cut 1.53 billion spans per day to 112 million. â ď¸ Kamil Banach Thinking in Streams goes from custom Collectors to Stream Gatherers, including mapConcurrent on virtual threads. My own JVM Iceberg is in the playlist too, if you have run out of other things to watch.
3. What else to expect at JDD 2026
Day one has four tracks: Core, Architecture, Reliability and JUGmajster. Day two has AI Engineering, Engineering Reality, Soft Skills and an Unconference. The organisers say about 40% of the program is core JVM and Java engineering.
In the JVM part, a few Polish talks are worth looking for. Jakub Gardo on how String handling in OpenJDK changed over 15 releases. Krzysztof Ĺlusarski on profiling Hibernate with heap dumps, beyond the N+1 problem. Wiktor Sztajerowski on testing concurrent Java, from unit tests to Fray, jcstress and JMH. Mateusz Nalepa (Allegro) on why response time misleads you when requests wait in a thread pool queue. Mateusz GruĹźewski on JVM diagnostics in production.
In English, Danail Alexiev covers data-oriented programming with records, sealed types and pattern matching. Christian Heitzmann visualizes the Java concurrency API live. Akihiro Nishikawa (Microsoft) talks about post-quantum cryptography in Java, the topic of one of the projects in the last issue. Bartosz SÄ del from VirtusLab explains, in Polish, why monorepos do not bite.
Judging by the abstracts, the AI track is about practice. Victor Rentea talks about code review when agents write pull requests too large to read. Andrzej Ludwikowski (Akka) shares what broke while building an agentic platform for production. Piotr Ceranek shows how AI changed the Allegro home page.
You can still grab tickets here. The second round of sales is wrapping up, so be quick quick đ
And thatâs all, folks.
Thanks for reading JVM Weekly!






