G1垃圾回收器

在这里插入图片描述

G1把堆内存分成了Region,好多个小块,不区分年轻代和老年代
Region的数量最多为2048个,然后Region的大小必须是2的倍数,比如说
1MB、2MB、4MB之类的。
默认新生代对堆内存的占比是5%这个是可以通过“-XX:G1NewSizePercent”来设置新生代初始占比的,其实维持这个默认值即可。
因为在系统运行中,JVM其实会不停的给新生代增加更多的Region,但是最多新生代的占比不会超过60%,可以通过“-XX:G1MaxNewSizePercent”。
而且一旦Region进行了垃圾回收,此时新生代的Region数量还会减少,这些其实都是动态的。
但是年轻代和老年代的概念还是有的哈
大对象放的话是用多个相连的Region放入

G1最大的一个特点,就是我们设置一个垃圾回收的预期停顿时间
什么意思呢 我设定一个时间 你自己去进行垃圾回收,但不能超出这个时间
那么对象什么时候从新生代进入老年代呢?

  1. 对象在新生代躲过了很多次的垃圾回收,达到了一定的年龄了,“-XX:MaxTenuringThreshold”参数可以设置这个年龄,他就会进入老年代
  2. 动态年龄判定规则,如果一旦发现某次新生代GC过后,存活对象超过了Survivor的50%
    此时就会判断一下,比如年龄为1岁,2岁,3岁,4岁的对象的大小总和超过了Survivor的50%,此时4岁以上的对象全部会进入老年代,这就是动态年龄判定规则
    G1是如何做到对垃圾回收导致的系统停顿可控的
    G1如果要做到这一点,他就必须要追踪每个Region里的回收价值,啥叫做
    回收价值呢?

    他必须搞清楚每个Region里的对象有多少是垃圾,如果对这个Region进行
    垃圾回收,需要耗费多长时间,可以回收掉多少垃圾?
    用最少的时间回收掉最多的垃圾,他自己也会判断 不是有一点垃圾了,我就回收
    用合适的时间 (不超过我设定的值)回收更多的垃圾
    G1垃圾回收的过程
    初始标记
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值