RFR 8225582: Shenandoah: Enable concurrent evacuation of JNIHandles and CLDG roots

Roman Kennke rkennke at redhat.com
Wed Jun 12 19:11:11 UTC 2019

IIRC (!) the IN_NATIVE barriers in C1 and C2 are applied to getClass()
intrinsic, which loads and unwraps the Class object from an obj via the
Klass*. If the Klass* -> mirror reference is part of the CLDG roots (I
don't know if that is the case), then you're gonna need the C1 and C2
barriers for concurrent evacuation of CLDG roots, otherwise you might
leak from-space oops (the Class objects) in the getClass() intrinsics.


> Hi Roman,
> This patch does not deal with class unloading, it is still done at final
> mark pause. What it does, is to move evacuate/update refs in CLDs from
> SH::evacuate_and_update_roots() to concurrent phase, and at this point,
> they are strongly reachable.
> I will put this through more tests.
> Thanks,
> -Zhengyu
> On 6/12/19 1:44 PM, Roman Kennke wrote:
>> I suspect you're gonna need the C1 and C2 IN_NATIVE barriers, esp. for
>> the CLDG roots. Should be relatively easy to wire up the LRB barriers
>> there (probably ask shade or roland). It will be more complex to do the
>> other parts and return NULL on unreachable objects, but this is not
>> needed yet. When we do, we should probably just make it call out to
>> runtime.
>> Roman
>>> This is the last sub task of JDK-8225534 [1], that moves evacuation of
>>> JNIHandles and Class Loader Data into concurrent phase. This is the
>>> first step that moves some root processing into concurrent phase, and
>>> this step can be backported to the releases that don't support nmethod
>>> barrier.
>>> 1. Concurrent CLDG root evacuation can not run through safepoints, where
>>> there may also perform CLDG walk, e.g. heap iteration. So it requires
>>> suspendible workers always on, therefore, ShenandoahSuspendibleWorkers
>>> flag is removed, along with related test cases. There are many trivial
>>> changes just because of this flag.
>>> 2. A new concurrent phase "concurrent roots" is added to perform
>>> concurrent JNI and CLDG root evacuation. In Next step, it will also
>>> perform concurrent class unloading and nmethod cleanup.
>>> 3) This patch does not address Traversal GC.
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8225582
>>> Webrev: http://cr.openjdk.java.net/~zgu/JDK-8225582/webrev.00/
>>> Test:
>>>    hotspot_gc_shenandoah (fastdebug and release)
>>> [1] https://bugs.openjdk.java.net/browse/JDK-8225582
>>> Thanks,
>>> -Zhengyu

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://mail.openjdk.java.net/pipermail/hotspot-gc-dev/attachments/20190612/0101e273/signature.asc>

More information about the hotspot-gc-dev mailing list