JVM调优学习之旅-(4)G1

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

G1垃圾回收器介绍

G1垃圾回收器在我们设置堆内存大小后,JVM启动在默认情况下把堆内存拆分为大小均等的region具体大小是—堆内存/2048。region大小是2的倍数。

可以通过 “-XX:G1HeapRegionSize” 设置region大小。

region 数量是动态的。初始的时候新生代region只有5%,会随着新生代增加region跟着增加。 垃圾回收后也会减少。默认新生代的占比不会超过60%,可以通过**“- XX:G1MaxNewSizePercent”**设置

新生代

新生代也是有eden区 s1,s2 的区别的他们的数量也是根据region的增加而增加,也是根据一定比例来决定的。“-XX:SurvivorRatio=8”

什么时候进入老年代
  1. 当年龄到了会进入老年代,年龄设置**“-XX:MaxTenuringThreshold”** 默认15
  2. 动态年龄规划或某一次发生GC后存货对象大于s区一半。
大对象去哪了

G1 会有专门的region 存放大对象,甚至一个大对象可以放几个region。由于新生代region是逐渐变大,所以大对象是在还没分配新生代的时候,region 就是用来存放大对象的。新生代 老年代GC 都会来回收大对象。

G1垃圾回收的过程
  1. 初始标记:先STW,然后对各个线程栈内存中的局部变量代表的GC Roots,以及方法区中的类静态变量代表的GC Roots,进行扫描,标记出来他们直接引用的那些对象。
  2. 并发标记:通过gc roots 追踪全部对象。并且会标记在这期间有哪些对象修改。(比如说哪个对象被新建了,哪个对象失去了引用)
  3. 最终标记阶段:先STW,但是会根据并发标记 阶段记录的 那些对象修改,最终标记一下有哪些存活对象,有哪些是垃圾对象。
  4. 混合回收阶段:会STW,这个阶段会计算老年代中每个Region中的存活对象数量,存活对
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值