当我将GC算法设置为CMS时,我知道它会导致内存碎片。
但是我找不到任何信息,说明由于内存碎片而导致分配失败时内存中会发生什么?
是世界停了很长时间吗?还是只是扔OOME?
谢谢你
答案 0 :(得分:1)
CMS算法使用空闲列表来记录堆中的可用空间。正如您所说,随着时间的流逝,老一代。堆变得零散。当达到JVM认为有必要的程度时(即,越来越难找到对象的空间),它将执行完整的停止世界压缩。此时,您可能会在这种情况下遇到重大的应用程序暂停。暂停的时间长短与上一代的大小成正比,而不是多少实时数据。
如果收集器无法回收足够的空间来应付年轻一代对象的提升速度,您将获得OOM异常。
G1也会发生这种情况,尽管这种情况通常较少发生。