RFR(L) 8228665: Shenandoah: Implementation of Concurrent nmethod evacuation
Zhengyu Gu
zgu at redhat.com
Mon Jul 29 17:57:08 UTC 2019
On 7/29/19 12:25 PM, Roman Kennke wrote:
> Hi Zhengyu,
>
> First glance (will need to do another review pass later):
>
> - Does it not also need an aarch64 port?
> - Does it also work on x86_32?
Yes, but I guess we have to deal with them later. Let's get Linux x86_64
and Windows 64 in and stabilize them first.
> - src/hotspot/share/gc/shenandoah/shenandoahArguments.cpp:
>
> Why is that change there?
>
> - if (!ClassUnloading ||
> !FLAG_IS_CMDLINE(ClassUnloadingWithConcurrentMark)) {
> + if (!ClassUnloading) {
> log_info(gc)("Consider -XX:+ClassUnloadingWithConcurrentMark if
> large pause times "
> "are observed on class-unloading sensitive workloads");
We do want to honor ClassUnloadingWithConcurrentMark's default value, if
we can do concurrent class unloading.
However, I misplaced this change here, should belong to concurrent class
unloading changeset.
>
> - src/hotspot/share/gc/shenandoah/shenandoahClosures.hpp:
>
> + BarrierSetNMethod* _bs;
>
> Make this BarrierSetNMethod* const _bs. Not sure if it makes a
> difference perf-wise, but it doesn't hurt and might give the compiler a
> hint.
>
Okay.
> - I guess this partly answers the questions above:
>
> +bool ShenandoahConcurrentRoots::can_do_concurrent_nmethods() {
> +#if defined(_LP64) && defined(X86) && (defined(LINUX) || defined(_WINDOWS))
>
> But why do we deal with LINUX and WINDOWS there? Is there anything OS
> specific in this codes?
I guess MacOS X and Solaris X86?
>
> - This change will enable class-unloading on every cycle, is that right?
>
Right. Again, It should belong to next changeset.
Updated: http://cr.openjdk.java.net/~zgu/JDK-8228665/webrev.01/
Reran hotspot_gc_shenandoah tests
Thanks,
-Zhengyu
>
> Thanks a lot for doing this! This is huge!
> Roman
>
>
>> This patch moves nmethod evacuation and disarming into concurrent phase.
>> However, nmethod's liveness is still checked at a pause.
>>
>> This is the last step before we complete concurrent class unloading,
>> where we move class loader and nmethod's liveness check into concurrent
>> evacuation phase.
>>
>> Given the scope of this changes, let's bake it in shenandoah/jdk first,
>> before upstream to jdk/jdk.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8228665
>> Webrev: http://cr.openjdk.java.net/~zgu/JDK-8228665/webrev.00/
>>
>> Test:
>> hotspot_gc_shenandoah (fastdebug and release)
>> specjvm (fastdebug and release)
>>
>> Thanks,
>>
>> -Zhengyu
>
More information about the shenandoah-dev
mailing list