【Java 8 GC 调优】Garbage-First(G1)

G1 是一个 服务器风格(Server-Style)的垃圾收集器。其适用目标是具有大内存的多处理器计算机。它试图在实现高吞吐量的同时,高概率地满足 GC暂停时间 目标。整个堆操作,如 全局标记,与业务线程同时运行。这可以防止 中断的发生概率 与 堆或存活数据大小 成比例。

G1 通过几种技术实现了 高性能 和 暂停时间 目标。

堆被划分成一些大小相等的区域,每个区域都是一片连续的虚拟内存(virtual memory)空间。G1 会执行一个并发的全局标记阶段,以确定整个堆中对象的存活情况。标记阶段结束后,G1 知道哪些区域大部分是空的(即存活对象较少)。它会首先收集这些区域;这通常会产生大量的可用空间。这也是为什么这种方法会被称为 “G1(Garbage-First)”。顾名思义,G1 将其 收集与压缩 活动集中在充满可回收对象(即垃圾)的区域。G1 使用 “暂停预测模型” 来满足用户定义的暂停时间目标,并基于指定的暂停时间目标选择要收集的区域数量。

G1 将一个或多个区域中的对象复制到单个区域中。在这个过程中会进行压缩并释放内存。此转移操作在多处理器上并行执行,以降低暂停时间,并提高吞吐量。因此,每次GC,G1 都会持续工作,来减少碎片。这超出了前面两种GC的能力。CMS(Concurrent Mark Sweep)不会进行压缩。(并行GC的)并行压缩只会以 整堆 的方式压缩,导致相当长的暂停时间。

需要注意的是,G1 不是 实时收集器。它可以高概率地达到暂停时间目标,但是并不绝对。基于之前收集的数据,G1 会估算出在目标时间内可以收集多少个区域。因此,收集器对于收集区域的成本有一个相当精确的模型,并用它来确定在目标暂停时间内收

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值