9 Zガベージ・コレクタ

Zガベージ・コレクタ(ZGC)はスケーラブルな低レイテンシのガベージ・コレクタです。ZGCは、アプリケーション・スレッドの実行を数ミリ秒を超えて停止せずに、負荷が高いすべての作業を同時に実行します。これは、低レイテンシが必要なアプリケーションに適しています。一時休止時間は、使用しているヒープ・サイズとは無関係です。ZGCは8MBから16TBまでのヒープ・サイズをサポートします

Zガベージ・コレクタを有効にするには、コマンド行オプション-XX:+UseZGCを使用します。

ヒープ・サイズの設定

ZGCの最も重要なチューニング・オプションは最大ヒープ・サイズ(-Xmx)を設定することです。ZGCはコンカレント・コレクタであるため、最大ヒープ・サイズを選択するには、1) ヒープにアプリケーションのライブセットを格納できること、2) GCの実行中に割当てを提供できる十分なヘッドルームがヒープ内にあることを確認する必要があります。必要なヘッドルームの容量は、割当て率とアプリケーションのライブセットのサイズによって大きく異なります。通常、ZGCに割り当てるメモリーが多いほどよいとされています。ただし、その一方でメモリーの浪費は望ましくないため、メモリー使用量と必要なGCの実行頻度との間でバランスが取ることが重要です。

並行GCスレッド数の設定

2番目に重要なチューニング・オプションは、並行GCスレッド数(-XX:ConcGCThreads)を設定することです。ZGCには、この数を自動的に選択するためのヒューリスティックがあります。通常、このヒューリスティックは正常に機能しますが、アプリケーションの特性によっては調整が必要な場合があります。基本的に、このオプションではGCに割り当てるCPU時間を指定します。割り当てすぎると、GCによってアプリケーションのCPU時間が過度に奪われることになります。割当てが少なすぎると、GCの収集能力を上回る速度でアプリケーションがガベージを生成する可能性があります。

オペレーティング・システムへの未使用メモリーの戻し

デフォルトでは、ZGCは未使用のメモリーをコミット解除し、オペレーティング・システムに戻します。これは、メモリー・フットプリントが懸念されるアプリケーションおよび環境で役立ちます。この機能は、-XX:-ZUncommitを使用して無効にできます。さらに、ヒープ・サイズが最小ヒープ・サイズ(-Xms)を下回るように、メモリーはコミット解除されません。つまり、最小ヒープ・サイズ(-Xms)が最大ヒープ・サイズ(-Xmx)と等しくなるように構成されている場合、この機能は暗黙的に無効になります。

未コミットの遅延は、-XX:ZUncommitDelay=<seconds>を使用して構成できます(デフォルトは300秒です)。この遅延は、メモリーが未コミットになるまでの未使用期間を指定します。