1. 描述
- 相对的是youngGC
- 源于Java堆的内存结构:分代,新生代和老年代
- fullGC即在新生代和老年代都进行垃圾回收
2. fullGC的影响
GC过程中导致服务不可用,降低吞吐率
3. 如何降低fullGC带来的影响
fullGC长起来可达到5~6s
从降低fullGC频率和减少fullGC时长的角度,考虑降低其带来的影响
- 减少fullGC时长
- 降低fullGC频率
具体的参数调整,比如:
- 垃圾回收器的选择上:parallelOld多线程一般比serialOld的单线程回收,能加快GC进度,当然也要结合具体机器配置;CMS关注GC停顿时间,PS关注吞吐率,CMS的GC过程大部分与用户线程并发,只有很短暂的停顿,而parallelOld是STW的,综上,优先选择CMS;
- 垃圾回收器参数:parallelOld收集器,设置合理的GC的并行线程数;CMS收集器通过提高老年代使用比例触发fullGC的参数,降低GC频率,但触发阈值过高,有担保失败反而增大GC时间的风险,因为CMS失败后,会使用默认的serialOld收集器重新回收;另外CMS默认使用标记-整理方法(尽管它的名字是mark-sweep),相对标记-清除必然增加了GC时长,但标记-清除算法会产生空间碎片,当大对象无法分配内存时可能会触发一次fullGC,所以可以选择折中的办法,设置在进行一次标记-整理的fullGC之前,先进行m次标记-清除的fullGC这个参数;