[14] RFR 8230765: Implement nmethod barrier for x86_32 platforms

erik.osterlund at oracle.com erik.osterlund at oracle.com
Tue Nov 26 10:32:02 UTC 2019

Hi Zhengyu,

Nice to see nmethod entry barriers added one more platform configuration.
So now you use a global instead of thread-local on 32 bit x64 as it 
doesn't have a Thread register.
That makes sense. I wonder though if that difference has spread too far 
into the runtime code. It does
sting a bit in my eyes to read the seemingly unnecessary #ifdef _LP64 
macros in BarrierSetNMethod.

In particular, when computing the BarrierSetNMethod::disarmed_value(), 
it seems like it would work
for everyone to simply read the global value, instead of doing it only 
sometimes, and sometimes read
the thread-local.

Here is a patch with my proposed cleanup:



On 11/25/19 9:35 PM, Zhengyu Gu wrote:
> Hi all,
> Please review this implementation of nmethod barrier for x86_32 
> platforms.
> x86_32 implementation mirrors x86_64's. The only difference is where 
> it reads nmethod disarmed value.
> Unlike 64-bits, 32-bits platform does not have a dedicated register 
> for current thread. So that it is cheaper to read disarmed value from 
> global location than from per-thread GC data.
> Currently, only Shenandoah GC uses the implementation for its 
> concurrent class unloading. This implementation, along with Shenandoah 
> concurrent class unloading, has been baked in shenandoah/jdk repo for 
> some time now,  they are ready for integration.
> Bug: https://bugs.openjdk.java.net/browse/JDK-8230765
> Webrev: http://cr.openjdk.java.net/~zgu/JDK-8230765/webrev.01/
> Test:
>   hotspot_gc with x86_64 and x86_32 JVM on Linux
>   Submit test.
> Thanks,
> -Zhengyu

More information about the hotspot-gc-dev mailing list