hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp
void GCTaskManager::execute_and_wait(GCTaskQueue* list) {
{- -------------------------------------------
(1) 実行する GCTask 群に WaitForBarrierGCTask を追加しておく.
---------------------------------------- -}
WaitForBarrierGCTask* fin = WaitForBarrierGCTask::create();
list->enqueue(fin);
{- -------------------------------------------
(1) GCTaskManager::add_list() で, GCTask をキューに追加して GCTaskThread 達に実行させる.
---------------------------------------- -}
add_list(list);
{- -------------------------------------------
(1) WaitForBarrierGCTask::wait_for() で GCTask が全て実行されるまで待機する.
待機が解けたら, WaitForBarrierGCTask オブジェクトを破棄して終了.
---------------------------------------- -}
fin->wait_for();
// We have to release the barrier tasks!
WaitForBarrierGCTask::destroy(fin);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.