Jean-Philippe Bempel
jpbempel.bsky.social
Jean-Philippe Bempel
@jpbempel.bsky.social
Sr Sw Eng @Datadoghq, optimize software running on JVM. Love performance topics and mechanical sympathy supporter. Java Champion & @javamissionctrl committer
Pinned
Reposted by Jean-Philippe Bempel
youtu.be/Z3OJ0K5fReA
C++ Compile times. Ethereum byte code and runtime. Java and exceptions; more C++ compile times. Fat binaries & code portability. Language design around memory safety
Coffee Compiler Club, 2025_11_14
YouTube video by Cliff Click
youtu.be
November 16, 2025 at 12:12 AM
Reposted by Jean-Philippe Bempel
Reposted by Jean-Philippe Bempel
✏️ JEP 8371379 was drafted
Title: Deprecate the UTF-16-only Internal String Representation
Type: feature
Component: core / lang
See openjdk.org/jeps/8371379
November 5, 2025 at 11:50 PM
Reposted by Jean-Philippe Bempel
🎯 JEP 526 proposed to target JDK 26
Title: Lazy Constants (Second Preview)
Type: feature
Component: core / lang
Release: 26
See openjdk.org/jeps/526
October 30, 2025 at 6:50 PM
Reposted by Jean-Philippe Bempel
🎯 JEP 500 proposed to target JDK 26
Title: Prepare to Make Final Mean Final
Type: feature
Component: core
Release: 26
See openjdk.org/jeps/500
October 29, 2025 at 11:50 AM
Reposted by Jean-Philippe Bempel
🎯 JEP 516 proposed to target JDK null
Title: Ahead-of-Time Object Caching with Any GC
Type: feature
Component: hotspot / gc
See openjdk.org/jeps/516
October 28, 2025 at 10:50 AM
Reposted by Jean-Philippe Bempel
Learn how to import JFR data into DuckDB, to easily query and analyze your profiling data in this week's blog post: mostlynerdless.de/blog/2025/10...
Making JFR Quack: Importing JFR files into DuckDB - Mostly nerdless
Learn how to import JFR data into DuckDB, to easily query and analyze your profiling data in this weeks blog post.
mostlynerdless.de
October 24, 2025 at 7:48 AM
Reposted by Jean-Philippe Bempel
I just published a new article: Using profiler function hooks in .NET with Silhouette.
In the process, we also learn how to use static linking with NativeAOT.

minidump.net/using-functi...
Using profiler function hooks in .NET with Silhouette
In this article, we see what are function hooks, and how to use them in .NET with Silhouette. We also learn how to statically link a library with NativeAOT.
minidump.net
October 21, 2025 at 11:49 AM
Reposted by Jean-Philippe Bempel
Method tracing in async-profiler 4.2
github.com/async-profil...

Also there’s system-wide process sampling on linux, this ends up in a `profiler.ProcessSample` JFR event. (I would love to see something like that on Darwin too).
github.com/async-profil...

#async-profiler
Method Tracing · async-profiler async-profiler · Discussion #1497
Background Async-profiler is often described as a low-overhead sampling profiler for Java. Sampling means the profiler collects statistical information about program execution by periodically inter...
github.com
October 21, 2025 at 11:53 AM
Reposted by Jean-Philippe Bempel
@pminborg.bsky.social and I wrote a bit about some of the many performance improvements in JDK 25: inside.java/2025/10/20/j...

tl;dr: upgrade to JDK 25 and add -XX:+UseCompactObjectHeaders
Performance Improvements in JDK 25
Java is constantly evolving with ever increasing performance. JDK 25 comes with significant performance improvements compared to previous versions including scoped values, improved GCs, lots of compil...
inside.java
October 20, 2025 at 9:27 AM
Reposted by Jean-Philippe Bempel
A nice article about "Memory Allocation in Go"
#golang

nghiant3223.github.io/2025/06/03/...
Memory Allocation in Go
Memory Allocation in Go
nghiant3223.github.io
September 17, 2025 at 11:17 AM
Reposted by Jean-Philippe Bempel
Can We Know Whether a Profiler is Accurate?

Spoiler: yes we can! But it took us figuring out a way to work around the fundamental observer effect.

stefan-marr.de/2025/10/can-...

