Top


定義場所(file name)

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

名前(function name)

void G1CollectedHeap::free_region_if_empty(HeapRegion* hr,
                                     size_t* pre_used,
                                     FreeRegionList* free_list,
                                     HumongousRegionSet* humongous_proxy_set,
                                     HRRSCleanupTask* hrrs_cleanup_task,
                                     bool par) {

本体部(body)

  {- -------------------------------------------
  (1) 処理対象の HeapRegion に応じて, 以下のどちらかを行う.

      * 直近の GC 以前は空でなかったが, 現在は空になっており, しかも young な HeapRegion ではない場合: 
        G1CollectedHeap::free_humongous_region() または G1CollectedHeap::free_region() を呼んで
        フリーリストにつないでおく.

      * それ以外の場合: 
        その HeapRegion に対応する HeapRegionRemSet に対して
        HeapRegionRemSet::do_cleanup_work() を呼び出し, 
        expand された SparsePRT オブジェクトの情報を
        hrrs_cleanup_task 引数で渡された HRRSCleanupTask オブジェクト内に蓄えておく.
      ---------------------------------------- -}

      if (hr->used() > 0 && hr->max_live_bytes() == 0 && !hr->is_young()) {
        if (hr->isHumongous()) {
          assert(hr->startsHumongous(), "we should only see starts humongous");
          free_humongous_region(hr, pre_used, free_list, humongous_proxy_set, par);
        } else {
          free_region(hr, pre_used, free_list, par);
        }
      } else {
        hr->rem_set()->do_cleanup_work(hrrs_cleanup_task);
      }
    }

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