1

これは非常に不可解で、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 に達していました。問題が解決するので、合計メモリが突然増加する可能性がありますが、理解できません。

4

1 に答える 1

2

VMは、10g本当に必要な場合にのみすべてを使用しようとします。指定したので-Xmx10g、これは使用しようとする最大メモリです。プログラムは必要なときに4g以上を割り当てることができませんか?

そして、の出力を確認してください

Runtime.getRuntime().maxMemory()
于 2012-09-14T21:58:26.233 に答える