アプリケーションをライブ サーバーにデプロイしようとしていますが、現在、jvm のヒープ サイズと permgen サイズを設定する必要があります。私は多くの記事を見てきましたが、そのすべてが「最小ヒープ サイズを (ある数値) に設定する」、「最大ヒープ サイズを (ある数値) に設定する」と言っていますが、これらの記事のどれも実際に理由を述べていません。最小ヒープ サイズを設定する必要があります。最大ヒープ サイズを設定する理由は理解していますが、最小については理解していません。これについて何か光を当てていただければ幸いです。
3 に答える
Java のヒープは、一般的なメモリ割り当て領域です。最小ヒープ サイズを 1000 バイトに設定したとします (これは非常に低い数値です)。ここで、2,000 文字の長さのテキストを含むオブジェクトをプログラムでインスタンス化するとします。最初にヒープ サイズを拡張しないと、このオブジェクトを保存できません。さて、おそらく私の最大ヒープパラメータはこれを可能にするのに十分な大きさですが、それが最大ヒープサイズを設定する理由です。
ただし、サーバーに 4G の RAM があり、最小ヒープ サイズをそれに設定したとします。(とてつもなく大きな数です。) 他のプログラムがメモリを消費しなければ、これでうまくいくでしょう。ただし、Java プログラムで 2 番目のプロセスを開始すると、十分なメモリを割り当てることができず、終了します。
最小サイズは 2 つのことを行います。第 1 に、迅速な起動を可能にするためにメモリをすばやく利用できるようにします。第二に、いくつかの不変条件が得られるように jvm を調整して、実行できるプロセスの数を予測できるようにします。最小ヒープ サイズが大きすぎる場合は、それほど多くを必要としないプロセスでメモリを浪費し、システムの容量を制限している可能性があります。設定が小さすぎると、プログラムの起動に時間がかかり、プロセスのパフォーマンスに悪影響を及ぼします。
最小ヒープサイズを設定すると、Javaが事前にメモリを割り当てることができるため、起動時間が短縮されます。
最小サイズを明示的に (デフォルトより上に) 設定すると、OS レベルでの割り当ての断片化と起動時のパフォーマンスに役立ちます。
Java ヒープは、OS によって割り当てられたメモリに支えられており、初期ブロックが大きいほど、発生する再割り当てと断片化が少なくなります。
最小値を最大値と同じかほぼ同じに設定すると、これらの状況が完全に解消されます。