JEP 491 improves the scalability of Java code that uses synchronized methods and statements by arranging for virtual threads that block in such constructs to release their underlying platform threads for use by other virtual threads. This eliminates nearly all cases of virtual threads being pinned to platform threads, which severely restricts the number of virtual threads available to handle an application's workload. This change is already integrated into #Java 24 and available in the latest JDK 24 EA builds. We also look into the remaining cases of pinning and how to observe it before we briefly touch on thread capture and io_uring.
JEP 491 - Synchronize Virtual Threads without Pinning: https://openjdk.org/jeps/491
JEP 444 - Virtual Threads: https://openjdk.org/jeps/444
JDK 24 EA builds: https://jdk.java.net/24/
Alan Bateman on io_uring: https://www.youtube.com/watch?v=SPc9YpLsYo8&t=944s
~~~ Chapters ~~~
0:00 Intro
0:41 Virtual Thread Recap
2:17 Synchronized Pinning
4:24 Native Pinning
6:16 Capture During File I/O
Tags: #Java #OpenJDK #Performance