java - CMS gc 算法中由于严重内存碎片而无法分配内存会发生什么情况

标签 java garbage-collection

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

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

是不是让世界停止了很长一段时间?或者只是扔 OOME?

我很欣赏你

最佳答案

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

如果收集器无法回收足够的空间来应对年轻代中对象的提升速度,则会出现 OOM 异常。

G1 也会发生这种情况,但通常情况下较少发生。

关于java - CMS gc 算法中由于严重内存碎片而无法分配内存会发生什么情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52194911/

相关文章:

c# - 未引用的事件 DispatcherTimer 和垃圾收集器

java - Java native 内存比堆快吗?

java - 在 JAVA 中,如何让一个对象只为函数的某些部分存在于内存中?

java - 为 Eclipse 安装 TFS 插件时出现问题

iphone - 添加 subview - Monotouch

java - JDK 11 与 JDK 13 的性能

java - 在 Java 中存储数据

java - 使用javacc解析 block 注释

java - 哪里可以下载 ANT 1.8.3 的预发行版本?

Java - Web 应用程序中的线程同步