JRush episode 4th: Fresh Java on modern Arm servers

 

Transcript:

Finances for something really useful, not just for hitting the world, which is probably already overheated by global warming. We see that Java moves constantly, and now the frequency and the release schedule have become more regular. We see many exciting things, but the releases are not overloaded, which is good. That’s about Java.

What about me and our company? I have worked at BellSoft for a few years. BellSoft is a unique company because it produces Liberica JDK, the default OpenJDK distribution for Spring Boot containers. It also produces Alpaquita Linux and Alpaquita Native Image Kit, which combine perfectly into the Alpaquita Cloud Native Platform (ACNP). You can learn more about this on our live stream.

I participate in the development of OpenJDK and also speak at events. The overall contribution of our company is very significant in opportunity cases. Before BellSoft, I worked at Oracle in the domain of OpenJDK development, and prior to that, I used to work at Deutsche Bank. So, the topic of financial savings and optimizations is very close to me.

Let’s look at the evolution of mobile phones. This area has developed so rapidly that you wouldn’t be able to capture a device that remains cutting-edge for even half a year. Today, we have devices that are far more modern, powerful, and capable of tasks that were once exclusive to server-class machines. Similarly, in the server domain, new hardware develops rapidly, and the software running on that hardware includes many optimizations. This trend began years ago, and ARM, as both a company and architecture, played a major role. ARM technology has grown enormously, with an estimated 250 billion processors in various devices by the end of last year.

What is an instruction set? It’s a way for software developers to communicate with hardware, telling it what to do to produce valuable results. Instruction sets have multiple versions, with major and minor updates. Among these, the application profile is particularly important for Java developers and users because it allows the JVM to run efficiently with JIT and AOT compilers that optimize runtime performance.

There are also terms like AArch64 or ARM64, denoting execution modes and specific instruction sets for those modes. A single CPU can operate in different modes, with ARM64 also serving as the Linux kernel port for this class of machines. Vendors license ARM technology, develop their hardware, and implement extensions from various specification versions to offer improved performance and features.

Extensions in ARM specifications are often related to cryptography, checksum calculations, and SIMD data processing. For example, the scalable vector extension (SVE) allows efficient computation on long streams of data, such as numerical streams or financial data. Other extensions cater to machine learning tasks. ARM-based servers like ThunderX, with their multi-core designs, demonstrate the scalability and potential of this architecture. While older machines like ThunderX had 96 cores, newer ones boast up to 384 cores, suitable for HPC and server-class workloads.

ARM’s reference designs, like Neoverse, have enabled vendors to implement high-performance hardware. Examples include Apple’s M1 and M2 processors, which exemplify how ARM cores have become increasingly powerful. The latest ARM specifications, such as ARMv9, have already been implemented in both mobile and server-class CPUs. Vendors like Amazon, through their Graviton processors, have consistently improved performance across generations. Amazon reports a 25% performance improvement in their latest generation compared to its predecessor and a tenfold improvement over earlier generations.

In the software ecosystem, ARM has gained significant traction. Most major technologies now target ARM architecture alongside x86. OpenJDK supports ARM natively, enabling optimized performance without emulation. Diagnostic tools for Java, critical for measuring performance and ensuring correctness, have also been adapted for ARM. Performance improvements in OpenJDK 11 and beyond, including intrinsics and optimized functions, further enhance the ecosystem.

Correctness remains a priority, especially for concurrent programs, as ARM hardware is less forgiving of programming errors compared to x86. ARM-based servers now feature hundreds of cores, and racks can support thousands of virtual machines. Amazon’s Graviton processors, for example, offer significant cost savings, leading to rapid growth in ARM computing across clouds.

Development hardware for ARM is now widely available, including Apple Silicon-powered machines and ARM laptops running Linux or Windows. These devices facilitate cross-development for ARM and x86 targets, allowing for multi-cloud deployment and cost-effective solutions. Major cloud providers like Amazon, Oracle, and Azure offer ARM-based instances, ensuring a broad reach for this architecture.

In conclusion, hardware and software advancements on ARM work seamlessly together, offering better performance and lower costs. With the latest Java versions and careful migration strategies, developers can achieve significant benefits. Just remember: correctness is always the responsibility of the programmer. Thank you!

Summary

The video discusses the benefits of using ARM-based hardware for developing and running Java applications. The speaker highlights the significant improvements in performance, cost-effectiveness, and development tools since the first generation of Graviton processors. They also emphasize the importance of software updates and new hardware in achieving improved results.

About Dmitry

