前段时间公司服务器由CMS切换成G1,众所周知,G1因为其特有的region模型,相比于CMS等上一代垃圾收集器,有着并发收集、不会产生大量磁盘碎片(因为其从整体上看是采用复制算法)还有可预测的停顿模型,但有一点我翻阅资料始终没有搞明白。在CMS垃圾收集器中,新生代对象如果年龄达到15(默认的MaxTenuringThreshold)或者对象大小大于直接分配到老年代的阈值,这两类对象会分配到老年代,这是会导致老年代占用空间增大的因素。CMS中YoungGC不会涉及老年代垃圾收集,直到发生FullGC.但这一情况在使用G1垃圾收集器中却有不同,以下是我运行jstat -gc的输出结果:
从图1的红框中我们可以看出,在第23015次YoungGC时,老年代占用空间由546287.7K降到533625K,观察GC日志,也并没有发生mixed gc.所以我想问的是,G1垃圾收集器是如何做到在不发生mixed gc的情况下实现回收老年代垃圾的?
以下是服务器jvm的配置: