メモリ確保以外の処理パスで発生する 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.