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

Zhengyu Gu zgu at redhat.com
Fri Jun 14 13:27:37 UTC 2019


Hi Roman,

Could you please take a look (Roland's comments) or if the CR is accurate?

https://bugs.openjdk.java.net/browse/JDK-8225718

Thanks,

-Zhengyu

On 6/12/19 3:11 PM, Roman Kennke wrote:
> 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.
> 
> 
> Roman
> 
>> 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
>>>
> 



More information about the hotspot-gc-dev mailing list