java - JVM:为什么我的 S0C 区域的大小为零?

标签 java scala garbage-collection jvm

我在我的应用程序中看到大量年轻代垃圾收集。这是一个在 openJDK 8u212 上运行的 scala 应用程序。我对正在运行的 docker 容器执行了 jstat,它显示 S0C 区域的大小为零。这可以解释为什么我会得到这么多年轻的 GC,但我不知道为什么会发生这种情况。

S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
 0.0   2048.0  0.0   2048.0 36864.0  31744.0   706560.0   644022.6  93360.0 82013.4 11184.0 9627.5  15299  126.920   0      0.000  126.920

关于如何进一步调查这个问题有什么想法吗?这些是我的 JVM_OPTS。

"-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/mnt/mesos/sandbox/ -Xmx3g -XX:+UseG1GC -XX:+UseStringDeduplication 

我找不到任何可用于控制 S0C 大小的 JVM 选项。

最佳答案

当eden空间满时,触发次要垃圾回收(由eden空间和survivor空间组成)。当触发次要垃圾收集时,未引用的对象(Eden 和 Survivor 中的)将被删除,引用的对象年龄会增加,引用的对象将移动到其他 Survivor 空间。伊甸园和幸存者空间被清除。这个循环一直持续到老化的对象达到一定的年龄阈值。当对象达到一定的年龄阈值时,它们就会从年轻代提升到老年代。 正如霍尔格所说,两个幸存者空间之一永远不能包含对象。

引用文献:

关于java - JVM:为什么我的 S0C 区域的大小为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60657557/

相关文章:

java - 处理两个或多个 noSQL 数据库事务的方法是什么?

java - 比较java中的两个列表

java - 在 Scala 中使用 Java 泛型类会引发错误数量的类型参数错误

java - 为什么G1 Remark阶段的Unloading Action 耗时太长

java - substring() 的垃圾友好替代品

java - 在 Java 中刷新 StringWriter 有什么意义?

java - 如何将元素的内部文本内容映射到 Class 属性?

scala - sbt test:doc找不到任何要链接的成员

scala - Spark Dataframe删除到Elasticsearch

multithreading - Perl 线程中的垃圾收集