Dmitry Chuyko is a Senior Performance Architect at BellSoft, an OpenJDK committer, and a public speaker. Prior to joining BellSoft, Dmitry worked on the Hotspot JVM at Oracle, and before that he had many years of programming experience in Java. He is currently focused on optimizing HotSpot for x86 and ARM, previously being involved in rolling out JEP 386, which enables the creation of the smallest JDK containers.

Social Media

Videos
card image
Apr 2, 2026
Java Memory Options You Need in Production

JVM memory tuning can be tricky. Teams increase -Xmx and assume the problem is solved. Then the app still hits OOM. Because maximum heap size is not the only thing that affects memory footprint. The JVM uses RAM for much more than heap: metaspace, thread stacks, JIT/code cache, direct buffers, and native allocations. That’s why your process can run out of memory while heap still looks “fine”. In this video, we break down how JVM memory actually works and how to control it with a minimal, production-safe set of flags. We cover heap sizing (-Xms, -Xmx), dynamic resizing, direct memory (-XX:MaxDirectMemorySize), and total RAM limits (-XX:MaxRAMPercentage) — especially in containerized environments like Docker and Kubernetes. We also explain GC choices such as G1, ZGC, and Shenandoah, when defaults are enough, and why GC logging (-Xlog:gc*) is mandatory before tuning. Finally, we show how to diagnose failures with heap dumps and OOM hooks. This is not about adding more flags. It’s about understanding what actually consumes memory — and making decisions you can justify in production.

Videos
card image
Mar 26, 2026
Java Developer Roadmap 2026: From Basics to Production

Most Java roadmaps teach tools. This one teaches order — the only thing that actually gets you to production. You don’t need to learn everything. You need to learn the right things, in the right sequence. In this video, we break down a practical Java developer roadmap for 2026 — from syntax and OOP to Spring, databases, testing, and deployment. Structured into 8 levels, it shows how real engineers grow from fundamentals to production-ready systems. We cover what to learn and what to ignore: core Java, collections, streams, build tools, Git, SQL and JDBC before Hibernate, the Spring ecosystem, testing with JUnit, and deployment with Docker and CI/CD. You’ll also understand why most developers get stuck — jumping into frameworks too early, skipping SQL, or treating tools as knowledge. This roadmap gives you a clear path into real-world Java development — with priorities, trade-offs, and production context.

Further watching

Videos
card image
Apr 30, 2026
Java Flight Recorder Tutorial: How to Profile Java Applications

High CPU, GC spikes, or slow startup are common production issues, but logs and metrics don’t always reveal what the JVM is actually doing. Java Flight Recorder (JFR) provides a precise, low-overhead view of JVM behavior, safe for use even in production environments. In this video, you’ll learn how to use JFR to identify real bottlenecks such as CPU hotspots, memory allocation pressure, thread contention, and I/O stalls. We walk through the full workflow, including starting recordings with JVM flags, controlling them via jcmd, running JFR inside Docker containers, and attaching to live systems using ephemeral containers. Then we analyze a real Spring Boot recording in JDK Mission Control, breaking down GC behavior, allocation patterns, thread states, and method-level hotspots. If you want to move from symptoms to root cause with more confidence, this approach will help. Full article with commands and examples: [https://bell-sw.com/blog/how-to-profile-java-applications-with-jfr-beginner-s-guide/](https://bell-sw.com/blog/how-to-profile-java-applications-with-jfr-beginner-s-guide/)

Videos
card image
Apr 22, 2026
Dynamic SQL Queries with Spring Data JPA in 6 Minutes

If your repository layer has multiple queries for different filter combinations, your data access logic is already getting harder to maintain. In this video, we implement dynamic SQL queries in Spring Data JPA using Specifications — a composable approach that helps avoid query duplication and keeps your filtering logic clean. We build a flexible filtering system with optional parameters (category, language, format, price) and show how Specification.unrestricted() skips empty filters, while Specification.allOf(...) combines them into a single query. We also address a common issue: string-based field access. It’s fragile and can break at runtime when your model changes. Using the JPA Static Metamodel, we move to compile-time safety. The result is a cleaner, more maintainable way to implement dynamic filtering in Spring-based applications.

Videos
card image
Apr 8, 2026
Best Oracle Java Alternatives in 2026 Comparison of OpenJDK Distributions

A comparison of major OpenJDK distributions (Temurin, Liberica, Zulu, Corretto, Semeru, etc.), covering who maintains them, how updates are delivered, and what lifecycle guarantees they provide. We also explain why upstream OpenJDK isn’t production-ready and how your vendor choice impacts real-world systems. Useful for Spring Boot, containers, and Kubernetes to avoid hidden risks and choose the right runtime.