RFR(XL): 8185640: Thread-local handshakes
Erik Österlund
erik.osterlund at oracle.com
Thu Oct 26 14:39:47 UTC 2017
Hi Andrew,
On 2017-10-26 10:58, Andrew Haley wrote:
> BTW, I don't understand why interpreted code doesn't simply read the
> polling page. Or we could even simply read-protect the bytecode
> dispatch tables themselves.
The reason we do not poll the page in the interpreter is that we need to
generate appropriate relocation entries in the code blob for the PCs
that we poll on, so that we in the signal handler can look up the code
blob, walk the relocation entries, and find precisely why we got the
trap, i.e. due to the poll, and precisely what kind of poll, so we know
what trampoline needs to be taken into the runtime. While constructing
something that does that is indeed possible, it simply did not seem
worth the trouble compared to using a branch in these paths. The same
reasoning applies for the poll performed in the native wrapper when
waking up from native and transitioning into Java. It performs a
conditional branch instead of indirect load to avoid signal handler
logic for polls that are not performance critical.
Only the polls in JIT-compiled code use the optimized indirect load
mechanism.
And we do not want to read-protect the bytecode dispatch tables, because
we want the ability to stop individual threads, and that would stop all
of them.
I hope that explains it.
Thanks,
/Erik
More information about the hotspot-dev
mailing list