Shenandoah と ZGC の主な使用例は次のとおりです。
シェナンドア GC:
1. 低遅延: Shenandoah は、ほとんどのガベージ コレクション作業をアプリケーションと同時に実行することで、一時停止時間を最小限に抑えるように設計されています。これにより、メモリ使用量が多い場合でもアプリケーションの応答性が維持され、良好なパフォーマンスが保証されます。
2. 高スループット: Shenandoah は、ガベージ コレクションにかかる時間を最小限に抑えて高スループットを提供するように設計されています。これにより、メモリ使用量が多い状況でもアプリケーションが効率的に実行され続けることが保証されます。
3. 大規模なヒープ: Shenandoah は大規模なヒープを効率的に処理できるように設計されており、大規模なメモリ割り当てを必要とするアプリケーションに適しています。
4. 定数割り当て: Shenandoah は、オブジェクトの定数割り当てと使用を効率的に処理できるため、アプリケーションに適しています。
5. 古いオブジェクト: Shenandoah は、オブジェクトが古く、新しいオブジェクトを作成するオーバーヘッドが小さいアプリケーションに適しています。これは、これを効率的に処理できるためです。
6. コンテナの使用法: Shenandoah はコンテナ化された環境でも使用できますが、それは特定のユースケースによって異なります。
ZGC:
1. 低遅延: ZGC は、ほとんどのガベージ コレクション作業をアプリケーションと同時に実行することで、一時停止時間を最小限に抑えるように設計されています。これにより、メモリ使用量が多い場合でもアプリケーションの応答性が維持され、良好なパフォーマンスが保証されます。
2. 高スループット: ZGC は、ガベージ コレクションにかかる時間を最小限に抑えて高スループットを提供するように設計されています。これにより、メモリが大量に使用されている状況でもアプリケーションが効率的に実行され続けることが保証されます。
3. 大規模なヒープ: ZGC は大規模なヒープを効率的に処理できるように設計されており、大規模なメモリ割り当てを必要とするアプリケーションに適しています。
4. NUMA 対応: ZGC は NUMA 対応となるように設計されており、大規模なヒープと複数の CPU コアを効率的に処理できます。
5. 実験的機能: ZGC は実験的な機能であり、有効にするには特定のコマンドライン オプションが必要です。これは、非常に短い一時停止時間を必要とし、大量のメモリ割り当てを処理できるアプリケーションに適しています。
要約すると、Shenandoah と ZGC はどちらも低遅延と高スループットを提供するように設計されており、効率的なメモリ管理を必要とするアプリケーションに適しています。
引用:[1] https://www.opsian.com/blog/aleksey-shipilev-shenandoah-concurrent-gcs/
[2] https://clojure-goes-fast.com/blog/shenandoah-in-production/
[3] https://wiki.openjdk.org/display/shenandoah/Main
[4] https://www.diva-portal.org/smash/get/diva2:1466940/FULLTEXT01.pdf
[5] https://developers.redhat.com/articles/2024/05/28/beginners-guide-shenandoah-garbage-collector