Skip to content
Permalink
Browse files
8240917: Shenandoah: Avoid scanning thread code roots twice in all ro…
…ot scanner

Reviewed-by: rkennke
  • Loading branch information
zhengyu123 committed Mar 12, 2020
1 parent e5ab701 commit 71e1277fb3d3d60b0b97ef36989b1bab97197d2b
Showing with 5 additions and 3 deletions.
  1. +5 −3 src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp
@@ -226,7 +226,6 @@ void ShenandoahRootScanner<ITR>::roots_do(uint worker_id, OopClosure* oops, CLDC
!ShenandoahHeap::heap()->unload_classes() ||
ShenandoahHeap::heap()->is_traversal_mode(),
"Expect class unloading or traversal when Shenandoah cycle is running");
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
ResourceMark rm;

_serial_roots.oops_do(oops, worker_id);
@@ -238,13 +237,16 @@ void ShenandoahRootScanner<ITR>::roots_do(uint worker_id, OopClosure* oops, CLDC
assert(ShenandoahHeap::heap()->is_concurrent_traversal_in_progress(), "Only possible with traversal GC");
}

_thread_roots.threads_do(&tc_cl, worker_id);

// With ShenandoahConcurrentScanCodeRoots, we avoid scanning the entire code cache here,
// and instead do that in concurrent phase under the relevant lock. This saves init mark
// pause time.
if (code != NULL && !ShenandoahConcurrentScanCodeRoots) {
_code_roots.code_blobs_do(code, worker_id);
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, NULL, tc);
_thread_roots.threads_do(&tc_cl, worker_id);
} else {
ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
_thread_roots.threads_do(&tc_cl, worker_id);
}

AlwaysTrueClosure always_true;

0 comments on commit 71e1277

Please sign in to comment.