Top


定義場所(file name)

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

名前(function name)

void PtrQueue::flush() {

本体部(body)

  {- -------------------------------------------
  (1) 条件に合わせて, 以下のどれかの処理を行う.

      * この PtrQueue オブジェクトが永続的に存在するオブジェクトである場合 (= _perm が true の場合), 
        もしくはバッファ(_buf)を持っていない場合 (= _buf が NULL の場合):

        何もしない.

      * 上記以外の場合で, バッファ(_buf)は持っているが中身が空の場合 (= _index と _sz が等しい場合):

        PtrQueueSet::deallocate_buffer() でバッファを解放する.
        (ついでに, _buf フィールドと _index フィールドを NULL/0 に戻しておく)

      * 上記以外の場合: (= 永続的に存在するオブジェクトではなく, バッファ(_buf)を持っており中身もある場合):

        未使用の部分を NULL で埋めた後, 
        PtrQueueSet::enqueue_complete_buffer() を呼んで
        対応する PtrQueueSet に登録する.
        (その後, ついでに _buf フィールドと _index フィールドを NULL/0 に戻しておく)
      ---------------------------------------- -}

      if (!_perm && _buf != NULL) {
        if (_index == _sz) {
          // No work to do.
          qset()->deallocate_buffer(_buf);
        } else {
          // We must NULL out the unused entries, then enqueue.
          for (size_t i = 0; i < _index; i += oopSize) {
            _buf[byte_index_to_index((int)i)] = NULL;
          }
          qset()->enqueue_complete_buffer(_buf);
        }
        _buf = NULL;
        _index = 0;
      }
    }

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