RFR 8225582: Shenandoah: Enable concurrent evacuation of JNIHandles and CLDG roots
Zhengyu Gu
zgu at redhat.com
Mon Jun 17 12:48:17 UTC 2019
On 6/17/19 6:57 AM, Roman Kennke wrote:
> I am not totally sure, but I don't think JNIHandles need extra handling
> for cleaning, do they?
>
> Also, concurrent marking of JNIHandles is probably easy because they are
> immutable (not sure, please check). IOW, strictly speaking they wouldn't
> need SATB handling, but it doesn't hurt to put this into place for later
> anyway.
I am confused here. This CR only moves evacuation of JNIHandles into
concurrent phase, no marking involved. What do I miss?
Thanks,
-Zhengyu
>
> Roman
>
>> Also, I wonder if we need to deal with CLDG roots here. It seems simpler
>> to only do JNIHandles, which puts in a lot of required infrastructure
>> into place. Then we'd also add concurrent marking of JNIHandles and call
>> that part done. And then we shall probably add weak handles, and with
>> this we have a basis on which to build CLDG processing. What do you think?
>>
>> Roman
>>
>>> Breaking out Suspendible workers changes to JDK-8225813 [1]
>>>
>>> Updated webrev: http://cr.openjdk.java.net/~zgu/JDK-8225582/webrev.01/
>>>
>>> Reran hotspot_gc_shenandoah tests (fastdebug and release)
>>>
>>> Thanks,
>>>
>>> -Zhengyu
>>>
>>>
>>> [1] https://bugs.openjdk.java.net/browse/JDK-8225813
>>>
>>>
>>>
>>> On 6/14/19 3:00 PM, Roman Kennke wrote:
>>>> Maybe makes sense to also break out the suspendible workers part?
>>>>
>>>> Roman
>>>>
>>>>
>>>> Am 14. Juni 2019 20:22:52 MESZ schrieb Zhengyu Gu <zgu at redhat.com>:
>>>>
>>>> So, is this a review?
>>>>
>>>> Thanks,
>>>>
>>>> -Zhengyu
>>>>
>>>> On 6/14/19 10:25 AM, Roman Kennke wrote:
>>>>
>>>> In this case we're good.
>>>> Roman
>>>>
>>>> Am 14. Juni 2019 15:27:37 MESZ schrieb Zhengyu Gu
>>>> <zgu at redhat.com>:
>>>>
>>>> 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
>>>>
>>>>
>>>>
>>>>
>>>> -- Diese Nachricht wurde von meinem Android-Gerät mit
>>>> K-9 Mail
>>>> gesendet.
>>>>
>>>>
>>>> --
>>>> Diese Nachricht wurde von meinem Android-Gerät mit K-9 Mail gesendet.
>>
>
More information about the shenandoah-dev
mailing list