Shenandoah と ZGC は、Java アプリケーションに低遅延で効率的なガベージ コレクションを提供するように設計された 2 つの高度なガベージ コレクターです。これらのコレクターを使用する主な利点をいくつか示します。
シェナンドア GC:
1. 短い一時停止時間: Shenandoah GC は、ほとんどのガベージ コレクション作業をアプリケーションと同時に実行することで、一時停止時間を最小限に抑えるように設計されています。これにより、メモリ使用量が多い場合でもアプリケーションの応答性が維持され、良好なパフォーマンスが保証されます[1][3]。
2. 同時圧縮: Shenandoah GC は同時圧縮を実行します。これは、アプリケーションの実行中にヒープを圧縮することを意味します。これにより、フル ガベージ コレクションの一時停止の必要性が減り、ヒープがコンパクトで効率的な状態に保たれます[1][3]。
3. ヒープ サイズに依存しない: Shenandoah GC の一時停止時間はヒープ サイズに依存しません。これは、大幅な一時停止なしで大規模なヒープを処理できることを意味し、大規模なメモリ割り当てを必要とするアプリケーションに適しています[1][3]。
4. 高スループット: Shenandoah GC は、ガベージ コレクションにかかる時間を最小限に抑え、高スループットを提供するように設計されています。これにより、メモリが大量に使用されている状況でもアプリケーションが効率的に実行され続けることが保証されます[1][3]。
ZGC:
1. 低レイテンシ: ZGC は、ガベージ コレクションにかかる時間を最小限に抑えることで、非常に低いレイテンシを実現するように設計されています。これは、ほとんどのガベージ コレクション作業をアプリケーションと同時に実行し、単一世代のリージョン ベースのアプローチを使用することによって実現されます[2]。
2. NUMA 対応: ZGC は NUMA 対応になるように設計されており、大規模なヒープと複数の CPU コアを効率的に処理できます。これにより、ガベージ コレクターは利用可能なハードウェア リソースを確実に利用できるようになります[2]。
3. 高スループット: ZGC は、ガベージ コレクションにかかる時間を最小限に抑えて高スループットを提供するように設計されています。これにより、メモリ使用量が多い状況でもアプリケーションが効率的に実行され続けることが保証されます[2]。
4. 実験的機能: ZGC は実験的な機能であり、有効にするには特定のコマンドライン オプションが必要です。これは、非常に短い一時停止時間を必要とし、大量のメモリ割り当てを処理できるアプリケーションに適しています[2]。
要約すると、Shenandoah と ZGC はどちらも、Java アプリケーションに低遅延で効率的なガベージ コレクションを提供するように設計されています。これらは、高スループットを必要とし、大量のメモリ割り当てを処理できるアプリケーションに適しています。
引用:[1] https://clojure-goes-fast.com/blog/shenandoah-in-production/
[2] https://developers.redhat.com/articles/2021/11/02/how-choose-best-java-garbage-collector
[3] https://www.reddit.com/r/feedthebeast/comments/r24zg4/upgrade_your_java_to_one_that_has_the_shenandoah/
[4] https://stackoverflow.com/questions/64252590/how-does-clr-gc-compare-to-latest-zgc-and-shenandoah-gc-on-jvm
[5] https://www.uber.com/blog/jvm-tuning-garbage-collection/