当我将GC算法设置为CMS时,我知道它会导致内存碎片。
但是我找不到任何信息来说明当分配由于内存碎片而失败时内存中会发生什么?
是不是让世界停止了很长一段时间?或者只是扔 OOME?
我很欣赏你
最佳答案
CMS 算法使用空闲列表来记录堆中可用空间的位置。正如你所说,随着时间的推移,老一代。堆变得碎片化。当这达到 JVM 认为有必要的程度时(即,为对象找到空间变得越来越困难),它将执行完全停止世界的压缩收集。发生这种情况时,您此时可能会遇到应用程序严重暂停的情况。暂停的长度与老年代的大小成正比,而不是与有多少实时数据成正比。
如果收集器无法回收足够的空间来应对年轻代中对象的提升速度,则会出现 OOM 异常。
G1 也会发生这种情况,但通常情况下较少发生。
关于java - CMS gc 算法中由于严重内存碎片而无法分配内存会发生什么情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52194911/