< prev index next >

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

Print this page
rev 59458 : 8245827: Shenandoah: Cleanup Shenandoah code root iterators and root scanner
rev 59459 : 8245880: Shenandoah: should not mark all code roots if class unloading is enabled

@@ -172,11 +172,14 @@
       shenandoah_assert_rp_isalive_installed();
     } else {
       rp = NULL;
     }
 
+    if (!heap->unload_classes()) {
     _cm->concurrent_scan_code_roots(worker_id, rp);
+    }
+
     _cm->mark_loop(worker_id, _terminator, rp,
                    true, // cancellable
                    ShenandoahStringDedup::is_enabled()); // perform string dedup
   }
 };

@@ -265,11 +268,12 @@
                                                           do_nmethods ? &blobsCl : NULL);
         Threads::threads_do(&tc);
       }
     }
 
-    if (heap->is_degenerated_gc_in_progress()) {
+    if (heap->is_degenerated_gc_in_progress() &&
+        !heap->unload_classes()) {
       // Degenerated cycle may bypass concurrent cycle, so code roots might not be scanned,
       // let's check here.
       _cm->concurrent_scan_code_roots(worker_id, rp);
     }
 
< prev index next >