Główne przypadki użycia Shenandoah i ZGC to:
Shenandoah GC:
1. Niskie opóźnienia: Shenandoah zaprojektowano tak, aby minimalizować czasy przestojów, wykonując większość zadań związanych z usuwaniem elementów bezużytecznych jednocześnie z aplikacją. Dzięki temu aplikacja pozostaje responsywna i działa dobrze nawet przy dużym obciążeniu pamięci.
2. Wysoka przepustowość: Shenandoah zaprojektowano tak, aby zapewniał wysoką przepustowość poprzez minimalizację czasu spędzanego na zbieraniu śmieci. Dzięki temu aplikacja może nadal działać wydajnie nawet przy dużym obciążeniu pamięci.
3. Duże sterty: Shenandoah został zaprojektowany do wydajnej obsługi dużych stert, dzięki czemu nadaje się do aplikacji wymagających dużych alokacji pamięci.
4. Stała alokacja: Shenandoah nadaje się do zastosowań ze stałą alokacją i wykorzystaniem obiektów, ponieważ może sobie z tym skutecznie poradzić.
5. Starsze obiekty: Shenandoah nadaje się do zastosowań, w których obiekty są starsze, a koszty tworzenia nowych obiektów są niewielkie, ponieważ może sobie z tym skutecznie poradzić.
6. Wykorzystanie kontenera: Shenandoah można używać w środowiskach kontenerowych, ale zależy to od konkretnego przypadku użycia.
ZGC:
1. Niskie opóźnienia: ZGC zaprojektowano tak, aby minimalizować czasy przestojów, wykonując większość prac związanych z usuwaniem śmieci jednocześnie z aplikacją. Dzięki temu aplikacja pozostaje responsywna i działa dobrze nawet przy dużym obciążeniu pamięci.
2. Wysoka przepustowość: ZGC został zaprojektowany, aby zapewnić wysoką przepustowość poprzez minimalizację czasu spędzanego na zbieraniu śmieci. Dzięki temu aplikacja może nadal działać wydajnie nawet przy dużym obciążeniu pamięci.
3. Duże sterty: ZGC został zaprojektowany do wydajnej obsługi dużych stert, dzięki czemu nadaje się do aplikacji wymagających dużych alokacji pamięci.
4. NUMA-Aware: ZGC zaprojektowano tak, aby obsługiwał NUMA, co oznacza, że może wydajnie obsługiwać duże sterty i wiele rdzeni procesora.
5. Funkcja eksperymentalna: ZGC jest funkcją eksperymentalną i do jej włączenia wymagane są określone opcje wiersza poleceń. Nadaje się do aplikacji wymagających bardzo krótkich czasów pauzy i może obsługiwać duże alokacje pamięci.
Podsumowując, zarówno Shenandoah, jak i ZGC zostały zaprojektowane tak, aby zapewniać niskie opóźnienia i wysoką przepustowość, dzięki czemu nadają się do zastosowań wymagających wydajnego zarządzania pamięcią.
Cytaty:[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