-
Notifications
You must be signed in to change notification settings - Fork 99
Presentations
Our team gives many presentations at conferences and meetups all over Europe and elsewhere. We collect these here.
Johannes Bechberger (blog)
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. He started at SAP in 2022 after two years of research studies at the KIT in Java security analyses. 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.
Since 2023, he's been touring Europe's Java User Groups and conferences, like JavaZone and Devoxx Belgium, to speak on various topics.
All of the following talks are his.
Alternative titles: Profiler Tools for Java | Your Java Application Is Slow? Check Out These Open-Source Profilers
Profilers help to analyze performance bottlenecks of your application – if you know which to use and how to work with them.
There are many open-source profilers, like async-profiler or JMC. This talk will give you insights into these tools, focusing on understanding the basic concepts of profiling like flame graphs and more, the usage of async-profiler and JMC, and the advantages and disadvantages of the different tools.
The talk will end with personal insights into my profiler development and a successful profiling workflow that resulted from this. https://speakerdeck.com/parttimenerd/unleash-the-power-of-open-source-java-profilers
Collection of reading material
Date | Event | Location | Links |
---|---|---|---|
Apr 25, 2024 | JUG Berlin-Brandenburg | Berlin, Germany | Schedule |
Nov 21 - 23, 2023 | JCon World | Online | Schedule |
Oct 18 - 19, 2023 | Basel One | Basel, Switzerland | Schedule |
Sep 12, 2023 | JavaForum Nord | Hannover, Germany | Schedule |
Sep 6 - 7, 2023 | JavaZone | Oslo, Norway | Schedule, Recording, Slides |
Jun 14, 2023 | Karlsruher Entwicklertag | Karlsruhe, Germany | |
Jun 7, 2023 | JDriven Full Stack Conference | Nieuwegen, Netherlands | |
May 31, 2023 | JUG Milano | Milan, Italy | Schedule, Recording |
Mar 27 - 29, 2023 | QCon London | London, UK | Schedule, Recording |
Oct 18, 2022 | JUG Karlsruhe | Karlsruhe, Germany | Schedule, Recording |
Alternative title: Write your own Java Profiler in 240 lines of pure Java
Profilers help to analyze performance bottlenecks of your application if you know how to use them. Getting to grips with profilers helps to understand how they work: Profilers aren't rocket science. A usable Java profiler can be written in 240 lines of pure Java code, allowing you to fix performance issues and add custom features quickly.
This talk will give the fundamentals of Java profiling and how Java profilers typically work, followed by a detailed explanation of how to develop a functioning profiler in a few lines of Java code. This talk will also explain how you can use it in production to analyze performance issues and show briefly how to work with a widely used open-source profiler based on the same principles.
Collection of reading material
Date | Event | Location | Links |
---|---|---|---|
Jun 28, 2024 | KCDC | Kansas City, US | Schedule |
May 29, 2024 | jPrime | Sofia, Bulgaria | Schedule |
Apr 4, 2024 | JUG Vilnius | Vilinus, Lithuania | Schedule |
Feb 21 - 23, 2024 | ConFoo | Montreal, Canada | Schedule |
Nov 9, 2023 | J-Fall | Ede, Netherlands | Recording |
Oct 2 - 6, 2023 | Devoxx Belgium | Antwerp, Belgium | Schedule, Slides, Recording |
Sep 14 - 15, 2023 | code.talks | Hamburg, Germany | Schedule, Recording |
Jul 13, 2023 | JUG Mannheim | Mannheim, Germany | Schedule |
Jun 14, 2023 | Karlsruher Entwicklertag | Karlsruhe, Germany | C++ Version with the title "Writing a Java Profiler from Scratch" |
Jun 5, 2023 | OpenValue München | Munich, Germany | Schedule |
Profilers are great tools in your toolbox, like debuggers, when solving problems with your Java application. I'll tell you some of their problems and a technique to cope with them in this talk.
There are many open-source profilers, most notably JFR/JMC, and async-profiler, that help you to find and fix performance problems. But they are just software themself, interwoven with a reasonably large project, the OpenJDK (or OpenJ9, for that matter), and thus suffer from the same problems as the typical problems of application they are used to profile.
Date | Event | Location | Links |
---|---|---|---|
Feb 26 - 28, 2025 | ConFoo | Montreal, Canada | Schedule |
Jun 8 - 11, 2023 | Gulaschprogrammiernacht | Karlsruhe, Germany | Schedule, Slides, Recording |
I'll present you with all the techniques to write a Java agent and javassist based instrumentation code to find unused classes and dependencies in your project. Knowing which classes and dependencies are not used in your application can save you from considering the bugs and problems in these dependencies and classes if you remove them, helping to guard against supply chain attacks.
Java agents and instrumentation of a few lines of code can save you a lot of effort and implementing them is great fun :)
Reading material: Instrumenting Java Code to Find and Handle Unused Classes and Class Loader Hierarchies
Date | Event | Location | Links |
---|---|---|---|
Jul 31, 2024 | Java Forum Stuttgart | Stuttgart, Germany | Schedule, Slides |
Mar 7, 2024 | Voxxed Days Zürich | Zürich, Switzerland | Schedule, Slides, Recording |
Jun 8 - 11, 2023 | Gulaschprogrammiernacht | Karlsruhe, Germany | Schedule, Slides, Recording |
Alternative title: Debugging Unveiled: Exploring Debugger Internals to Make You a Better Developer
Debuggers are indispensable tools for Java developers, empowering them to conquer bugs and unravel complex systems. But have you ever wondered how they work? Curious about the implementation of features like conditional breakpoints and remote debugging? Wondering about all the cool features in modern IDEs, how they are implemented and how IDEs even communicate with your JVM?
Join me for a deep dive into debuggers, unlocking their secrets and hidden gems to maximize their potential.
Reading material: Debugging-related blog posts, JDWP-tunnel, Personal talk page
Date | Event | Location | Links |
---|---|---|---|
Jul 2, 2024 | NYJavaSIG | New York City, USA | Schedule |
Jun 3 - 5, 2024 | Karlsruher Entwicklertag | Karlsruhe, Germany | Schedule |
Apr 9 - 11, 2024 | JavaLand | Nürburgring, Germany | Deep-Dive, Schedule |
Feb 21 - 23, 2024 | ConFoo | Montreal, Canada | Schedule |
Jan 17, 2024 | WeAreDevelopers Java Day | Online | Schedule |
Nov 7, 2023 | JUG Karlsruhe | Karlsruhe, Germany | Schedule, Slides |
Oct 12, 2023 | JUG Darmstadt | Darmstadt, Germany | Schedule, Slides |
eBPF is buzzing all over the cloud native world, as the cutting-edge technology reshaping the way we understand performance, security, and observability within kernel space. Java, with its recent strides in modernization and optimization, from enhancing startup times to facilitating native execution and advancing machine learning applications, stands at the cusp of this transformative era.
Join us in this journey, where we will embark on an ambitious challenge to write and build a high-throughput firewall leveraging the combined power of eBPF and Java. We'll start with a deep dive into eBPF's capabilities for kernel-level packet manipulation, then transition to how Java's latest advancements, particularly through Project Panama, enable seamless native code invocation and interoperability. Our focus will then converge to a hands-on demonstration of building a simple firewall using eBPF and Java, integrating kernel-level operations with high-level programming for real-time performance enhancements.
Attendees will gain practical insights into deploying eBPF programs from Java using the hello-ebpf library, managing packet flows efficiently, and implementing firewall rules with precision, leveraging the strengths of both worlds.
Reading material: My blog series on developing hello-ebpf, a Java library for eBPF. More resources here
Date | Event | Location | Links |
---|---|---|---|
Jan 20 - 23, 2025 | NDC Security | Oslo, Norway | Schedule |
Nov 6 - 8, 2024 | Øredev | Malmö, Sweden | Schedule, joint talk with Mohammed Aboullaite, Recording |
Oct 22 - 24, 2024 | Open Community Experience | Mainz, Germany | Schedule |
Oct 7 - 11, 2024 | Devoxx Belgium | Antwerp, Netherlands | Schedule, joint talk with Mohammed Aboullaite, Recording |
Sep 26 - 27, 2024 | InfoQ Dev Summit | Munich, Germany | Schedule and Recording |
Sep 3 - 5, 2024 | JavaZone | Oslo, Norway | Schedule, Slides, Recording, joint talk with Mohammed Aboullaite |
Aug 28, 2024 | Copenhagen Developer Festival | Copenhagen, Denmark | Schedule, Recording |
Aug 23, 2024 | Suisse JUG | Luzern, Switzerland | Schedule, Slides |
Aug 22, 2024 | Suisse JUG | Zürich, Switzerland | Schedule, Slides |
eBPF is transforming Linux system capabilities, enabling the extension of the kernel with custom process schedulers, firewalls, and more. Thanks to Java's recent native integration and a bit of compiler magic, we can now create these extensions directly in Java — and that's exactly what this talk is all about.
We'll cover the fundamentals of eBPF and scheduling and how to implement a custom scheduler in Java. The session will showcase a scheduler that visualizes scheduling through sound — each process is mapped to a musical note, offering a fun and intuitive way to understand system activity. You’ll even get the chance to control the scheduling yourself using a MIDI keyboard.
Join us to learn how to craft small eBPF programs in Java that you'll really like the sound of.
Date | Event | Location | Links |
---|---|---|---|
Jun 19 - 22, 2025 | Gulaschprogrammiernacht | Karlsruhe, Germany | |
May 7, 2025 | JUG Karlsruhe | Karlsruhe, Germany | Schedule, joint talk with David Kiefer |
Jan 20, 2025 | Java Forum Malmö | Malmö, Sweden | Schedule, Slides |
Alternative title: Who Instruments the Instrumenters? A Practical Look at Class Generation and Transformation in Java
Ever wonder how libraries like Spring, Mockito, and JaCoCo add arbitrary behavior to existing objects or even modify them altogether? We'll demystify class generation and transformation in Java and explore how the JVM allows us to dynamically generate and modify code for instrumentation.
We do this by instrumenting the code that instruments the code itself, so we can observe how, for example, Mockito alters the code to implement mocking.
Through concrete examples from real-world applications, we'll uncover how these techniques enhance and instrument Java code, from creating dynamic proxies to altering bytecode at runtime. You'll gain an inside look at decompiled bytecode to understand the magic behind the scenes.
By the end of this session, you'll see how Java agents and instrumentation can streamline your development process and make code manipulation both effective and enjoyable.
Date | Event | Location | Links |
---|---|---|---|
Apr 3, 2025 | VoxxedDays Amsterdam | Amsterdam, Netherlands | Schedule |
Python 3.12 introduced a new low impact monitoring API with PEP669 which can be used to implement far faster debuggers than ever before. This talk will give you an introduction to the new API and show you how it can be used to write a simple debugger from scratch.
Date | Event | Location | Links |
---|---|---|---|
Oct 31 - Nov 3, 2024 | PyCon France | Strasbourg, France | Schedule |
Sep 25 - 26, 2024 | PyData Paris | Paris, France | Schedule, Recording |
Apr 22 - 24, 2024 | PyCon.DE | Berlin, Germany | Schedule Slides |
Feb 3 - 4, 2024 | FOSDEM | Brussels, Belgium | Schedule with Recording, Slides |
Python long lagged a good monitoring and profiling API. It had only the simplistic sys.settrace API, which had a high overhead and couldn't be configured appropriately. The new API, released in October 2023, will change this by offering a proper fine-grained and well-designed monitoring API while also making the commonly used operations fast.
This talk will give you an introduction to the new API and its design major design decisions and show you how you can use it to write a simple debugger from scratch.
Date | Event | Location | Links |
---|---|---|---|
Feb 26 - 28, 2025 | ConFoo | Montreal, Canada | Schedule |
May 31, 2024 | Gulaschprogrammiernacht | Karlsruhe, Germany | Schedule |
May 2, 2024 | budapest.py | Budapest, Hungary | Event, Interview |
Apr 4, 2024 | PyCon Lithuania | Vilnius, Lithuania | Schedule, Slides, Recording |
Today, eBPF is used for software-defined networking, observability, monitoring tools, and more. Previously, creating these was labor-intensive and had a high barrier to entry. With the new scheduler extensions, we can now add custom schedulers to this list. Sched_ext allows us to write schedulers with custom policies directly in eBPF. In this talk, we’ll develop a basic FIFO (First-In-First-Out) scheduler in C to show you how to get started with writing your own. If you’re interested in diving deeper into eBPF, join us for a quick hands-on intro to custom scheduling!
Date | Event | Location | Links |
---|---|---|---|
Mar 22 - 23, 2025 | Chemnitz Linux Days | Chemnitz, Germany | Schedule, Recording, Slides |
Feb 1 - 2, 2025 | FOSDEM | Brussels, Germany | Schedule and Recording |
While there are eBPF libraries for languages like Rust and Go, there are none for Java, one of the most popular programming languages. We developed the hello-ebpf Java library to change this. Its aim is to integrate eBPF programs seamlessly into Java applications, making it possible to write the eBPF programs themselves directly in Java.
In this talk, we show the technology behind the library, its use, and how to use it to easily implement a basic packet filter and a simple Linux scheduler without writing a single line of C code.
Date | Event | Location | Links |
---|---|---|---|
May 12 - 15, 2025 | JCon Europe | Cologne, Germany | Schedule, Slides |
Sep 18 - 20, 2024 | Linux Plumbers Conference | Vienna, Austria | Recording |
Feb 3 - 4, 2024; FOSDEM; Brussels, Belgium
A Java thread in the JVM regularly checks whether it should do extra work besides the execution of the bytecode. This work is done during so-called safepoints. There are two types of safepoints: local and global. This allows the JVM to do activities like method deoptimizations or stop-the-world garbage collections, where the amount of concurrency should be limited. But how do they actually work?
This talk covers the implementation of global and local safepoints in the OpenJDK.
Feb 4 - 5, 2023; FOSDEM; Brussels, Belgium
Like many programming communities, the Java community lacks a simple open-source profiling UI. In the quest to build such a UI, I found the Firefox Profiler to be the closest to an adaptable polyglot profiling UI. This talk presents my Java JFR Profiler plugin for IntelliJ and gives an overview of how to adapt and integrate the Firefox Profiler to use it to view profiling data from different sources, like JDK Flight Recordings.
This talk is based on my blog posts Firefox Profiler beyond the web and Using Firefox Profiler beyond the web which cover my work on my Firefox Profiler based IntelliJ Plugin.
Feb 4 - 5, 2023; FOSDEM; Brussels, Belgium
Java profiling relies heavily on the AsyncGetCallTrace API. But this API has major drawbacks: It is unofficial, not well-tested, and omits important information. I propose AsyncGetStackTrace (JEP Candidate 435) as an improved replacement.
This talk will give an overview of AsyncGetCallTrace and AsyncGetStackTrace, their implementations, differences, and use cases, it is based on my blog post AsyncGetStackTrace: A better Stack Trace API for the JVM and related to the JEP Candidate 435.
Sep 11, 2024; eBPF Summit; Online
Sched_ext allows you to write a Linux scheduler with eBPF. Now that it finally comes to the mainline kernel, we want to make it accessible to a new group of people: Java developers. With our prototypical hello-ebpf library, it's now possible to write Linux schedulers and more using Java.
Join me in learning about sched_ext and how to write a basic scheduler implementation in "pure" Java.
Feb 1 - 2, 2025; FOSDEM; Joint talk with Jake Hillion; Brussels, Belgium
Consider you have a concurrency bug that requires threads to run in a specific order. Wouldn't it be great if you could stop and start threads at random? Prevent them from being scheduled onto the CPU? And the best part: Without the application being able to prevent this, like it could do with POSIX STOP and START signals? In come the scheduler extensions for the Linux Kernel. Introduced in version 6.12, they allow you to quickly write your own schedulers with eBPF, and can be the base for simple libraries that enable you to start and stop threads directly in the Linux kernel. This opens the possibility of creating complex scheduler scenarios at a whim.
In this talk, we'll show you a prototypical sched_ext-based library for concurrency testing.
Feb 1 - 2, 2025; FOSDEM; Joint talk with Jaroslav Bachorik; Brussels, Belgium
Java developers struggle with the trade-off between precise profiling and application stability. Unofficial methods like AsyncGetCallTrace offer precision but risk crashes, while official APIs such as JVMTI, JMX, and StackWalker are stable but biased due to safepoint polling. Java Flight Recorder (JFR) reduces this bias but introduces interpolation errors.
This talk addresses these challenges with three key topics: • Combining precise sampling with JFR’s stability to remove biases without sacrificing reliability. • Using eBPF probes and examining JVM internals for safer, detailed profiling. • Enhancing precision with user-supplied profiling contexts.
We will review the history of Java profilers and discuss the future of JVM profiling, with a focus on CPU profiling. Attendees will gain insights into new methods aimed at achieving accurate, stable performance analysis in Java applications, comparing them with async-profiler and existing tools.
Inner Workings of the FFI API in the JVM by Martin Dörr
Feb 1 - 2, 2025; FOSDEM; Brussels, Belgium
The Foreign Function & Memory API (JEP 454) introduced a new way of interacting with libraries written in other languages. It can be used as replacement for JNI. This talk examines the inner workings of the Foreign Function Interface (FFI) API. After having it implemented for PowerPC, I'd like to discuss how the JVM handles native function calls and Java callbacks, focusing on key concepts like stack layouts, calling conventions, and cross-platform challenges. The session is intended for developers curious about the technical foundations of free and open Java technologies and how JVM enhancements like the FFI API are realized. It will shed light on the low-level mechanisms that enable seamless integration of Java with native code while maintaining the performance and safety Java developers expect.
Feb 2 - 3, 2019; FOSDEM; Brussels, Belgium
OracleJDK, OpenJDK, AdoptOpenJDK, OpenJ9, Zulu, IcedTea, Liberica, SapMachine, GraalVM, SubstrateVM. 8, 9, 10, 11, 12, 18.3, 18.9, short-term, mid-term, long-term support release, security updates. GPLv2, Classpath Exception, Oracle Binary Code License, Technology Network License Agreement. Field of use restriction, private and commercial use, reference implementation, substantially derived, TCK/JCK, Oracle Contribution Agreement, OpenJDK Community TCK License Agreement (OCTLA), Java Community Process (JCP), Java Specification Request (JSR), Java Enhancement Proposal (JEP), Preview Features, Incubator Modules, Java (TM), Java SE compatibility, OpenJDK trademark notice.
Confused? Come and hear from Java and OpenJDK veteran Volker Simonis how the Java world has been radically turned inside out in the last year and how this impacts you as a Java user or developer. After the talk you'll have a clear understanding what's going on in the Java ecosystem and you'll be ready to plan your or your companies future Java strategy.