老年代垃圾收集器

上一篇介绍了新生代垃圾收集器,接着说老年代垃圾收集器

Serial Old 收集器
Serial/Serial Old  运行示意图
Serial Old 是 Serial收集器的老年代版本,同样是一个单线程收集器,使用“标记-整理”算法。它的主要意义也是在于给Client模式下的虚拟机使用。如果在Server模式下,主要有两大用途:其一是在JDK1.5以及之前的版本中与Parallel Scavenge收集器搭配使用。其二作为CMS收集器的后备预案,之后系列文章会单独说这个。

Parallel Old
Parallel Old 是Parallel Scavenge收集器的老年代版本。使用多线程和“标记-整理”算法。吞吐量优先,工作过程如下图
在这里插入图片描述
CMS收集器

CMS(Concurrent Mark Sweep)收集器,以获取最短的GC停顿这目标。如果应用注重响应速度,希望系统停顿时间最短,CMS收集器很符合这样的场景,采用“标记-清除”算法。运作过程稍复杂,分为初始标记、并发标记、重新标记和并发清除。前两个步骤,仍会“Stop The Word”,但总体上来说,内存回收与用户线程是并发执行的。
在这里插入图片描述
CMS是一款优秀的收集器,特点是并发收集、低停顿。也存在缺点,如对CPU资源非常敏感。CMS收集器无法处理浮动垃圾,可能出现“Current Mode Failure”而导致 Full GC。(-XX:CMSInitiatingOccupancyFraction 参数适当提高,可降低内存回收次数,性能可提高。若过高容易导致 Concurrent Mode Failure)
另外,CMS采用标记-清除算法,会产生内存碎片。解决这个问题,它提供了一个-XX:+UseCMSCompactAtFullCollection开关参数,FullGC时开启碎片合并整理。-XX:CMSFullGCBeforeCompaction,这个参数是执行多少次不压缩的FullGC后,跟着来一次压缩的。

G1收集器

G1是一款面向服务端应用的垃圾收集器,是收集器技术发展的最前沿成果之一。特点如下

并行与并发:能充分利用多CPU、多核环境下的硬件优势,缩短了Stop The Word停顿时间。Java程序和垃圾收集可以并发执行。

分代收集:GC虽然可以不需要其他收集器配合就能独立管理整个GC堆,但它能够采用不同的方式处理新创建的对象和旧对象,以获取更好的收集效果。

空间整合:从整体来看是基于“标记-整理”算法实现,从局部来看是基于“复制”算法来实现。动作期间不会产生内存碎片

可预测停顿:G1除了追求低停顿处,还能建立可预测的停顿时间模型,能让使用者指定一个长度为M毫秒的时间内,消耗在垃圾收集上的时间不得超过N毫秒。G1避免全在java堆栈的全区域进行垃圾回收,而是将堆栈划分为不同的区域(Region),跟踪各个Region里垃圾堆积的价值大小,在后台维护一个优先级列表。优先回收价值最大的Region,从而实现在有限的时间内,获取尽可能大的收集效率。
在这里插入图片描述
运作过程大致可以分为以下几步骤:初始标记、并发标记、最终标记、筛选回收

新生代垃圾收集器点这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值