When your Java application is slow, you need to use a Java profiler. Before JDK 25, the built-in Java profiler only allowed you to profile based on execution time, not CPU-time, and those aren’t the same. A method blocked on I/O and a method doing tight computation can look identical… unless you have CPU-time profiling, which lets you focus on what’s truly burning your CPU. In this talk, I’ll introduce you to the new CPU-time profiler in JDK 25 (JEP 509). You’ll learn why the traditional JFR execution profiles can mislead, how CPU-time sampling works under the hood, and how you can now profile your application more accurately without relying on potentially unsafe, external tools. Whether you care about performance or just want to understand your app’s throughput bottlenecks, this talk by one of the minds behind the profiler will give the foundations of profiling and show you why it’s easier than ever with JDK 25.

Talk Level:
INTERMEDIATE

Bio:
Johannes Bechberger is a JVM developer working on profilers and their underlying technology in the SapMachine team at SAP. This includes improvements to async-profiler and its ecosystem, a website to view the different JFR event types, and improvements to the FirefoxProfiler, making it usable in the Java world. His work today comprises many open-source contributions and his blog, where he regularly writes on in-depth profiling and debugging topics. He also works on hello-ebpf, the first eBPF library for Java. His most recent contribution is the new CPU Time Profiler in JDK 25.