JDK 26 EA builds: changes to avoid pinning while waiting for class initialization
Patricio Chilano Mateo
patricio.chilano.mateo at oracle.com
Wed Nov 19 15:32:24 UTC 2025
The latest JDK 26 EA builds [1] now include the changes from JDK-8369238
[2]. With this update, a virtual thread that tries to initialize a class
already being initialized by another thread will, in most cases, be
unmounted from its carrier while waiting. Previously, the virtual thread
would remain pinned to its carrier while waiting for the other thread to
execute the class initializer.
This will help avoid pathological cases that can lead to deadlocks, in
particular, those where all carriers are pinned by virtual threads
waiting for another thread to execute a class initializer, while the
thread executing the class initializer blocks or waits on something that
requires a virtual thread to execute.
For now, the changes address the most common initialization paths
described in JDK-8369238, but this might be extended in the future. As
such, testing and feedback would be greatly appreciated, especially for
those who have run into this issue on real-world applications.
Thanks,
Patricio
[1] https://jdk.java.net/26/
[2] https://bugs.openjdk.org/browse/JDK-8369238
More information about the loom-dev
mailing list