深入JVM之G1收集器
一、G1收集器简介
- G1收集器(JDK1.7u4正式出现)
普遍存在:全内存扫描问题。
传统的收集器不能满足高内存高cpu的要求,这才是G1产生的原因。
2.G1区域划分
在G1之中不再区分所谓的年轻代、老年代内存空间,所有的内存空间就是一块。但是要划分出不同的子区域。
二、G1收集策略
虽然在G1收集器里面将整个内存区域都混合在了一起,但是其本身依然也是在小范围内要进行年轻代与老年代的区分,也就是说依然会采用不同的GC方式来处理不同的区域。
G1——年轻代有对象
G1——年轻代对象被回收
所有的垃圾内存的保存区域有可能会被清空后重新分配。
但是老年代的处理流程不一样了,因为任何时候如果要想标注老年代的不用内存空间,都需要进行一些暂停,而G1之中的最大好处它不用进行全内存扫描,只需要按照区域来进行扫描即可。
G1老年代回收
G1——老年代,标记阶段
G1——老年代,根区域扫描
G1——老年代,重新标记阶段
G1——老年代,清理、拷贝阶段
G1——清理完毕
三、G1相关处理参数
清楚了G1的基本运行原理之后,那么下面就需要进行一些G1的配置。(需慎重使用,可能会有一些问题出现)
G1收集器参数
范例:使用G1回收器
java -Xmx10m -Xms10m -XX:+UseG1GC -XX:+PrintGCDetails TestDemo
G1处理和传统的垃圾收集策略是不同的,关键的因素是它将所有的内存进行了子区域的划分。