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 アプリケーションに最適です。