hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp
void ConcurrentG1RefineThread::run_young_rs_sampling() {
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
{- -------------------------------------------
(1) フィールドの初期化
---------------------------------------- -}
_vtime_start = os::elapsedVTime();
{- -------------------------------------------
(1) (HotSpot が終了するまで(= _should_terminate フィールドが true になるまで) この while ループを実行.
See: ConcurrentG1RefineThread::stop())
---------------------------------------- -}
while(!_should_terminate) {
{- -------------------------------------------
(1.1)
---------------------------------------- -}
_sts.join();
sample_young_list_rs_lengths();
_sts.leave();
{- -------------------------------------------
(1.1) _vtime_accum フィールドの値を更新しておく
---------------------------------------- -}
if (os::supports_vtime()) {
_vtime_accum = (os::elapsedVTime() - _vtime_start);
} else {
_vtime_accum = 0.0;
}
{- -------------------------------------------
(1.1) もし HotSpot が終了していれば(= _should_terminate フィールドが true であれば) この while ループから抜ける.
そうでなければ, Mutex::_no_safepoint_check_flag に対して Monitor::wait() を呼び出して待機する.
---------------------------------------- -}
MutexLockerEx x(_monitor, Mutex::_no_safepoint_check_flag);
if (_should_terminate) {
break;
}
_monitor->wait(Mutex::_no_safepoint_check_flag, G1ConcRefinementServiceIntervalMillis);
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.