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 hotspot-gc-dev mailing list