7.1* 適切なガベージ コレクターを選択する方法
アプリケーションに厳密なレイテンシー要件がない場合は、アプリケーションを実行するだけで、JVM 自体に適切なコレクターを選択させる必要があります。
ほとんどの場合、デフォルト設定で問題なく動作します。必要に応じて、ヒープ サイズを調整してパフォーマンスを向上させることができます。それでもパフォーマンスが期待どおりにならない場合は、アプリケーションの要件に合わせてコレクターを変更してみてください。
- シーケンシャル。アプリケーションのデータ セットが小さい場合 (最大約 100 MB)、および/またはアプリケーションが遅延要件なしで単一のプロセッサ上で実行される場合。
- パラレル。アプリケーションのピーク パフォーマンスが優先され、遅延要件がない場合 (または 1 秒以上の一時停止は許容されます)。
- CMS/G1。全体的なスループットよりも応答時間が重要な場合、ガベージ コレクションの一時停止は 1 秒未満にする必要があります。
- ZGC。応答時間が優先されるか、非常に大きなヒープが関係する場合、あるいはその両方の場合。
7.2* ガベージ コレクションに関する推奨事項
手動トリガーを避ける
ガベージ コレクションの基本メカニズムに加えて、Java のこのプロセスに関する最も重要な点の 1 つは、それが非決定的であるということです。つまり、実行時に正確にいつ発生するかを予測することは不可能です。
System.gc() または Runtime.gc() メソッドを使用すると、ガベージ コレクターを開始するヒントをコードに含めることができますが、これはガベージ コレクターが実際に実行されることを保証するものではありません。
分析ツールを使用する
アプリケーションを実行するのに十分なメモリがない場合、速度の低下、ガベージ コレクション時間の延長、「ワールド ストップ」イベントが発生し、最終的にはメモリ不足エラーが発生します。これはヒープが小さすぎることを示している可能性がありますが、アプリケーションにメモリ リークがあることを示している可能性もあります。
jstat や Java Flight Recorder などの監視ツールを使用すると、ヒープ使用量が無制限に増加するかどうかを確認できます。これは、コードのバグを示している可能性があります。
デフォルト設定を優先します
小規模なスタンドアロン Java アプリケーションがある場合は、おそらくガベージ コレクションを設定する必要はありません。デフォルト設定が役に立ちます。
JVM フラグを使用してカスタマイズする
Java でガベージ コレクションを設定するための最良の方法は、JVM フラグを設定することです。フラグを使用して、ガベージ コレクター (シリアル、G1 など)、ヒープの初期サイズと最大サイズ、ヒープ パーティションのサイズ (若い世代、古い世代など) などを設定できます。もっと。
適切な蛇口を選択してください
初期設定に関する適切なガイドラインは、カスタム アプリケーションの性質です。たとえば、同時ガベージ コレクターは効率的ですが、「ワールド ストップ」イベントを頻繁に発生させるため、長い一時停止が許容される内部処理により適しています。
同時に、CMS ガベージ コレクターは遅延を最小限に抑えるように設計されているため、応答性が重要な Web アプリケーションに最適です。
GO TO FULL VERSION