Sébastien Allemand
banner
allemas.bsky.social
Sébastien Allemand
@allemas.bsky.social
JVM Internals & Concurrent Software Design 🏗️
Deep dives into performance, concurrency & low-level mechanics ⚙️

Im not a t-shirt maker, views are my own
August 22, 2025 at 6:37 AM
We did a good job today generating the bytecode for the POJOs of the JFR events.

Next steps: sending them to an ORM :D

I discovered a lot of strange things in bytecode generation, and I must say that using an LLM to browse through certain parts of the documentation helps speed things up.
August 16, 2025 at 3:57 PM
Mon premier test ASM fonctionne !

J’ai retrouvé ce que j’avais vu en parsant le constant pool

ASM, c’est pareil : on déclare les constantes (types, noms, signatures) puis on écrit les instructions bytecode qui pointent vers ces constantes pour construire les méthodes

Y a plus qu'a jouer now :D
August 8, 2025 at 11:16 PM
Here’s a real example based on xxd output:
00000000: cafe babe 0000 0044 ...

We can see:
- Magic number: cafebabe
- Minor version: 0000 → 0
- Major version: 0044 → 68

This means the class file targets JDK 24 :D
May 22, 2025 at 9:06 PM
Now I can display the instructions opcode of my compiled Java class! This is a tricky part for me to understand, as Code_attribute is complex and composed of complex types
May 12, 2025 at 10:34 PM
DataInput.readfully () is Interesting when you know how many bytes you should read before
May 9, 2025 at 3:48 PM
So exciting ! :rocket:
May 9, 2025 at 1:10 PM
My classFile parser taking shape !
May 9, 2025 at 12:45 PM
TIL: The order in which `javap` displays information isn't the accurate representation of a `.class` file's binary structure.

docs.oracle.com/javase/specs...
May 4, 2025 at 9:29 AM
Further down in the bytecode,

- ldc #13 loads the string "Hello world!" (entry #13) onto the stack.
- invokevirtual #15 uses entry #15 in the constant pool, which references PrintStream.println(String).

This is where the string is passed to the method, and "Hello world!" gets printed! <3
April 26, 2025 at 8:41 AM
Where does println("Hello world!") ?

It resolves through the Methodref (#15), pointing to PrintStream.println(String)
April 26, 2025 at 8:36 AM
Now it's getting interesting: the constant pool — the class file’s symbol table. Class names, method signatures, constants… everything goes through it. Bytecode just points to it.

Let’s dig a bit deeper🚀
April 26, 2025 at 8:20 AM
We start slow with the classfile header information details on the JDK to use, a checksum to detect changes, and access_flags like ACC_PUBLIC (public, accessible outside the package) and ACC_SUPER (special handling of superclass methods)

I'm enjoying the journey ! :D
April 19, 2025 at 11:00 AM
The hardest part was redefining types on top of the binding to avoid conflicts with Rust’s JNI dependency. Also, correctly constructing the jvmtiThreadInfo pointer took some effort. Lots of debugging, but in the end, it was a great learning experience!
March 9, 2025 at 10:38 PM
Just got a Rust binding for JVM TI working!

Right now, it only prints JVM thread names, but the journey was fascinating. Not trivial, but I learned a lot about Rust, the JVM

I'm pretty proud of myself :D
March 9, 2025 at 10:34 PM
Je ne connaissais pas ! Merci je regarde dès que jai un moment comment je peux jouer avec ca !

j'aime bien l'ergonomie:
February 10, 2025 at 8:45 AM
Rust in the JVM part#1

Really fun to play :D
February 10, 2025 at 8:36 AM
Call the police ! :D
January 28, 2025 at 11:28 PM
I've found the door to JVM TI, run away!
#java #jvm
January 26, 2025 at 9:53 AM
Je viens d’apprendre que pour bloquer la suggestion de connexion Google on peut le faire avec uBlock

Dans Firefox / uBlock origin / Tableau de bord / Mes filtres,
coller la ligne suvante :
||accounts.google.com/gsi/*
January 21, 2025 at 12:00 AM
🤡
January 12, 2025 at 12:01 AM
I've just fixed the last issue I had in my java instrumentation demo where a bytebuddy agent add tracing context into vertx's internal requests

What a great relief 🥳 !!

From -> to
December 14, 2024 at 4:19 PM
Sorry, I forgot the screen
December 9, 2024 at 8:48 AM
A flamegraph export of stack traces for all live platform threads.

It's fun, after so much learning, to see things come to reality 😍
December 7, 2024 at 5:04 PM
JFR event from a JVM agent that pushes metrics to the OTEL protocol :D

Funny ! the simplest part of my recent learning journey
December 7, 2024 at 4:25 PM