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

时间:2018-09-06 00:23:52

标签: java garbage-collection

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

但是我找不到任何信息,说明由于内存碎片而导致分配失败时内存中会发生什么?

是世界停了很长时间吗?还是只是扔OOME?

谢谢你

1 个答案:

答案 0 :(得分:1)

CMS算法使用空闲列表来记录堆中的可用空间。正如您所说,随着时间的流逝,老一代。堆变得零散。当达到JVM认为有必要的程度时(即,越来越难找到对象的空间),它将执行完整的停止世界压缩。此时,您可能会在这种情况下遇到重大的应用程序暂停。暂停的时间长短与上一代的大小成正比,而不是多少实时数据。

如果收集器无法回收足够的空间来应付年轻一代对象的提升速度,您将获得OOM异常。

G1也会发生这种情况,尽管这种情况通常较少发生。