jvm - GC垃圾回收器(二) G1垃圾回收器
???G1垃圾回收器和CMS垃圾回收器有什么区别?
G1横跨young old两区(证明:-XX:PrintGCDetails -XX:UseG1GC ,在输出中只能看到garbage first heap和Metaspace,看不到young、old),而CMS用于老年代;
CMS采用老年代采用标记清除,而G1整体上采用标记整理,局部采用复制算法,不会产生内存碎片;
在IDEA配置JVM参数:
结果:
只有两层,新生代+老年代被grabage-first heap一次性拿下(证明了: G1横跨young old两区)
底层原理:
G1是区域化的垃圾收集器,最大好处是化整为零,避免全内存扫描,只需要按照区域来进行扫描即可。
G1的回收步骤:
四步过程,和CMS类似:
常用参数配置:
G1的STW更可控,G1在停顿时间上添加了预测机制,用户可以指定期望停顿的时间。
一般设置下面几个参数就够了:
G1和CMS相比:
CMS会产生内存碎片是因为它在老年代使用标清算法,没有整理,所以会产生碎片,
而G1整体采用标整,局部采用复制,不会产生碎片。