JRockit と比較して、Sun の JVM で取得した最大ヒープ サイズに奇妙な動作が見られます。
64 ビット システム (Ubuntu 11.04) の 64 ビット VM で IDEA を実行しています。私がテストしている JVM のバージョンは次のJava HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
とおりapt-get install sun-java6-jdk
ですOracle JRockit(R) (build R28.1.3-11-141760-1.6.0_24-20110301-1432-linux-x86_64, compiled mode)
。
パラメータ -Xms1g -Xmx3g を渡すと、IDEA は、Sun の JVM で 1820M、JRockit で (予想どおり) 3072M の最大ヒープ サイズを報告します。
-Xms2g -Xmx4g を渡すと、IDEA は Sun では 3640M、JRockit では 4096M を報告します。
何が起こっている?それらの神秘的な数字 1820M と 3640M = 2*1820M は何ですか? Sun の JVM を必要な正確なヒープ サイズで実行することはできませんか?
編集:
回答が削除されたので、コメントを元に戻します。現在のサイズではなく、MAX サイズについて話していることに注意してください。ここで質問する前によく調べたので、Xms、Xmx、またはメモリの領域のサイズを指定するその他のパラメーターの意味を教える必要はありません (これらは他の場所で見つけることができます)。 .
EDIT2:
この動作をテストするために、次の簡単なコードを書きました。
public static void main(String[] args) throws Exception {
while (true) {
final Runtime r = Runtime.getRuntime();
System.out.println("r.freeMemory() = " + r.freeMemory()/1024.0/1024);
System.out.println("r.totalMemory() = " + r.totalMemory()/1024.0/1024);
System.out.println("r.maxMemory() = " + r.maxMemory()/1024.0/1024);
Thread.sleep(1000);
}
}
次に、-Xmx100m、-Xmx110m、-Xmx120m などを使用して、Sun の JVM と JRockit の両方でさまざまな値を指定して実行しました。Sun は常に奇妙な値を報告し、maxMemory()
実行間の大きなステップ (30M など) で成長します。JRockit は毎回正確な値を報告しました。