Java 7 中的幸存者大小是多少

what's the Survivor size in Java 7

我有一个最大 1024 MB 堆大小核心转储的 JVM 进程。(在 linux 上打开JDK 7)

当我使用 Yourkit Java Profiler 10.0.6 分析核心转储文件时,我发现该进程在内存不足时仅使用 803 MB 堆。

似乎两个 Survivor 堆使用了 2/9 的堆(或保留)。

我在 Windows 7 上用 JDK 7 进行了测试,jvisualvm(带有 Visual GC 插件)显示一个 Survivor 大小是 Eden 大小的 1/3。

参数为:java -Xms512M -Xmx1024M -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:MaxGCPauseMillis=10000 -XX:+UseCompressedOops

但是我在网上搜索时说默认的Survivor大小是Eden大小的1/8

我无法找到为什么它在我的测试中是 1/3。

在 java 中新创建的对象将被放置在一个名为 Eden space 的内存 space 中。每当 eden space 被填满时,JVM 就会触发一个叫做 minor GC 的东西。 minor GC 存活下来的对象会被移动到一个叫 Survivor Space 的地方。幸存者space的大小称为幸存者大小。

您可以参考 Eden space 使用 -XX:SurvivorRatio=N 调整幸存者大小。您的默认幸存者比率是 8。