Minor GC与Full GC

本文介绍了HotSpot VM中GC的分类,包括局部GC(如Young GC、Old GC、Mixed GC)和Full GC。还阐述了CMS算法和G1 GC的构成,以及各种GC的触发原因,如Young GC是eden区满,部分GC与堆使用比率有关,Full GC则是因其他算法不赶趟。

在HotSpot VM的实现,它里面的GC其实准确分类有两种:

1,Parital GC(局部GC):并不收集整个GC堆的模式

  • Young GC:只收集young gen的GC, Young GC也称作"Minor GC"
  • Old GC :只收集old gen 的GC,只有垃圾收集器CMS的concurrent collection是这个模式
  • Mixed GC:收集整个整个young gen以及部分old gen的GC。只有垃圾收集器G1有这个模式

2,Full GC:收集整个堆,包括新生代、老年代、永久代(在JDK1.8后,永久代换为metaspace)等所有部分的模式。

3, CMS算法:ParNew(Young)GC + CMS(Old)GC (piggyback on ParNew的结果/老生代存活下来的object只做记录,不做compaction)+ Full GC for CMS算法(应对核心的CMS GC某些时候的不赶趟,开销很大);

4, G1 GC:Young GC + mixed GC(新生代,再加上部分老生代)+ Full GC for G1 GC算法(应对G1 GC算法某些时候的不赶趟,开销很大);

5.1 各种Young GC的触发原因都是eden区满了;

5.2 Serial Old GC/PS MarkSweep GC/Parallel Old GC的触发则是在要执行Young GC时候预测其promote的object的总size超过老生代剩余size;

5.3 CMS GC的initial marking的触发条件是老生代使用比率超过某值;

5.4 G1 GC的initial marking的触发条件是Heap使用比率超过某值,跟4.3 heuristics 类似;

5.5 Full GC for CMS算法和Full GC for G1 GC算法的触发原因很明显,就是4.3 和 4.4 的fancy算法不赶趟了,只能全局范围大搞一次GC了(相信我,这很慢!这很慢!这很慢!);

6  题主说的 “Full GC会先触发一次Minor GC” - 指的应该是

 

https://www.zhihu.com/question/41922036/answer/93079526


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值