JVM学习记录—详解G1垃圾回收器

目录

G1回收器模型

新生代Region分配

 ​

新生代如何进行垃圾回收?

新生代进入老年代

大对象问题?


 

本文主要参考狸猫技术窝文章

之前的文章https://blog.csdn.net/e5yrt2/article/details/105540664,大致介绍了JVM相关的垃圾回收器,有CMS、PreNew和G1垃圾回收器。而G1(GarbageFirst)是性能最好,同样也是jdk9默认的垃圾回收器。

G1回收器模型

那么有多少Region?每个Region又有多大?

因为新生代和老年代都会被Region管理,默认来说,Region的大小为分配的堆内存的大小除以2048。

比如分配的堆内存为4G,那么分配到每个Region的大小为2MB。

新生代Region分配

 

JVM中有-XX:G1NewSizePercent 这个配置用来设置初始化时候新生代的比例的。

新生代如何进行垃圾回收?

假设新生代默认分配的是堆内存的60%,那么新生代约占有1200个Region,S1和S2分别有100,具体分配如下图

这时候触发新生代的GC,G1就会用之前说过的复制算法来进行垃圾回收,进入一个“Stop the World”状态,然后把Eden对应的Region中的存活对象放入S1对应的Region中,接着回收掉Eden对应的Region中的垃圾对象 。这个跟之前的回收方式一致。

新生代进入老年代

进入老年代的条件跟原有的一致

1、躲过多次垃圾回收后进入老年代

2、MinorGC后存活对象超过S区的50%

大对象问题?

之前的方案中,大对象会被直接分配到老年代。而在G1回收器中,大对象可以横跨多个Region存放,如下图。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章