什么时候执行GC
当新生代满了的时候触发minor GC当上升到老年代的对象大于剩余空间的时候执行Full GC。当GC与非GC的耗时超过了GCTimeRate的时候会促发OOM程序员不能控制具体的GC时间,只能调用System.gc()提示系统进行GC处理,但是JVM不一定执行。
回收什么对象
在引用技术算法里面,当对象超出了作用域或者对象的引用技术为0时,该对象为垃圾对象。在GC Root算法里面,从GC root开始向下遍历,仍无法搜索到的对象,而且经过依次标记清理依然无法恢复的对象。
做些什么
运行默认的finalize函数,对对象做最后的标记处理。删除垃圾对象,回收内存空间。在新生代里面,我们使用复制清理算法;在老年代里面,我们使用标记清理算法。
如何延迟对象回收或保留对象
增大survivor space、老年代空间。为引用为0的对象增加老年代对他的引用。增大GcTimeRatio,低促发GC的比率。