java gc收集器_[译]Java8官方GC调优指南 --(八)CMS收集器

本套文章是Java8官方GC调优指南的全文翻译,点击查看原文,原文章名称《Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide》

8 Concurrent Mark Sweep (CMS) Collector CMS收集器

使用参数-XX:+UseConcMarkSweepGC来启用CMS收集器。

类似于其他的收集器,CMS收集器也是分代的;minor 和 major都有。CMS收集器尝试通过使用独立的垃圾收集器线程,在应用程序线程执行的同时跟踪可到达的对象,从而减少由于major gc而导致的暂停时间。在每个major gc周期中,CMS收集器在收集开始时暂停所有应用程序线程一小段时间,然后在收集中期再次暂停。第二次停顿往往是两次停顿中较长的停顿。在这两个暂停期间,使用多个线程来执行收集工作。收集的其余部分(包括对活动对象的大部分跟踪和对不可到达对象的清扫)是使用一个或多个收集器线程完成的,此时应用程序自身的线程也在并发执行。minor gc可以与正在进行的major gc循环交叉进行,并以类似于parallel collector的方式进行(特别是,应用程序线程在minor gc期间也会停顿)。

Concurrent Mode Failure 并发模式失败

CMS收集器使用一个或多个垃圾收集器线程,这些线程与应用程序线程同时运行,其目标是在永久代满之前完成对其的收集。如前所述,在正常操作中,CMS收集器在应用程序线程仍然运行的情况下执行大部分跟踪和清除工作,因此应用程序线程只能看到短暂的暂停。然而,如果CMS收集器在tenured区填满之前回收所有不可达对象,或者tenured区的剩余空闲空间已经不足以分配一个新的对象,那么就会产生停顿——所有应用的线程全部停止,直到完成一次Full GC。没办法完成并发收集被称为Concurrent Mode Failure,这表明需要调整CMS收集器参数。如果并发收集被显式垃圾收集(System.gc())或为提供诊断工具提供所需信息,则会报告并发模式中断。

Excessive GC Time and OutOfMemoryError 过长的GC时间和OOM

和平行收集器差不多,不多说

Floating Garbage 漂浮垃圾

CMS收集器与Java HotSpot VM中的所有其他收集器一样,是一种跟踪收集器,它至少标识堆中所有可达对象。用Richard Jones和Rafael D. Lins在他们的书《垃圾收集:自动动态内存算法》中的说法,它是一个增量更新收集器。由于应用程序线程和垃圾收集器线程在major gc期间并发运行,垃圾收集器线程跟踪的对象可能在收集过程结束时就变为不可达的了。这种尚未回收的不可达对象称为Floating Garbage。Floating Garbage的数量取决于并发收集周期的持续时间和应用程序引用更新(也称为突变)的频率。此外,由于young区和tenured区是独立收集的&

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值