hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp
ConcurrentG1RefineThread::
ConcurrentG1RefineThread(ConcurrentG1Refine* cg1r, ConcurrentG1RefineThread *next,
int worker_id_offset, int worker_id) :
{- -------------------------------------------
(1) スーパークラスの初期化
---------------------------------------- -}
ConcurrentGCThread(),
{- -------------------------------------------
(1) フィールドの初期化
---------------------------------------- -}
_worker_id_offset(worker_id_offset),
_worker_id(worker_id),
_active(false),
_next(next),
_monitor(NULL),
_cg1r(cg1r),
_vtime_accum(0.0)
{
{- -------------------------------------------
(1) (コメントによると,
各 ConcurrentG1RefineThread はそれぞれ個別の Monitor オブジェクトを保持する.
ただし, 0 版目の ConcurrentG1RefineThread だけは DirtyCardQ_CBL_mon を使用する.
各 ConcurrentG1RefineThread は, 一つ番号の小さい ConcurrentG1RefineThread によって起床される.
起床のタイミングは, 処理が多くスレッド数が足りないと判断された場合.
とのこと)
---------------------------------------- -}
// Each thread has its own monitor. The i-th thread is responsible for signalling
// to thread i+1 if the number of buffers in the queue exceeds a threashold for this
// thread. Monitors are also used to wake up the threads during termination.
// The 0th worker in notified by mutator threads and has a special monitor.
// The last worker is used for young gen rset size sampling.
{- -------------------------------------------
(1) _monitor フィールドを初期化
(0 版目の ConcurrentG1RefineThread は DirtyCardQ_CBL_mon を使用.
その他は新しい Monitor をこの場で作成して使用)
---------------------------------------- -}
if (worker_id > 0) {
_monitor = new Monitor(Mutex::nonleaf, "Refinement monitor", true);
} else {
_monitor = DirtyCardQ_CBL_mon;
}
{- -------------------------------------------
(1) ConcurrentG1RefineThread::initialize() を呼んで,
フィールドの初期化を行う.
---------------------------------------- -}
initialize();
{- -------------------------------------------
(1) ConcurrentGCThread::create_and_start() を呼んで,
新しいスレッドを作り, 実行を開始させる
---------------------------------------- -}
create_and_start();
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.