什么是Java 7中的幸存者大小

时间:2015-07-03 03:12:31

标签: java garbage-collection jvm

我有一个最大1024 MB堆核心转储的JVM进程。(Linux上的OpenJDK 7)

当我使用Yourkit Java Profiler 10.0.6分析核心转储文件时,我发现该进程在Out Of Memory时仅使用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

但是当我在互联网上搜索时,它表示默认的幸存者大小是伊甸园大小的1/8。

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

1 个答案:

答案 0 :(得分:2)

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

您可以使用 -XX:SurvivorRatio = N 参考伊甸园空间调整幸存者大小。您的默认幸存者比率为8。