2012-03-15 9 views
1

java -Xmsは、実行中にJavaプロセスが消費するメモリ量に影響していないようです。64ビットJava 1.7は最小ヒープサイズフラグを無視しますか?

私はシステムの観点から約1Gbを消費するアプリを持っています。私は-Xms2048m(と-Xmx4096m)を設定しようとしましたが、メモリ消費量に全く変化は見られませんでした。

ホットスポットのドキュメントでは、Xms値またはデフォルト値によってヒープサイズが下限に達していると主張しています。

私が考えることができる唯一のことは、プロセスが連続したメモリブロックを取得できないため、後で割り当てることができるすべてのものを取得し、その後で割り当てることです。 。 (64ビットのWindows 7)

(私はそれが私が気づいた好奇心だけで何かで、何のためにこれを必要としない)

+0

-Mmxを適切な値(つまり、mx> ms)に設定していますか? – sw1nn

+0

@ sw1nn - はい、mxを4096mに設定しています。 ms> mxの場合、VMが起動するとは思わない。 – marathon

+0

Javaプロセスのメモリ使用量をどのように測定していますか? – prunge

答えて

2

をデフォルトのメモリ使用量のWindowsのタスクマネージャを使用すると、仮想のプロセスに割り当てられているものではありません示していメモリ空間。実際のメモリにマップされなければならなかった仮想空間に実際に書き込まれたプロセスの量です。タスクマネージャの「コミットサイズ」の列を有効にして、プロセスの仮想アドレス空間の観点から実際に「使用済み」と見なされるものを表示する場合。 (およそXms + permsize + VMのサイズとシステムそのもの)

+0

私はそれを今見て、ありがとう、アフェ。 – marathon

0

JVMには、ヒープのための連続したメモリ領域が必要です。つまり、起動時に仮想メモリとして最大サイズを割り当てます。これは、OSがアプリケーションを使用するときにメインメモリをアプリケーションに割り当てるだけなので、音が悪いわけではありません。

VisualVMのようなツールで使用されるメモリの量を見ると、 150〜500MBのオーバーヘッドであっても、サイズが最小サイズよりも小さいことがわかります。これは、Javaがそれを使用していない場合、最小サイズを使用するだけではないためです。

代わりに、最小サイズはメモリのクリーンアップを少ししか行わないポイントです。 (マイナーGCを実行していることがわかります)ほとんどの場合、アプリケーションは最小サイズを非常に迅速に使用します。しかし、 "hello world"プログラムは最小サイズを使用しません。

多分窓からは、それは多くのメモリは、それが連続ブロックとして最大サイズを割り当てることができない場合はJVMの起動に失敗します

で開始することを持たせていません。もし-Xmsを使用することができるのJava2ので-ms-mx

でJava 1つの試みについて

1

(これは限界が1.5 GB又はGB 1.2と低いかもしれないように、32ビットウィンドウの一般的な問題であった)と-Xmx

私の経験は、-msで、 `-mxはJava2でも動作します。 http://www.devx.com/tips/Tip/5578

関連する問題