2009-10-05 6 views

答えて

16

通常、JVMは比較的小さなヒープを割り当てることから始まります。その後、各GCの実行後に、どれくらいの空きヒープメモリがあるかを確認します。空きヒープと総ヒープの比率が小さすぎる場合、JVMはヒープに追加のメモリーを追加します(最大構成ヒープ・サイズまで)。

第2の関連する事実は、再生するメモリが多い場合にGCが最も効率的に動作することです。システムリソース全体の制限(例えば、ページングやスワッピングのトリガ)に遭遇しない限り、小さなヒープよりも大きなヒープで実行すると、アプリケーションのパフォーマンスが向上します。

アプリケーションライターは、アプリが快適に動作するためには、ある程度のヒープ(たとえば4Mb)を必要とする可能性が高いと認識しているとします。このサイズを最小ヒープサイズに設定すると、ヒープが1Mb、2​​Mb、および3MbでいっぱいになったときにJVMがGCを実行する必要がないことを意味します。その結果、JVMはアプリケーションの起動と通常の実行中にガベージコレクタを実行する回数が少なくなり、アプリケーションの起動が高速になり、ユーザーはGCの一時停止回数を減らすことができます。

+1

初期ブートアップヒープ要件の推定にプロファイラが役立つでしょうか? –

+1

直接ではありません。アプリケーションが起動したときに取得されたスナップショットでプロファイラを実行するとします。これは、その時点でオブジェクトがどのように存在しているかを示しますが、1)ブートストラップ時に最大ワーキングセットが何であったか、または2)アプリケーションが動作を開始したときに消費される余分なメモリ量ではありません。要するに、ブートストラップ後のワーキングセットサイズは見積もりが悪い可能性があります。 –

関連する問題