"pinned" terminology
Alan Bateman
alan.bateman at oracle.com
Wed Aug 13 13:13:58 UTC 2025
On 12/08/2025 16:27, Cay Horstmann wrote:
> I was asked when specifically a thread is pinned/unpinned. Following
> https://openjdk.org/jeps/444#Pinning, I had assumed that a thread is
> pinned when it calls a foreign/native method, or prior to JEP 491,
> when it enters a synchronized block/method.
>
> On the other hand, there is this sentence in JEP 491: "In particular,
> if a virtual thread calls native code, either through a native method
> or the Foreign Function & Memory API, and that native code calls back
> to Java code that performs a blocking operation or blocks on a
> monitor, then the virtual thread *will be pinned*."
>
> In the JEP 444 sense, it would have already been pinned when calling
> the native code, but it seems that in the JEP 491 sense, that only
> happens upon performing a blocking operation in the callback.
A virtual thread is pinned to its carrier when executing native code or
when calling through native code (and back to Java). The limitations
listed in JEP 444 includes the case where a virtual thread is executing
native code. JEP 444 doesn't go into the scenario of a virtual threads
calling through native code (so native frames on the stack) and attempts
to block. The cited text in JEP 491 is from the section on diagnosing
further cases of pinning and I think is okay.
-Alan
More information about the loom-dev
mailing list