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