2012-03-05 5 views
3

もし私がjavaプログラムを実行すると、VMはヒープ用のメモリを最初に割り当てますか?Java VMはヒープを小さくできますか?

使用されるメモリが使用可能になる以上の時間がかかるたびに、ヒープが増加します。

ヒープが小さくなることは可能ですか?

ありがとうございました!

+0

JVMが起動時に最大ヒープサイズを割り当てることに注意してください。 GC後に使用されたヒープが減少すると、メモリはOSに戻されません。 (私が知っている唯一の例外はAzulのZing JVMです) –

答えて

5

ガベージコレクタは、少数のコレクションの後でアプリケーションが要求するメモリが構成されたヒープよりも小さいことを要求した場合、ヒープのサイズを自由に減らすことができます。あなたはヒープサイズ(オレンジシリーズ)は、すべてのGC(青シリーズの低下)した後、基本的には変わり見ることができるように

VisualVM memory

:あなたはabでテストTomcatインスタンスストレスここで、VisualVMの中でこの機能を観察することができます。場合によってはヒープサイズが増加することがあります。 JVMは、実際の使用量に基づいてサイズを自由に調整できます(ここでは、合計ヒープサイズは1Gに設定されています)。

+0

Peter Lawrenceが述べたように、JVMで使用されるヒープサイズは小さくなりますが、実際のOSリソースは解放されません。つまり、プロセスの常駐メモリをチェックすると、これまでのJVMで使用されていた最大ヒープ(Xms、Xmx、ヒープ拡張条件をすべて考慮したもの) – Pavan

0

Javaプロセスは、ヒープの初期メモリ割り当てと、ヒープの最大配置から始まります。これは、-XmsおよびXmxのjvmコマンドライン引数を使用して実行したものです。これらはプロセス実行中は変更できません。

オブジェクトインスタンスによって使用される実際のメモリ量は、ガベージコレクション後に減少する可能性があります。

関連する問題