Reading and Writing JFR Files Programmatically
A guide to programmatically reading and writing Java Flight Recorder (JFR) files, comparing built-in APIs and third-party libraries.
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.
24 articles from this blog
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.
Explores an experimental front-end tool for querying Java Flight Recorder (JFR) data using a custom SQL-like language.
Introduction to Java 25's new experimental CPU-time profiler, explaining its advantages over the current JFR method sampler.
A technical guide on installing and running SAP's Garden Linux on an Android phone using Termux and proot-distro.