【发布时间】:2020-03-12 15:48:49
【问题描述】:
我在我的应用程序中看到了大量的年轻代垃圾回收。这是一个在 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 空间已满时,你会得到一个 Young GC。 Survivor 空间可能会因为 GC 而被填满,而不是相反。由于在每次 GC 之间,两个幸存者空间之一永远不能包含对象,因此将其报告为零容量并没有错。
-
在 G1GC 的情况下,空格在内存中是不固定的。 G1GC 将堆划分为区域,根据需要将这些区域分配给逻辑空间之一。因此,始终为空的幸存者空间确实与实际的内存区域无关。
-
您使用的是什么 Java 版本(
UseCGroupMemoryLimitForHeap已弃用)以及您有什么 确切GC?这在正确和完整的答案中很重要
标签: java scala garbage-collection jvm