G1垃圾回收器介绍
G1垃圾回收器在我们设置堆内存大小后,JVM启动在默认情况下把堆内存拆分为大小均等的region具体大小是—堆内存/2048。region大小是2的倍数。
可以通过 “-XX:G1HeapRegionSize” 设置region大小。
region 数量是动态的。初始的时候新生代region只有5%,会随着新生代增加region跟着增加。 垃圾回收后也会减少。默认新生代的占比不会超过60%,可以通过**“- XX:G1MaxNewSizePercent”**设置
新生代
新生代也是有eden区 s1,s2 的区别的他们的数量也是根据region的增加而增加,也是根据一定比例来决定的。“-XX:SurvivorRatio=8”
什么时候进入老年代
- 当年龄到了会进入老年代,年龄设置**“-XX:MaxTenuringThreshold”** 默认15
- 动态年龄规划或某一次发生GC后存货对象大于s区一半。
大对象去哪了
G1 会有专门的region 存放大对象,甚至一个大对象可以放几个region。由于新生代region是逐渐变大,所以大对象是在还没分配新生代的时候,region 就是用来存放大对象的。新生代 老年代GC 都会来回收大对象。
G1垃圾回收的过程
- 初始标记:先STW,然后对各个线程栈内存中的局部变量代表的GC Roots,以及方法区中的类静态变量代表的GC Roots,进行扫描,标记出来他们直接引用的那些对象。

本文详细介绍了JVM的G1垃圾回收器,包括其区域划分、新生代与老年代的管理、垃圾回收过程以及何时触发混合垃圾回收。讨论了G1如何控制停顿时间和避免内存碎片,与parnew+CMS的对比,并提供了关键参数的解释和调整建议。
2万+

被折叠的 条评论
为什么被折叠?



