Top


定義場所(file name)

hotspot/src/share/vm/services/memoryService.cpp

名前(function name)

void MemoryService::set_universe_heap(CollectedHeap* heap) {

本体部(body)

  {- -------------------------------------------
  (1) ヒープの種類 (CollectedHeap のどのサブクラスか) に応じて
      使用する MemoryManager や MemoryPool が異なる.
      以下の switch 文で, 適切な MemoryManager/MemoryPool を生成する関数を呼び分けている.

      * GenCollectedHeap の場合:
        MemoryService::add_gen_collected_heap_info()
      * ParallelScavengeHeap の場合:
        MemoryService::add_parallel_scavenge_heap_info()
      * G1CollectedHeap の場合:
        MemoryService::add_g1_heap_info()
      ---------------------------------------- -}

      CollectedHeap::Name kind = heap->kind();
      switch (kind) {
        case CollectedHeap::GenCollectedHeap : {
          add_gen_collected_heap_info(GenCollectedHeap::heap());
          break;
        }
    #ifndef SERIALGC
        case CollectedHeap::ParallelScavengeHeap : {
          add_parallel_scavenge_heap_info(ParallelScavengeHeap::heap());
          break;
        }
        case CollectedHeap::G1CollectedHeap : {
          add_g1_heap_info(G1CollectedHeap::heap());
          break;
        }
    #endif // SERIALGC
        default: {
          guarantee(false, "Unrecognized kind of heap");
        }
      }

  {- -------------------------------------------
  (1) GcThreadCountClosure で GC スレッドの数を数え (以下の count), 
      GCMemoryManager::set_num_gc_threads() で
      _minor_gc_manager と _major_gc_manager 内にスレッド数を登録しておく.
      ---------------------------------------- -}

      // set the GC thread count
      GcThreadCountClosure gctcc;
      heap->gc_threads_do(&gctcc);
      int count = gctcc.count();
      if (count > 0) {
        _minor_gc_manager->set_num_gc_threads(count);
        _major_gc_manager->set_num_gc_threads(count);
      }

  {- -------------------------------------------
  (1) GCMemoryManager::initialize_gc_stat_info() で, 
      _minor_gc_manager と _major_gc_manager 内の GCStatInfo をを初期化しておく.
      ---------------------------------------- -}

      // All memory pools and memory managers are initialized.
      //
      _minor_gc_manager->initialize_gc_stat_info();
      _major_gc_manager->initialize_gc_stat_info();
    }

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