Top


定義場所(file name)

hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp

名前(function name)

void RefProcTaskProxy::do_it(GCTaskManager* manager, uint which)
{

本体部(body)

  {- -------------------------------------------
  (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.