マルチテラバイトのヒープで ZGC を使用すると、パフォーマンスにいくつかの影響が生じる可能性があります。
1. 低遅延: ZGC は一時停止時間を最小限に抑えるように設計されており、ヒープが大きい場合でもアプリケーションの応答性を維持します。これは、ほとんどのガベージ コレクション作業をアプリケーションと同時に実行することで実現され、一時停止時間は 10 ミリ秒未満になります[3][4]。
2. 高スループット: ZGC は、ガベージ コレクションにかかる時間を最小限に抑えて高スループットを提供するように設計されています。これにより、メモリ使用量が多い状況でもアプリケーションが効率的に実行され続けることが保証されます[2][4]。
3. マルチマッピング: ZGC はマルチマッピングを使用して、異なる範囲の仮想メモリを同じ物理メモリにマッピングします。追加のマッピングによりオペレーティング システムが 3 倍のメモリ使用量を報告する可能性があるため、これによりメモリ使用量が増加する可能性があります[1]。
4. 色付きポインター: ZGC は色付きポインターを使用して、メタデータを 64 ビット ポインターに保存します。これにより、ポインターの参照を解除するときに追加の作業が発生する可能性がありますが、マルチマッピング技術はこのオーバーヘッドを軽減するのに役立ちます[2]。
5. NUMA 対応: ZGC は NUMA 対応となるように設計されており、大規模なヒープと複数の CPU コアを効率的に処理できます。これにより、ガベージ コレクターは利用可能なハードウェア リソースを確実に利用できるようになります[2][4]。
6. チューニング オプション: ZGC には、最大ヒープ サイズや同時 GC スレッド数の設定など、いくつかのチューニング オプションがあります。これらのオプションは、メモリ使用量とガベージ コレクションのパフォーマンスのバランスをとるのに役立ちます[3][4]。
7. 実験的機能: ZGC は実験的な機能であり、有効にするには特定のコマンドライン オプションが必要です。これは、非常に短い一時停止時間を必要とし、大量のメモリ割り当てを処理できるアプリケーションに適しています[1][3]。
要約すると、ZGC をマルチテラバイトのヒープで使用すると、低レイテンシ、高スループット、効率的なメモリ管理が実現できます。ただし、慎重な調整が必要であり、マルチマッピングによりメモリ使用量が増加する可能性があります。
引用:[1] https://stackoverflow.com/questions/62926652/the-java-zgc-garbage-collector-uses-a-lot-of-memory
[2] https://www.opsian.com/blog/javas-new-zgc-is-very-exciting/
[3] https://docs.oracle.com/en/java/javase/11/gctuning/z-garbage-collector1.html
[4] https://developers.redhat.com/articles/2021/11/02/how-choose-best-java-garbage-collector
[5] https://dzone.com/articles/java-z-garbage-collector-zgc-a-deep-dive-with-exam