JVM新一代的垃圾回收算法

文章探讨了传统分代垃圾回收在实时性方面的局限性,特别是Full GC导致的应用暂停问题。增量收集作为一种解决方案,通过边使用边收集减少暂停时间。G1(Garbage First)作为新一代的垃圾回收器,旨在支持大型应用,提供高吞吐量和可配置的最大暂停时间,以满足实时性要求。然而,G1在追求实时性的同时,可能会牺牲一定的性能。
摘要由CSDN通过智能技术生成

传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在几百甚至几十毫秒以内,如果分代垃圾回收方式要达到这个指标,只能把最大堆的设置限制在一个相对较小范围内,但是这样又限制了应用本身的处理能力,同样也是不可接收的。 分代垃圾回收方式确实也考虑了实时性要求而提供了并发回收器,支持最大暂停时间的设置,但是受限于分代垃圾回收的内存划分模型,其效果也不是很理想。 为了达到实时性的要求(其实Java语言最初的设计也是在嵌入式系统上的),一种新垃圾回收方式呼之欲出,它既支持短的暂停时间,又支持大的内存空间分配。可以很好的解决传统分代方式带来的问题。增量收集的演进 增量收集的方式在理论上可以解决传统分代方式带来的问题。增量收集把堆空间划分成一系列内存块,使用时,先使用其中一部分(不会全部用完),垃圾收集时把之前用掉的空间中的存活对象再放到后面没有用的空间中,这样可以实现边使用边收集的效果,避免出现传统分代方式中,整个使用完了再暂停回收的情况。 当然,传统分代收集方式也提供了并发收集,但是他有一个很致命的地方,就是把整个堆做为一个内存块,这样一方面会造成碎片(无法压缩),另一方面他的每次收集都是对整个堆的收集,无法进行选择,在暂停时间的控制上还是很弱。而增量方式,通过内存空间的分块,恰恰可以解决上面问题。Garbage Firest(G1)这部分的内容主要参考这里,这篇文章算是对G1算法论文的解读目标从设计目标看G1完全是为了大型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值