hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp
void ConcurrentG1RefineThread::activate() {
{- -------------------------------------------
(1) ConcurrentG1RefineThread::set_active() を呼んで _active フィールドを true に変えた後,
_monitor フィールドの Monitor オブジェクトに対して Monitor::notify() を呼び出して
この ConcurrentG1RefineThread オブジェクトに対応するスレッドを起床させる.
(ただし, worker_id が 0 番の ConcurrentG1RefineThread の場合だけは,
ConcurrentG1RefineThread::set_active() の代わりに
PtrQueueSet::set_process_completed() を呼んで,
DirtyCardQueueSet の _process_completed フィールドを変更する.)
(See: ConcurrentG1RefineThread::is_active())
---------------------------------------- -}
MutexLockerEx x(_monitor, Mutex::_no_safepoint_check_flag);
if (_worker_id > 0) {
if (G1TraceConcRefinement) {
DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
gclog_or_tty->print_cr("G1-Refine-activated worker %d, on threshold %d, current %d",
_worker_id, _threshold, (int)dcqs.completed_buffers_num());
}
set_active(true);
} else {
DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
dcqs.set_process_completed(true);
}
_monitor->notify();
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.