G1垃圾收集器

G1未来的计划替代CMS,所以作为java程序员都应该学习并深入理解G1。

G1将堆空间划分成了互相独立的区块,每块区域既有可能属于Old区、也有可能是Young区,且每类区域空间可以是不连续的。

为什么old区会有划分成多块了?
因为每个区快可回收的对象都不一样,有的区块可回收的对象较多,有的区块则较少,那么G1会先回收可回收对象较多的区块,这样可以为垃圾回收节约时间。

G1较CMS的优势:
压缩、region避免了内存碎片、内存使用更加灵活(没有固定的区)、设置预期停顿时间、回收内存后做合并空闲内存的操作、G1会在Young区工作。

目前我们项目还是使用CMS作为默认垃圾收集器,但是在一些场景下我们可以使用G1收集器:
服务端多核CPU、JVM内存占用较大的应用、应用在运行过程中会产生大量内存碎片、需要经常压缩空间、想要更可控、可预期的GC停顿周期;防止高并发下应用雪崩现象。

G1的GC过程:
YGC 并发阶段 混合模式 Full GC

sosop hou 01 April 2015
blog comments powered by Disqus