< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp
Print this page
rev 55339 : 8225582: Shenandoah: Enable concurrent evacuation of JNIHandles and CLDG roots
*** 212,222 ****
_terminator(terminator),
_heap(ShenandoahHeap::heap()) {}
void work(uint worker_id) {
ShenandoahConcurrentWorkerSession worker_session(worker_id);
! ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers);
ShenandoahEvacOOMScope oom_evac_scope;
ShenandoahTraversalGC* traversal_gc = _heap->traversal_gc();
// Drain all outstanding work in queues.
traversal_gc->main_loop(worker_id, _terminator, true);
--- 212,222 ----
_terminator(terminator),
_heap(ShenandoahHeap::heap()) {}
void work(uint worker_id) {
ShenandoahConcurrentWorkerSession worker_session(worker_id);
! ShenandoahSuspendibleThreadSetJoiner stsj;
ShenandoahEvacOOMScope oom_evac_scope;
ShenandoahTraversalGC* traversal_gc = _heap->traversal_gc();
// Drain all outstanding work in queues.
traversal_gc->main_loop(worker_id, _terminator, true);
*** 532,542 ****
}
if (work == 0) {
// No more work, try to terminate
ShenandoahEvacOOMScopeLeaver oom_scope_leaver;
! ShenandoahSuspendibleThreadSetLeaver stsl(sts_yield && ShenandoahSuspendibleWorkers);
ShenandoahTerminationTimingsTracker term_tracker(worker_id);
ShenandoahTerminatorTerminator tt(_heap);
if (terminator->offer_termination(&tt)) return;
}
--- 532,542 ----
}
if (work == 0) {
// No more work, try to terminate
ShenandoahEvacOOMScopeLeaver oom_scope_leaver;
! ShenandoahSuspendibleThreadSetLeaver stsl(sts_yield);
ShenandoahTerminationTimingsTracker term_tracker(worker_id);
ShenandoahTerminatorTerminator tt(_heap);
if (terminator->offer_termination(&tt)) return;
}
*** 845,855 ****
_rp(rp) {}
void work(uint worker_id) {
assert(worker_id == 0, "The code below is single-threaded, only one worker is expected");
ShenandoahParallelWorkerSession worker_session(worker_id);
! ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers);
ShenandoahEvacOOMScope oom_evac_scope;
ShenandoahHeap* sh = ShenandoahHeap::heap();
ShenandoahObjToScanQueue* q = sh->traversal_gc()->task_queues()->queue(worker_id);
--- 845,855 ----
_rp(rp) {}
void work(uint worker_id) {
assert(worker_id == 0, "The code below is single-threaded, only one worker is expected");
ShenandoahParallelWorkerSession worker_session(worker_id);
! ShenandoahSuspendibleThreadSetJoiner stsj;
ShenandoahEvacOOMScope oom_evac_scope;
ShenandoahHeap* sh = ShenandoahHeap::heap();
ShenandoahObjToScanQueue* q = sh->traversal_gc()->task_queues()->queue(worker_id);
< prev index next >