Advertisement

源码之fullGC解析

阅读量:

一.full gc触发的时机

按照国际通用的分析方法,我们首先需要了解full gc的触发条件。对于熟悉笔者先前博客内容的读者而言,这种分析思路应当并不陌生。在研究源码时,找到入口点是关键步骤,而gc算法的入口则直接关联于其触发时机。

实际上,full gc的触发条件主要包括以下几个方面:内存分配失败、对象晋升失败、内存疏散失败、元空间进行垃圾回收以及在调用system.gc时均可能引发full gc。相关的调用关系如下:

复制代码
 //(大对象或内存)申请失败

    
 //年轻代对象晋升老年代的疏散(即回收)失败
    
 //其他原因的疏散(即回收)失败
    
 G1CollectedHeap::mem_allocate
    
 --VM_G1CollectForAllocation::doit()  
    
 ----G1CollectedHeap::satisfy_failed_allocation()
    
 ------G1CollectedHeap::do_collection()
    
  
    
 //入参是GC触发原因:
    
 //other = system.gc
    
 //collect_as_vm_thread = metadata_gc
    
 G1CollectedHeap::colle

全部评论 (0)

还没有任何评论哟~