RFR (XS) 8246433: Shenandoah: walk roots in more efficient order in ShenandoahRootUpdater

Aleksey Shipilev shade at redhat.com
Wed Jun 3 10:45:24 UTC 2020


RFE:
  https://bugs.openjdk.java.net/browse/JDK-8246433

Missed the spot in ShenandoahRootUpdater while doing JDK-8246100.

Fix:

diff -r d0d06b8be678 src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp
--- a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp        Fri May 29 11:58:00
2020 +0200
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp        Wed Jun 03 12:44:47
2020 +0200
@@ -237,18 +237,21 @@
                                   static_cast<CodeBlobToOopClosure*>(&blobs_and_disarm_Cl) :
                                   static_cast<CodeBlobToOopClosure*>(&update_blobs);

   CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong);

+  // Process serial-claiming roots first
   _serial_roots.oops_do(keep_alive, worker_id);
+  _serial_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);
+
+  // Process light-weight/limited parallel roots then
   _vm_roots.oops_do(keep_alive, worker_id);
+  _weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);
+  _dedup_roots.oops_do(is_alive, keep_alive, worker_id);
+  _cld_roots.cld_do(&clds, worker_id);

-  _cld_roots.cld_do(&clds, worker_id);
+  // Process heavy-weight/fully parallel roots the last
   _code_roots.code_blobs_do(codes_cl, worker_id);
   _thread_roots.oops_do(keep_alive, NULL, worker_id);
-
-  _serial_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);
-  _weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);
-  _dedup_roots.oops_do(is_alive, keep_alive, worker_id);
 }

 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP

Testing: hotspot_gc_shenandoah

-- 
Thanks,
-Aleksey




More information about the hotspot-gc-dev mailing list