2009-06-14 11 views
12

わかっているように、java -Xmxオプションを使用して、Javaプログラムで使用できる最大ヒープスペースを設定します。しかし、Javaプログラムが設定された値を読み取る方法はありますか? System.getMaximumHeapSpace()(これは存在しません)のようなものです。実行時に最大ヒープスペースを読み込みます

+0

重複http://stackoverflow.com/questions/433406/how-to-get-the-max-sizes-of-the-heap-and-permgen-from-the-jvm? – Pool

+0

プログラマチックでない方法は、JDKから利用可能な 'jmap'ユーティリティを実行することです。構文は 'jmap -heap 'となります。フィールド 'MaxHeapSize'は、そのJavaプロセスで設定された 'Xmx'値を示します。 – asgs

答えて

18

Runtime.maxMemoryがありますが、Java仮想マシンが使用しようとするメモリの最大量が返されますが、JVMの起動時に設定される最大ヒープメモリであるかどうかは不明です。

class MaxMemory { 
    public static void main(String[] args) { 
     System.out.println(Runtime.getRuntime().maxMemory()); 
    } 
} 

実行結果は以下ました:

C:\coobird\>java -Xmx64m MaxMemory 
66650112 

C:\coobird\>java -Xmx128m MaxMemory 
133234688 

これは、Windows上でJava SE 6バージョン1.6.0_12を使用しているだけでテストとして、私は次のプログラムを書いた

値は64 MB(67,108,864バイト)に近く、128 MB(134,217,728バイト)ですが、そうではありません。

+0

私はそれをテストしました。それは-Xmxによって設定された値のようです。ありがとう。 –

+0

それは近いと思われますが、正確に値ではありません。 – coobird

+0

不足しているバイトがPermGenスペース用に予約されている可能性があります –

3

そして私は遠くXmxの値からある値を取得する:* 1024

java -Xmx64m MaxMemory 
59703296 

64 * 1024 * 1024 = 67108864

java -Xmx128m MaxMemory 
119341056 

128×1024 = 134217728

です11%の違い! (あなたはわずか0.7%で、私は勝ちます)。

java -version 
java version "1.6.0_22" 
Java(TM) SE Runtime Environment (build 1.6.0_22-b04) 
Java HotSpot(TM) Server VM (build 17.1-b03, mixed mode) 
running on Linux 2.6 
1

私は同様の結果を参照してください。

-Xmx512mと私は455M

-Xmx1024mと私はManagementFactory.getMemoryMXBeanを(使用して同じ結果を得る910M

をゲット)。getHeapMemoryUsage()

これらの不一致ははるかに大きすぎます無視される。

関連する問題