博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CMS 并发模式失效(Concurrent mode failure)回退到 serial old 收集器
阅读量:2432 次
发布时间:2019-05-10

本文共 849 字,大约阅读时间需要 2 分钟。

我正在分析 GC 暂停问题,我注意到当 CMS 使用并且并发模式失败或手动触发 GC

(通过 System.gc( )) 使用的 STW 收集器似乎不是并行的。
(我知道 ExplicitGCInvokesConcurrent 标志,但它不会解决并发故障)。
我尝试使用 -XX:ParallelGCThreads=… -XX:ParallelCMSThreads=… 但它们似乎没有效果。

我是从下面的 GC 日志行中推断出来的

24.904: [Full GC (System) 24.904: [CMS: 302703K->303056K(2116864K), 1.0847520 secs] 484492K->303056K(2423552K), [CMS Perm : 7528K->7525K(21248K)], 1.0852780 secs] [Times: user=1.04 sys=0.02, real=1.09 secs]

如果它是并行的,“user”将等于 “nThreads” * “real”。
此外,如果我选择 ParallelOld GC,它将正确运行。

我真的不明白为什么CMS的故障转移STW机制不是并行的,不是应该尽快完成工作吗?

您是正确的,并发模式失败会串行执行Full GC。

用于 UseParallelGC/UseParallelOldGC 的 parallel old collector 从未移植到 CMS。由于 UseParallelGC 和 CMS 之间的差异,它的工作量超出了我们的预期。

我认为 G1 的行为也一样(AFAIK G1 的后备收集器是从 CMS 复制的)

是的,G1 的行为相同。 G1 不会将 UseParallelGC 实现用于并行完整收集,但会实现符合 G1 设计的一个。 目前,G1 团队一直专注于实现暂停目标和避免完整收集的更好策略。 最后我听说在并行完整收集之前,至少有一些工作需要完成类卸载(JEP 156)。

转载地址:http://reamb.baihongyu.com/

你可能感兴趣的文章
基于zuul和ribbon的灰度发布方案
查看>>
JVM常用垃圾收集器参数说明
查看>>
MySQL索引基础知识梳理
查看>>
MySQL事务ACID底层实现原理
查看>>
关于MySQL wait_timeout问题记录
查看>>
基础算法面试题---如何用栈实现队列
查看>>
基础算法面试题---如何用队列实现栈(1)
查看>>
基础算法面试题---如何用队列实现栈(2)
查看>>
基础算法面试题---如何数组实现栈和队列
查看>>
API接口安全性设计以及各参数的作用
查看>>
《Netty权威指南 第2版》学习笔记(1)---服务端与客户端开发入门
查看>>
《Netty权威指南 第2版》学习笔记(6)--- HTTP协议开发应用
查看>>
链表算法面试题---删除链表中的重复元素II
查看>>
链表算法面试题---合并两个链表
查看>>
链表算法面试题---旋转链表
查看>>
链表算法面试题---交换链表的节点I
查看>>
链表算法面试题---交换链表的节点II
查看>>
链表算法面试题---链表的插入排序
查看>>
链表算法面试题---链表的归并排序
查看>>
链表算法面试题---合并N个有序链表
查看>>