If you're at SPLASH, don't miss our talk at VMIL today and at OOPSLA on Saturday!
Can We Know Whether a Profiler is Accurate?
Measuring causes profiles to change, so is there a way to work around it and know whether a profile is accurate?
stefan-marr.de
October 15, 2025 at 12:41 AM
Reposted by Jean-Philippe Bempel
JDK Memory corruption on AArch64 Byte code Rewriting, this can lead to impossible branch being taken among other issues.
(via Ismael Juma on Twitter)
bugs.openjdk.org/browse/JDK-8...
#openjdk
Loading...
bugs.openjdk.org
October 11, 2025 at 11:36 AM
Reposted by Jean-Philippe Bempel
youtu.be/wYO4-s8WsnA
Modules, std lib, abi, portable ELF, cffi, build systems, dependencies, project root, xtc modules, as directories, diff in “module” impls, meaning of “import”, foreign modules. Typechecking dead code? Combinatorial explosion build targets
Coffee Compiler Club, 2025_10_10
YouTube video by Cliff Click
youtu.be
October 11, 2025 at 3:57 PM
Reposted by Jean-Philippe Bempel
Ever seen a verbose render how a very small GC operation looks like in the context of larger safepoint? Here it is: (I need to blog about things you can see there)
October 10, 2025 at 10:35 AM
Reposted by Jean-Philippe Bempel
Learn how to compare objects from JFR recordings in Java and why this is slightly trickier than you might have expected in this week's blog post: mostlynerdless.de/blog/2025/10...
JFR and Equality: A tale of many objects - Mostly nerdless
Learn how to compare objects from JFR recordings in Java and why this is slightly trickier than you might have expected.
mostlynerdless.de
October 10, 2025 at 9:40 AM
Reposted by Jean-Philippe Bempel
OMG it makes a huge difference. Without even pinning to tier 1 ("dev" mode) we have a new record base startup of 361ms on my M4 MBA. I'm playing with some other tweaks and a longer training run now.
September 25, 2025 at 9:58 PM
Reposted by Jean-Philippe Bempel
New post: JRuby and JDK 25: Startup Time with AOTCache

Let's take a look at JRuby's startup time journey, all the way up to using JDK 25's AOTCache and Project Leyden features coming to a JDK near you soon.

blog.headius.com/2025/09/jrub...
JRuby and JDK 25: Startup Time with AOTCache
JDK 25 is the newest LTS release since JDK 21, and it ships with a gaggle of amazing VM-level features. This post will cover one of the most important improvements for command-line ecosystems like…
blog.headius.com
September 24, 2025 at 5:34 PM
Reposted by Jean-Philippe Bempel
Today I learned that since #JDK 11, there is now in thread dumps

- cpu=... : the time the thread spent executing on the CPU.
- elapsed=... : the wall clock time passed since the thread was started.

bugs.openjdk.org/browse/JDK-8...

I’m not proud to have missed that 🤦‍♂️
Loading...
bugs.openjdk.org
September 25, 2025 at 9:58 PM
Reposted by Jean-Philippe Bempel
Nice engineering blog post on some query filtering at scale. There are some lessons in there.

They used a "bloofi " multidimensional bloom filters.
axiom.co/blog/buildin...
lemire.me/en/publicati...
Haydex: From Zero to 178,600,000,000 rows a second in 30 days
This is the story of how we turned a failed filter prototype into a production system running at 178.6B rows/sec in 30 days.
axiom.co
September 26, 2025 at 7:34 AM
Reposted by Jean-Philippe Bempel
New toy, "residence graphs": tracking the compilation level for top method in the stack. On the left, normal JIT mode: compilers are busy, intp -> T2 -> T3 code is hot; T4 code slowly takes over. On the right, normal AOT+JIT (Leyden) mode: AOT code carries most of it, JIT happens to plug the holes.
September 24, 2025 at 12:19 PM
Reposted by Jean-Philippe Bempel
SIMD Within a Register: How I Doubled Hash Table Lookup Performance

Learned about SWAR the first time in the one-billion row challenge. Nice explanation including benchmarks.
SIMD Within a Register: How I Doubled Hash Table Lookup Performance | MALTSEV.SPACE
It started with a simple thought: four bytes in a hash table bucket look just like an integer. Luckily, this one idea led to a deep dive into bit-twiddling and a 2x performance boost.
maltsev.space
September 20, 2025 at 12:56 PM