如果由于CMS gc算法中的关键内存碎片而无法分配内存会发生什么

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果由于CMS gc算法中的关键内存碎片而无法分配内存会发生什么相关的知识,希望对你有一定的参考价值。

当我将GC算法设置为CMS时,我知道它可能导致内存碎片化。

但是,由于内存碎片,我找不到任何有关分配失败时内存中会发生什么的信息?

它停止了这个世界很长一段时间了吗?或者只是扔掉OOME?

我感激你

答案

CMS算法使用空闲列表来记录堆中可用空间的位置。正如你所说,随着时间的推移,老一代。堆变得支离破碎。当它达到JVM认为必要的程度时(即越来越难以找到对象的空间),它将执行一个完整的世界紧凑集合。此时,您可能会在发生这种情况时遇到重要的应用程序暂停。暂停的长度与旧一代的大小成正比,而不是有多少实时数据。

如果收集者无法回收足够的空间来应对来自年轻一代的物品的促销率,您将获得OOM例外。

G1也会发生这种情况,尽管通常不常见。

以上是关于如果由于CMS gc算法中的关键内存碎片而无法分配内存会发生什么的主要内容,如果未能解决你的问题,请参考以下文章

CMS垃圾回收器

GC 参数

只是回顾与重要考点之连续内存分配管理

只是回顾与重要考点之连续内存分配管理

GC原理---垃圾收集算法

处理内存池中的碎片?