java如果由于CMS gc算法中的关键内存碎片而无法分配内存,会发生什么情况 1 年,4 月 Questions & Answers 53 当我将GC算法设置为CMS时,我知道它会导致内存碎片 但是我找不到任何信息,当分配由于内存碎片而失败时,内存中会发生什么 它会让世界停止很久吗?还是直接扔掉我 我很感激你
# 1 楼答案 CMS算法使用空闲列表记录堆中的可用空间。正如您所说,随着时间的推移,旧的gen.heap会变得支离破碎。当这达到JVM认为必要的程度时(即,越来越难找到对象的空间),它将执行一个“世界压缩”集合的全停。此时,发生这种情况时,您可能会经历一次重大的应用程序暂停。暂停的长度与老一代的大小成正比,而不是与有多少实时数据成正比 如果收集器无法回收足够的空间来应对年轻一代对象的升级速度,则会出现OOM异常 G1也会发生这种情况,尽管通常不太常见
# 1 楼答案
CMS算法使用空闲列表记录堆中的可用空间。正如您所说,随着时间的推移,旧的gen.heap会变得支离破碎。当这达到JVM认为必要的程度时(即,越来越难找到对象的空间),它将执行一个“世界压缩”集合的全停。此时,发生这种情况时,您可能会经历一次重大的应用程序暂停。暂停的长度与老一代的大小成正比,而不是与有多少实时数据成正比
如果收集器无法回收足够的空间来应对年轻一代对象的升级速度,则会出现OOM异常
G1也会发生这种情况,尽管通常不太常见