これは非常に不可解で、64 ビット OS、64 ビット JDK、16 GB の RAM であり、ヒープに 4 GB 以上を使用することはできません。プログラムを開始する方法は次のとおりです (私のプログラムは Scala ですが、JVM に基づいています)。
/usr/lib64/jvm/java/bin/java -d64 -Xms512m -Xmx10g ...jars go on
そして、プログラム内の合計メモリを読み取ると(Runtime.getRuntime().totalMemory()
)...読み取り値は「4242MB」です。
質問-- JVM に、すでに提供されているメモリ量 (10 GB) を強制的に使用させるにはどうすればよいですか?
java -version
言います:
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)
更新 1
maxMemory
「9102MB」を返すので、違いがどこにあるのか (1GB と 5GB の両方)、最大メモリをすべて使用する方法 (私のプログラムはクラッシュします。これには ~3GB の 2 つのチャンクが必要であり、合計で 4GB では不十分なためです) という問題があります。 )。
更新 2
さて、割り当ての前後にすべての読み取り値を入れてみると、驚いたことに、合計メモリの最初の読み取りは 4GB で、2 回目も 3 回目は 8GB に達していました。問題が解決するので、合計メモリが突然増加する可能性がありますが、理解できません。