JVM 性能优化(三)G1 垃圾收集器 (1),java 原理书籍

  1. 第一步:开启 G1 垃圾收集器

  2. 第二步:设置堆的最大内存

  3. 第三步:设置最大的停顿时间

G1 中提供了三种模式垃圾回收模式,Young GC、Mixed GC 和 Full GC ,在不同的条件下被触发。

二、原理


G1 垃圾收集器相比于其他收集器而言,最大的区别在于它取消了年轻代、老年代的物理划分,取而代之的是将堆划分为若干个区域(Region),这些区域中包含了有逻辑上的年轻代、老年代区域

这样做的好处就是,我们再也不用单独的空间对每个代进行设置了,不用担心每个代内存是否足够。

在 G1 划分区域中,年轻代垃圾收集器依然采用暂停所有应用线程的方式,将存活对象拷贝到老年代或者 Survivor 空间,G1 收集器通过将对象从一个区域复制到另一个区域,完成了清理工作。

这就意味着,在正常的处理过程中,G1 完成了堆的压缩(至少是部分堆的压缩),这样也就不会有 CMS 内存碎片问题的存在了,

在 G1 中,有一种特殊的区域,叫 Humongous 区域。

  • 如果一个对象占用的空间超过了分区容量 50%以上,G1 收集器就认为这是一个巨型对象

  • 这些巨型对象,默认直接会被分配在老年代,但是如果它是一个短期存在的巨型对象,就会对垃圾收集器造成负面影响。

  • 为了解决这个问题,G1 划分了一个 Humongous 区,它用来专门存放巨型对象,如果一个 H 区装不下一个巨型对象,那么 G1 会寻找连续的 H 分区存储,为了能找到连续的 H 区,有时候不得不启动 Full GC

三、Young GC


Young GC 主要是对 Eden 区进行 GC,它在 Eden 空间耗尽时会被触发。

  • Eden 空间的数据移动到 Survivor 空间中,如果 Survivor 空间不够,Eden 空间的部分数据会直接晋升到年老代空间

  • Survivor 区的数据移动到新的 Survivor 区中,也有部分数据晋升到老年代空间中

  • 最终 Eden 空间的数据为空,GC 停止工作,应用线程继续执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值