# HG changeset patch # User lkorinth # Date 1510583297 -3600 # Node ID b936dd383b252a4687fcae91e6f707e64b311d92 # Parent cce885f4baab77a5ef32cdb36ce1d7d3688127a8 8190408: Run G1CMRemarkTask with the appropriate amount of threads instead of starting up everyone Reviewed-by: tschatzl, sjohanss diff -r cce885f4baab -r b936dd383b25 src/hotspot/share/gc/g1/g1ConcurrentMark.cpp --- a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp Wed Nov 22 14:53:20 2017 +0100 +++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp Mon Nov 13 15:28:17 2017 +0100 @@ -1756,28 +1756,24 @@ G1ConcurrentMark* _cm; public: void work(uint worker_id) { - // Since all available tasks are actually started, we should - // only proceed if we're supposed to be active. - if (worker_id < _cm->active_tasks()) { - G1CMTask* task = _cm->task(worker_id); - task->record_start_time(); - { - ResourceMark rm; - HandleMark hm; - - G1RemarkThreadsClosure threads_f(G1CollectedHeap::heap(), task); - Threads::threads_do(&threads_f); - } - - do { - task->do_marking_step(1000000000.0 /* something very large */, - true /* do_termination */, - false /* is_serial */); - } while (task->has_aborted() && !_cm->has_overflown()); - // If we overflow, then we do not want to restart. We instead - // want to abort remark and do concurrent marking again. - task->record_end_time(); + G1CMTask* task = _cm->task(worker_id); + task->record_start_time(); + { + ResourceMark rm; + HandleMark hm; + + G1RemarkThreadsClosure threads_f(G1CollectedHeap::heap(), task); + Threads::threads_do(&threads_f); } + + do { + task->do_marking_step(1000000000.0 /* something very large */, + true /* do_termination */, + false /* is_serial */); + } while (task->has_aborted() && !_cm->has_overflown()); + // If we overflow, then we do not want to restart. We instead + // want to abort remark and do concurrent marking again. + task->record_end_time(); } G1CMRemarkTask(G1ConcurrentMark* cm, uint active_workers) :