Implement a new JStall Feature with Me
A developer walks through implementing a new JVM analysis feature for the JStall tool, using GitHub Copilot and sharing the development process.
Johannes Bechberger is a JVM developer at SAP sharing in-depth articles on profiling, debugging, OpenJDK internals, async-profiler, and JVM performance, based on real-world work in the SapMachine team.
27 articles from this blog
A developer walks through implementing a new JVM analysis feature for the JStall tool, using GitHub Copilot and sharing the development process.
A quiz game that tests your knowledge of Java version history by identifying the smallest version where a given code snippet is valid.
Using a custom Java-based Linux scheduler to reproduce a tricky concurrency bug in the OpenJDK's JFR CPU-time sampler.
A guide to programmatically reading and writing Java Flight Recorder (JFR) files, comparing built-in APIs and third-party libraries.
A technical guide to obtaining the Java version in under 1ms by reading the release file, avoiding the slow 'java -version' command.
A technical analysis comparing the startup performance of OpenJDK and GraalVM, focusing on the speed of the `java -version` command and underlying JVMCI initialization.
A guide to using the execjar tool to create executable JAR files for Java applications, compatible with UNIX systems.
Introduces JStall, a command-line tool for inspecting Java applications via thread dumps and profiling to identify CPU-intensive threads and deadlocks.
Explains why using arrays and complex types in custom JDK Flight Recorder (JFR) events is problematic and should be avoided.
Extending a Java meta-agent to instrument and debug native JVMTI agents, enabling visibility into bytecode transformations.
A guide to building and using an Android app that runs AI models, including LLMs, locally on a phone via the MediaPipe API.
A guide on importing Java Flight Recorder (JFR) profiling data into DuckDB for analysis using SQL queries.
Explores the intricacies of comparing Java Flight Recorder (JFR) event objects, highlighting unexpected challenges in object equality.
Explains how to suppress Java Flight Recorder (JFR) startup log messages using the -Xlog:jfr+startup=error JVM flag.
A technical exploration of seven methods to intentionally waste CPU time for precise durations, focusing on user-land implementations for profiling tests.
A guide to profiling Java applications on Cloud Foundry using the cf CLI Java plugin for heap and thread dumps.
A technical analysis of Java 25's CPU-Time Profiler, focusing on the sampler queue's semantics and synchronization implementation.
Deep dive into sizing the central request queue for Java 25's new CPU-time profiler, balancing performance and memory usage.
A deep dive into the implementation details of the new CPU-time profiler introduced in Java Development Kit (JDK) 25.
A developer's raw notes on profiling challenges and ideas for JFR stack sampling in the OpenJDK, written in March 2025.