September: The Rest of the Story - JVM Weekly vol. 146
I’ve gathered many interesting links in September that didn’t make it into previous issues. Many aren’t extensive enough for a full section, but they still seem compelling enough to share.
1. Missed in September
September brought an event that went far beyond typical tech news, becoming one of the hottest topics on Wall Street (it even reached my wife - and her connection to the tech industry is about as close as occasionally using a computer outside of work). On September 10, Oracle (ORCL) shares recorded a monumental one-day surge of nearly 36%, the biggest jump since 1992. In just a single trading session, the company’s market capitalization skyrocketed by an astonishing $255 billion, pushing its total valuation close to the $1 trillion threshold. Interestingly, the direct catalyst wasn’t the quarterly report, which slightly missed analysts’ expectations, but rather the forward-looking guidance and order book data.
The key metric that electrified investors was the growth of Remaining Performance Obligations (RPO) - the value of contracted but not yet delivered services. This figure jumped to an incredible $455 billion, a more than fourfold (359% year-over-year) increase. Behind these numbers are massive, multi-year cloud infrastructure contracts, including the widely discussed $300 billion, five-year deal with OpenAI, as well as significant agreements with companies like Nvidia and ByteDance (the owner of TikTok). CEO Safra Catz projected that Oracle Cloud Infrastructure (OCI) revenues would grow from around $18 billion in the current fiscal year to $144 billion by 2030—well above even the most optimistic analyst estimates.
TLDR:
Since then, Oracle hasn’t left the headlines. First, they’ve been involved in the acquisition of TikTok’s U.S. assets, and now they are reportedly in talks with Meta to provide infrastructure. In short, Oracle is on fire when it comes to infrastructure, and I can only hope this momentum will positively influence the Java ecosystem as a whole.
Although, you know… we still don’t have any GraalVM announcements.
Apart from the JDK 25 release (which we’ll get back to), September also brought some interesting announcements from OpenJDK projects that aim to push the boundaries of Java’s applicability.
Project Leyden, whose goal is to radically improve startup time, time-to-peak performance, and memory footprint of Java applications, published new early builds based on JDK 26. At the same time, Project Mobile (I didn’t event knew something like this exists) received fresh momentum thanks to an initiative from Johan Vos of Gluon. In a message to the mobile-dev mailing list, he announced the creation of a new community-driven website (openjdk-mobile.github.io) and an ios-tools repository. The aim is to bridge the gap between “being able to build OpenJDK for mobile platforms” and actually running working applications on them. The new tooling, including GitHub Actions, is meant to automate the process of building iOS apps - from compiling libffi and OpenJDK, all the way to generating an Xcode framework. Vos made his ambition clear: to make Java a “first-class citizen on mobile platforms.”
Why am I writing about these together? Although these two projects may seem independent, they are in fact deeply synergistic and together address Java’s historical weaknesses, opening new markets for the language. Mobile applications are extremely sensitive to startup time and memory usage - precisely the aspects Project Leyden aims to optimize. In his announcement, Johan Vos explicitly expressed interest in integrating “Leyden-based work” to improve the performance of a simple “HelloWorld” app on mobile devices. This highlights a direct connection: Leyden’s AOT technology and “condensers” could be the key to making Java applications truly competitive with natively compiled Swift or Kotlin apps on iOS and Android...😉
PS: There is a new great search engine by Elliot Barlas to get yourself through JDK mailing lists. I already love it, so I’m sharing good word ❤️
Sticking with the “everything connects in this ecosystem” narrative, September also brought valuable tools and tips that make life easier for Java developers working in modern, cloud-based environments. Both initiatives come from Bruno Borges of Microsoft’s Java Engineering Group, underscoring the growing commitment of cloud giants to the Java ecosystem.
In his article Building a Runtime JAR Inspector in 10 Hours, Borges described creating the JLib Inspector tool. It was developed in response to the need to verify not only which dependencies are loaded, but which are actively used in production environments. The inspiration came from the Log4Shell vulnerability, which reminded the industry how crucial it is to have “runtime truth” about the artifacts in use. Knowing whether a vulnerable library is simply present on the classpath or if its code is actually being invoked is fundamental for prioritizing remediation efforts.
JLib Inspector, built in roughly 10 hours with the help of AI tools, uses a Java agent to collect information about active JAR files, providing valuable data that supports both security analysis and dependency optimization. That’s why AI is such a good tool in hands of seniors who knows what they do.
In his second article, A Better Way to Tune the JVM in Dockerfiles and Kubernetes Manifests, Borges addressed JVM configuration in containers. He recommended using the $JDK_JAVA_OPTIONS environment variable instead of “baking in” JVM flags directly into the CMD or ENTRYPOINT instructions of a Dockerfile. This approach separates configuration from the container image, making deployments far more flexible and easier to maintain. Changing memory parameters or garbage collector settings no longer requires rebuilding the entire image - only adjusting the Kubernetes deployment manifest.
Additionally, in broadly defined Microsoftverse, GitHub has made Copilot App Modernization generally available for Java and .NET projects. It offers application assessment reports, automated code transformations, build patching & dependency updates, and easy containerization for cloud deployment.
Spoiler: I’m working on the article comparing different large scale code migration solutions, but for now, you can check out the setup via the Java or .NET guide and view end-to-end introduction videos:
September was also a time for reflection on the evolution of the ecosystem and a look into its future, showing that the JVM community values both its history and its growth prospects.
Neil Madden published a widely discussed blog post Rating 26 years of Java changes in which he offered a subjective assessment of changes in the Java language and libraries over the past 26 years, starting from 1999. His retrospective analysis of key features - such as generics, lambdas, streams, records, and pattern matching - sparked lively debate in the community, including on Reddit. The article wasn’t just a list of new features but a critical evaluation that provoked discussion about the design trade-offs behind complex features like Streams or modules (Project Jigsaw). For example, Madden criticized Streams for their “awkwardness” compared to similar constructs in functional languages, which drew counterarguments pointing to the backward-compatibility constraints that Java’s designers had to contend with.
Eh, nostalgic bite.
With the release of Java 25, key tools announced full support. In an article Java 25 LTS and IntelliJ IDEA, 👩🏻💻 Marit van Dijk and Andrei Kogun from JetBrains detailed how IntelliJ IDEA integrates with the new LTS version. The IDE now supports new stable features such as Compact Source Files, Instance Main Methods (JEP 512), Module Import Declarations (JEP 511), and Flexible Constructor Bodies (JEP 513), helping developers smoothly transition and take advantage of the latest language improvements.
Beyond basic compatibility, IntelliJ IDEA layers in lots of small but high-leverage ergonomics that make Java 25 feel “ready on day one.” Live templates for compact source files and instance main methods help you prototype quickly without boilerplate, inspections and quick-fixes guide you toward idiomatic use of module import declarations, and refactorings smooth allows you to use new features without even knowing about their existence (who has time to read about new Java 😉).
On the runtime side, the debugger and profiler integrations surface Java 25’s performance insights (AOT method profiling, JFR sampling/timing) in context, so you can see warm-up behavior and method timing without leaving the IDE.
And if you want to see under the hood, article contains also a lot of insight into how the fight for compatibility looks under the hood.
And since it’s not just Java that’s alive and kicking, looking to the future, the Kotlin community has received a new tool for navigating learning paths. A new interactive roadmap for learning Kotlin has been launched on roadmap.sh.
It’s aimed at both beginners and experienced developers, designed to make skill-building in this popular JVM language easier. The roadmap, presented as a tree of nodes, will in the coming days be supplemented with content and links to additional resources, serving as a nice learning guide.
JMH for LLMs post treats generating JMH as a benchmark for LLMs - ask models to generate a microbenchmark that isolates the cost of casts in tight loops, run it, allow one refinement, then score it.
Copilot (both Smart/GPT-5 and Think Deeper) mostly compared int[] vs ArrayList<Integer> - interesting, but off-prompt - scoring 0. DeepSeek V3 was closer yet incomplete. Gemini 2.5 Pro refined its answer and produced a stepped design (int[] → Integer[] → Object[] → ArrayList<Integer>), suggesting casting overhead around ~10% in the final hop and earning the win.
The author’s own “final” JMH suite shows the nuance: CHECKCAST isn’t free in ultra-minimal loops, but its relative cost shrinks once real work (copying refs, calling hashCode, etc.) enters the body - so avoid misleading apples-to-oranges baselines and benchmark exactly the thing you care about.
As we can see, some tasks are still beyond the reach of LLMs. I hope you enjoy writing JMH tests for your AI agents - so they can use them as guidelines - for the rest of your career.
And finally, a newsletter I follow regularly: TechTalks Weekly. A Reddit post compiled a list of the nine most-watched Java conference talks of 2025. The range of topics is broad and perfectly reflects the community’s current interests. Matthias Haeussler lecture on the best ways to containerize Java applications (over 13,000 views) shows how crucial cloud deployment optimization has become. Meanwhile, talks on RAG architectures with Spring AI by Thomas Vitale and Uber’s AI-assisted migration to Kotlin by Ty Smith highlight the dominant role of artificial intelligence.
On the list you can also find Grzegorz Piwowarek talk What Can a Java Developer Learn from Golang?, one I talking you about two weeks ago - a clear sign of the community’s openness to inspiration from other ecosystems. The table below is a curated list of recommended sessions for anyone wanting to catch up on this year’s most interesting conference content. The full list can be found here.
And since it seems the JVM community is also interested in Go, here’s something extra: David Grajales, in his article Fibers in my Coffee: Go’s Concurrency in Java’s Loom, offers a comparative analysis of Java’s new concurrency model and Go’s long-standing trademark. He argues that Project Loom - by introducing virtual threads and structured concurrency - allows Java to return to the simple, intuitive “thread-per-request” model while simultaneously achieving the kind of massive scalability once exclusive to goroutines and channels in Go. In Grajales’ view, Loom effectively neutralizes one of Go’s key competitive advantages in concurrent systems, eliminating the need for complex reactive frameworks that often obscured business logic. Food for thoughts.
And now - on to the Release Radar 📡
2. Release Radar
Quarkus 3.26
Quarkus 3.26 has been released with a range of important updates. The most significant include the upgrade of Hibernate extensions to ORM 7.1, Search 8.1, and Reactive 3.1. Hibernate Reactive has gained support for named persistence units and data sources, which increases flexibility in database access configuration.
The Dev UI has also been improved - its features are now available as MCP (Model Context Protocol) functions, paving the way for AI-driven control. This is a clear signal that enterprise frameworks are increasingly integrating with new interaction paradigms.
Lombok 1.18.40
I rarely write about such an minor versions, but Lombok 1.18.40 is a key update for many projects. The most important feature of this release is full support for Java 25, making it essential for teams planning to migrate to the new LTS version while continuing to benefit from the conveniences offered by Lombok. The quick adaptation of such a fundamental library is crucial for the smooth operation of the entire ecosystem, so I even wrote about it last month, and they delivered on their promise.
JavaFX 25
JavaFX 25 introduces an important change: it now requires JDK 23 or later to run.
Among the new features, one of the most anticipated stands out - the ability to place JavaFX controls directly in the window’s title bar, enabling the creation of more modern and integrated user interfaces.
A public API has also been added for retrieving text layout information, along with the ability to style highlights in RichTextArea using CSS, giving developers greater control over the look and feel of their applications.
GPULlama3.java v0.2.0
GPULlama3.java v0.2.0 powered by TornadoVM significantly expands the capabilities of this library for LLM inference with GPU acceleration. The new version adds support for additional model families, including Qwen2.5, Qwen3, Deepseek, and Mistral, alongside the existing support for Llama3.
Importantly, it introduces official support for Windows as well as scheduling optimizations for non-Nvidia hardware, making the library more accessible to a broader group of developers.
This is not the only GPULlama3 related release thou...
LangChain4j 1.5.0
With PR #3654, LangChain4j now integrates with GPULlama3.java (), a pure-Java LLM inference library built on TornadoVM. It brings support for multiple model families (Llama 3, Mistral, Phi-3, Qwen 2.5/3, Distilled-DeepSeek), backend support for PTX (NVIDIA) and OpenCL (Intel/Apple and others), smooth CPU fallback, as well as new classes GPULlama3ChatModel and GPULlama3StreamingChatModel with a builder, an onGPU flag, and last-run metrics. The PR also includes documentation, a usage example, and no breaking changes, making adoption in existing projects easier.
It coincides with the 1.5.0 release of the project, which adds notable features such as an initial Model Context Protocol (MCP) registry client, asynchronous agents, Gemini image outputs, and AWS Bedrock prompt caching - useful building blocks for secure, scalable systems.
In parallel, collaboration of Langchain4j with Microsoft continues to deepen around security and enterprise-grade deployments. Microsoft reports dozens of contributions to LangChain4j (including integrations with Azure OpenAI, GitHub Models/Azure AI Inference, Blob Storage, Cosmos DB, and Azure AI Search) as well as the addition of the official OpenAI Java SDK. A key milestone has been a comprehensive security audit and the removal of vulnerabilities, including SQL injection in vector database implementations, along with the establishment of formal security policies and an advisory process.
Eclipse 4.37
Eclipse 4.37 introduces support for Java 25 (available via an add-on from the Eclipse Marketplace). With this in place, developers can build, run, and analyze projects targeting the newest JDK while staying inside the familiar Eclipse environment.
Beyond language level support, 4.37 brings a range of platform and tooling refinements. The Java tooling, Git integration, and PDE (Plugin Development Environment) receive quality-of-life improvements and fixes aimed at smoother editing, navigation, version control operations, and plugin authoring.
For these who haven’t seen Eclipse in last ten years - that is how it looks right now:
Vaadin 24.9.0
Vaadin 24.9.0 lands with a tidy set of upgrades across Flow, Design System, Hilla, and kits. Highlights include a new <code> HTML component, extra Flow style helpers (background-position/size, filter, gap, rotate) and a handy DataView API. Aprt of that, probably the most interesting addition is copy-paste from Figma with custom components and Vaadin Copilot’s new Figma Importer API.
The release also flags several deprecations (legacy Grid APIs, various Flow internals, CookieConsent, etc.) scheduled for removal in Vaadin 25.
Kineto by JetBrains
Kineto by JetBrains is a new no-code platform for which JetBrains has launched an Early Access Program. Kineto aims to enable people without programming experience to create and deploy fully functional web applications using a chat-based interface. The platform generates complete applications with a user interface, backend, and database, making it an interesting step toward the democratization of software development.
Here’s also an example of an application generated with Kineto by Damian Lech from VirtusLab (yes, we are experimenting with it internally), designed to convert Hacker News articles into podcasts. Damian’s comment:
Kineto app for scraping Hacker News actually turned out really nice. Just a few prompts, and it basically works as it should. Sure, there are some broken buttons, but the core functionality is there. The only issue is with some articles on sites that make scraping difficult—in those cases, it doesn’t generate summaries. But for most of what I’ve seen, it works, and after adding an ElevenLabs API key, it synthesizes speech with playback and download options. Highly recommended!
3. GitHub All-Stars
Jarinker
Jarinker, created by Daniel Liu, is a tool for dependency analysis and building smaller, optimized Java runtimes. It works “tree-shaking” style, analyzing bytecode to identify and remove unused classes and methods. In the era of minimal container images and the race to faster startup, Jarinker is highly relevant - pursuing goals similar to Project Leyden and technologies like GraalVM Native Image, but with limited scope and single person project. Other interesting repo from the same author: grpc-starter
Melodigram
Melodigram is an impressive open-source piano-learning tool built in Java Swing by Tbence132545. The app supports MIDI input, a practice mode (where the program waits for the correct note), and an editor mode - showcasing that Java remains a powerful, vibrant technology for rich desktop applications and that its UI libraries are mature and stable.
You can find Reddit discussion here.
Datafaker
Datafaker is a modern, actively maintained fork of the popular java-faker library. It generates large volumes of realistic-looking fake data for tests, demos, and presentations. The library supports expression-based generation, schemas (for CSV/JSON formats), and uniqueness guarantees - making it a powerful tool in today’s software lifecycle, where the quality of test data directly impacts the quality of the final product.
cursor-rules-java
cursor-rules-java by Juan Antonio Breña Moral collects “system prompts” designed specifically for use with AI coding assistants (such as Cursor) in the context of Java Enterprise development. The set spans the full software lifecycle - from design and coding through performance testing with JMH and JMeter to documentation and diagrams. It exemplifies a new paradigm where developers not only write code but also create and share prompt packs that enable more effective collaboration with AI tools.
deezpatch
deezpatch by Joel Jeremy Marquez is a lightweight yet highly efficient library for dispatching requests and events to their handlers, designed with CQRS-style applications in mind. Its key innovation is leveraging java.lang.invoke.LambdaMetafactory to generate dispatch mechanisms at runtime, avoiding the performance overhead of reflection and achieving near direct-method-call speed.
Benchmarks show up to a 10× throughput improvement over similar reflection-based libraries.
Ufff... that’s all. See you next month!