メモリ確保以外の処理パスで発生する GC 処理 (java.lang.System.gc() 等)では, 最終的に CollectedHeap::collect() が呼び出される.
G1CollectedHeap は CollectedHeap::collect() をオーバーライドしているので, 実際に呼び出されるのは G1CollectedHeap::collect() になる. この中で Minor GC または Major GC が実行される.
G1CollectedHeap::collect()
-> * Concurrent Full GC を実行すべき場合:
-> VMThread::execute()
-> (略) (See: here for details)
-> VM_G1IncCollectionPause::doit()
-> (略) (See: here for details)
* Concurrent Full GC の必要はなく, 呼び出し元が GC_locker の場合:
-> VMThread::execute()
-> (略) (See: here for details)
-> VM_G1IncCollectionPause::doit()
-> (略) (See: here for details)
* Concurrent Full GC の必要はなく, 呼び出し元が GC_locker 以外の場合:
-> VMThread::execute()
-> (略) (See: here for details)
-> VM_G1CollectFull::doit()
-> G1CollectedHeap::do_full_collection()
-> G1CollectedHeap::do_collection()
-> (略) (See: here for details)
See: here for details
See: here for details
See: here for details
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.