关于gc回收中的CMS算法的问题

https://www.cnblogs.com/ggjuc...

这篇文章说:

1 CMS是不会整理堆碎片的,因此为了防止堆碎片引起full gc,通过会开启CMS阶段进行合并碎片选项:

这意思是在CMS进行full gc后,如果有碎片又会引起新的full gc吗?

2 开启-XX:+CMSScavengeBeforeRemark选项,强制remark之前开始一次minor gc,减少remark的暂停时间

为何强制minor gc会减少remark暂停时间?

阅读 1.9k
2 个回答

应该说碎片不是Full GC的直接原因, 内存不够才是. 碎片造成连续内存空间变少, 如果需要分配新的连续大块内存, 则会触发Full GC.

强制minor gc会减少remark暂停时间: 能回收的已经回收掉了, 自然不用再remark了.

问题二,在remark阶段,需要标记出活着的老年代对象。
存在被新生代对象引用的老年代对象,如果新生代对象很多,扫描过程耗时自然很长。
如果先执行一次ygc,gc掉无用的年轻代对象,扫描过程自然就变快了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题