2015-07-03 25 views
1

我有一個JVM進程與傾銷最大1024 MB堆大小的核心。(OpenJDK 7的在Linux上)有什麼倖存者大小在Java 7中

當我使用Yourkit Java剖析10.0.6分析的核心轉儲文件,我發現進程只在內存不足時使用803 MB堆。

看來兩個倖存者堆使用堆的2/9(或保留)。

我在Windows 7上使用JDK 7進行了測試,jvisualvm(帶有Visual GC插件)顯示一個倖存者大小是Eden大小的1/3。

的參數是:JAVA -Xms512m -Xmx1024M -XX:+ UseParallelGC -XX:+ UseParallelOldGC -XX:MaxGCPauseMillis = 10000 -XX:+ UseCompressedOops

但是,當我在互聯網上搜索,它說的默認倖存者大小是伊甸園大小的1/8。

我找不到爲什麼它在我的測試中是1/3。

回答

2

在java中新創建的對象將被放置一個稱爲Eden空間的內存空間。每當伊甸園空間被填滿時,JVM觸發一種稱爲次要GC的東西。小GC的倖存者將被移至Survivor Space。倖存者空間的大小稱爲倖存者大小。

您可以使用-XX:SurvivorRatio = N參照Eden空間調整倖存者大小。你的默認倖存者比例是8.

+0

是的,我知道默認比例是8,這意味着倖存者的大小是伊甸園大小的1/8。但是爲什麼在我的測試中它是1/3? – power

相關問題