RFR(L) 8228665: Shenandoah: Implementation of Concurrent nmethod evacuation

Roman Kennke rkennke at redhat.com
Mon Jul 29 16:25:36 UTC 2019


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?
- 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");

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

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

- This change will enable class-unloading on every cycle, is that right?


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