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

Roman Kennke rkennke at redhat.com
Mon Jun 17 10:57:02 UTC 2019


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.

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.
> 

-------------- 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/20190617/94d94fc4/signature.asc>


More information about the hotspot-gc-dev mailing list