Top


定義場所(file name)

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

名前(function name)

bool PtrQueueSet::process_or_enqueue_complete_buffer(void** buf) {

本体部(body)

  {- -------------------------------------------
  (1) カレントスレッドが JavaThread で, かつ...#TODO の場合には, 
      PtrQueueSet::mut_process_buffer() (をサブクラスがオーバーライドしたもの) を呼び出して
      この場で処理してしまう.
      成功したら true をリターンする.
      ---------------------------------------- -}

      if (Thread::current()->is_Java_thread()) {
        // We don't lock. It is fine to be epsilon-precise here.
        if (_max_completed_queue == 0 || _max_completed_queue > 0 &&
            _n_completed_buffers >= _max_completed_queue + _completed_queue_padding) {
          bool b = mut_process_buffer(buf);
          if (b) {
            // True here means that the buffer hasn't been deallocated and the caller may reuse it.
            return true;
          }
        }
      }

  {- -------------------------------------------
  (1) 上記以外の場合, あるいは上記のケースだが失敗した場合は, 
      PtrQueueSet::enqueue_complete_buffer() を呼んでバッファを登録した後, 
      false をリターン.
      ---------------------------------------- -}

      // The buffer will be enqueued. The caller will have to get a new one.
      enqueue_complete_buffer(buf);
      return false;
    }

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