hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp
void RefProcTaskProxy::do_it(GCTaskManager* manager, uint which)
{
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(Universe::heap()->is_gc_active(), "called outside gc");
{- -------------------------------------------
(1) (トレース出力)
---------------------------------------- -}
NOT_PRODUCT(TraceTime tm("RefProcTask",
PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty));
{- -------------------------------------------
(1) ParCompactionManager::gc_thread_compaction_manager() で,
これを実行している GCTaskThread 用の ParCompactionManager オブジェクトを取得する.
---------------------------------------- -}
ParCompactionManager* cm =
ParCompactionManager::gc_thread_compaction_manager(which);
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);
PSParallelCompact::FollowStackClosure follow_stack_closure(cm);
{- -------------------------------------------
(1) コンストラクタ引数で渡された AbstractRefProcTaskExecutor::ProcessTask オブジェクトに対して,
AbstractRefProcTaskExecutor::ProcessTask::work() を呼び出す.
---------------------------------------- -}
_rp_task.work(_work_id, *PSParallelCompact::is_alive_closure(),
mark_and_push_closure, follow_stack_closure);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.