Top


定義場所(file name)

hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp

名前(function name)

void ConcurrentG1RefineThread::activate() {

本体部(body)

  {- -------------------------------------------
  (1) ConcurrentG1RefineThread::set_active() を呼んで _active フィールドを true に変えた後, 
      _monitor フィールドの Monitor オブジェクトに対して Monitor::notify() を呼び出して
      この ConcurrentG1RefineThread オブジェクトに対応するスレッドを起床させる.

      (ただし, worker_id が 0 番の ConcurrentG1RefineThread の場合だけは, 
       ConcurrentG1RefineThread::set_active() の代わりに
       PtrQueueSet::set_process_completed() を呼んで, 
       DirtyCardQueueSet の _process_completed フィールドを変更する.)

      (See: ConcurrentG1RefineThread::is_active())
      ---------------------------------------- -}

      MutexLockerEx x(_monitor, Mutex::_no_safepoint_check_flag);
      if (_worker_id > 0) {
        if (G1TraceConcRefinement) {
          DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
          gclog_or_tty->print_cr("G1-Refine-activated worker %d, on threshold %d, current %d",
                                 _worker_id, _threshold, (int)dcqs.completed_buffers_num());
        }
        set_active(true);
      } else {
        DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
        dcqs.set_process_completed(true);
      }
      _monitor->notify();
    }

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.