Up Top

Serviceability 機能 : HotSpot Monitoring and Management Interface (JMM) : JMM のメモリ関係の初期化処理


概要(Summary)

これは java.lang.management.MemoryManagerMXBean 及び java.lang.management.MemoryPoolMXBean を実現するための処理. これらの Platform MXBean は MemoryManager オブジェクト及び MemoryPool オブジェクトによって実現されている.

なお, これらのオブジェクトは HotSpot の初期化時に生成される.

また, 管理対象には Java ヒープと CodeCache がある. Java ヒープについては, 使用している GC アルゴリズムに応じた MemoryManager オブジェクト及び MemoryPool オブジェクトが用いられる.

備考(Notes)

使用される MemoryManager オブジェクト及び MemoryPool オブジェクトの一覧は以下の通り.

Java ヒープ用の領域

Java ヒープ以外の領域

処理の流れ (概要)(Execution Flows : Summary)

Java ヒープ用の領域の初期化

universe_post_init()
-> MemoryService::set_universe_heap()
   使用する GC アルゴリズムに応じて処理が分かれる.

   * GenCollectedHeap の場合:
     -> MemoryService::add_gen_collected_heap_info()
        (1) Minor GC 用の MemoryManager については, 以下の2択で生成
            * DefNew の場合
              -> MemoryManager::get_copy_memory_manager()
            * ParNew の場合
              -> MemoryManager::get_parnew_memory_manager()

        (2) Major GC 用の MemoryManager については, 以下の2択で生成
            * MSC の場合
              -> MemoryManager::get_msc_memory_manager()
            * CMS の場合
              -> MemoryManager::get_cms_memory_manager()

        (3) New/Old 領域用の MemoryPool は以下のように生成
            -> MemoryService::add_generation_memory_pool()
               * Eden 領域用の MemoryPool
                 -> MemoryService::add_space()
                    (DefNew の場合も ParNew の場合も呼び出す関数は同じ)
               * Survivor 領域用の MemoryPool
                 -> MemoryService::add_survivor_spaces()
                    (DefNew の場合も ParNew の場合も呼び出す関数は同じ)
               * Old 領域用の MemoryPool (MSC の場合)
                 -> MemoryService::add_gen()
               * Old 領域用の MemoryPool (CMS の場合
                 -> MemoryService::add_cms_space()

        (4) Perm 領域用の MemoryPool は以下のように生成
            * MSC の場合
              -> MemoryService::add_compact_perm_gen_memory_pool()
            * CMS の場合
              -> MemoryService::add_cms_perm_gen_memory_pool()

   * ParallelScavengeHeap の場合:
     -> MemoryService::add_parallel_scavenge_heap_info()
        -> MemoryManager::get_psScavenge_memory_manager()
        -> MemoryManager::get_psMarkSweep_memory_manager()
        -> MemoryService::add_psYoung_memory_pool()
        -> MemoryService::add_psOld_memory_pool()
        -> MemoryService::add_psPerm_memory_pool()

   * G1CollectedHeap の場合:
     -> MemoryService::add_g1_heap_info()
        -> MemoryManager::get_g1YoungGen_memory_manager()
        -> MemoryManager::get_g1OldGen_memory_manager()
        -> MemoryService::add_g1YoungGen_memory_pool()
        -> MemoryService::add_g1YoungGen_memory_pool()
        -> MemoryService::add_g1OldGen_memory_pool()
        -> MemoryService::add_g1PermGen_memory_pool()

Java ヒープ以外の領域の初期化

CodeCache::initialize()
-> MemoryService::add_code_heap_memory_pool()
   -> MemoryManager::get_code_cache_memory_manager()

処理の流れ (詳細)(Execution Flows : Details)

MemoryService::set_universe_heap()

See: here for details

MemoryService::add_gen_collected_heap_info()

See: here for details

MemoryManager::get_copy_memory_manager()

See: here for details

MemoryManager::get_parnew_memory_manager()

See: here for details

MemoryManager::get_msc_memory_manager()

See: here for details

MemoryManager::get_cms_memory_manager()

See: here for details

MemoryService::add_generation_memory_pool()

See: here for details

MemoryService::add_space()

See: here for details

MemoryService::add_survivor_spaces()

See: here for details

MemoryService::add_gen()

See: here for details

MemoryService::add_cms_space()

See: here for details

MemoryManager::add_compact_perm_gen_memory_pool()

See: here for details

MemoryManager::add_cms_perm_gen_memory_pool()

See: here for details

MemoryService::add_parallel_scavenge_heap_info()

See: here for details

MemoryManager::get_psScavenge_memory_manager()

See: here for details

MemoryManager::get_psMarkSweep_memory_manager()

See: here for details

MemoryService::add_psYoung_memory_pool()

See: here for details

MemoryService::add_psOld_memory_pool()

See: here for details

MemoryService::add_psPerm_memory_pool()

See: here for details

MemoryService::add_g1_heap_info()

See: here for details

MemoryManager::get_g1YoungGen_memory_manager()

See: here for details

MemoryManager::get_g1OldGen_memory_manager()

See: here for details

MemoryService::add_g1YoungGen_memory_pool()

See: here for details

MemoryService::add_g1OldGen_memory_pool()

See: here for details

MemoryService::add_g1PermGen_memory_pool()

See: here for details

MemoryService::add_code_heap_memory_pool()

See: here for details

MemoryManager::get_code_cache_memory_manager()

See: here for details

MemoryPool::MemoryPool()

See: here for details

CollectedMemoryPool::CollectedMemoryPool()

See: here for details

CodeHeapPool::CodeHeapPool()

See: here for details

G1MemoryPoolSuper::G1MemoryPoolSuper()

See: here for details

G1EdenPool::G1EdenPool()

See: here for details

G1SurvivorPool::G1SurvivorPool()

See: here for details

G1OldGenPool::G1OldGenPool()

See: here for details


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