< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp

Print this page
rev 55429 : 8226311: Shenandoah: Concurrent evacuation of OopStorage backed weak roots

@@ -1519,11 +1519,12 @@
         pacer()->setup_for_evac();
       }
 
       if (ShenandoahVerify) {
         if (ShenandoahConcurrentRoots::should_do_concurrent_roots()) {
-          verifier()->verify_roots_no_forwarded_except(ShenandoahRootVerifier::JNIHandleRoots);
+          ShenandoahRootVerifier::RootTypes types = ShenandoahRootVerifier::combine(ShenandoahRootVerifier::JNIHandleRoots, ShenandoahRootVerifier::WeakRoots);
+          verifier()->verify_roots_no_forwarded_except(types);
         } else {
           verifier()->verify_roots_no_forwarded();
         }
         verifier()->verify_during_evacuation();
       }

@@ -1586,20 +1587,23 @@
 }
 
 class ShenandoahConcurrentRootsEvacUpdateTask : public AbstractGangTask {
 private:
   ShenandoahJNIHandleRoots<true /*concurrent*/>         _jni_roots;
+  ShenandoahWeakRoots<true /*concurrent*/>              _weak_roots;
 
 public:
   ShenandoahConcurrentRootsEvacUpdateTask() :
     AbstractGangTask("Shenandoah Evacuate/Update Concurrent Roots Task") {
   }
 
   void work(uint worker_id) {
     ShenandoahEvacOOMScope oom;
     ShenandoahEvacuateUpdateRootsClosure cl;
+
     _jni_roots.oops_do<ShenandoahEvacuateUpdateRootsClosure>(&cl);
+    _weak_roots.oops_do<ShenandoahEvacuateUpdateRootsClosure>(&cl);
   }
 };
 
 void ShenandoahHeap::op_roots() {
   if (is_evacuation_in_progress() &&
< prev index next >