Sběratel z odpadků Z (ZGC) a Shenandoah sběratel odpadků (GC) jsou moderní sběratelé odpadků s nízkou latencí navrženi tak, aby zkrátili časy pauzy aplikací a zlepšily propustnost v aplikacích Java. Každý z nich má klíčové případy a silné stránky na základě jejich architektonických návrhů a provozních charakteristik.
Případy použití ZGC:
ZGC je škálovatelný sběratel odpadu s nízkou latencí navržený k provádění téměř všech sběrných sběru odpadků souběžně s prováděním aplikací. To má za následek extrémně krátké doby pauzy, obvykle za milisekundu, které jsou nezávislé na velikosti haldy. ZGC zvládne velikosti haldy od několika stovek megabajtů po více terabajtů (až 16 TB). Díky jeho základnímu designu je vhodná pro aplikace vyžadující předvídatelné a minimální doby pauzy, i když velikost haldy roste.
Mezi typické případy použití pro ZGC patří:
-Aplikace s velkými požadavky na paměť, jako je zpracování velkých dat, databáze v paměti a rozsáhlé systémy ukládání do mezipaměti.
-Aplikace citlivé na latenci, kde jsou kritické předvídatelnost a citlivost, jako jsou vysokofrekvenční systémy obchodování (HFT) a analytika v reálném čase.
- Služby, které potřebují udržovat stabilní propustnost bez dlouhých hrotů pauzy GC, jako jsou mikroservisy ve velkých distribuovaných systémech.
- Prostředí, kde minimální časy pauzy aplikací minimalizují narušení v interaktivních nebo uživatelsky zaměřených aplikacích.
Generační varianta ZGC dále zlepšuje účinnost a propustnost CPU rozdělením haldy na mladé a staré generace, což umožňuje častější skenování a efektivní propagaci dlouhodobých objektů. Tento generační přístup, zavedený v novějších verzích Java, je zvláště vhodný pro aplikace vytvářející mnoho krátkodobých objektů a vyžaduje trvalé chování s nízkou latencí při vysoké souběžnosti.
Případy použití Shenandoah GC:
Shenandoah GC je také souběžný sběratel odpadu s nízkou pauzami zaměřený na minimalizaci doby pauzy během sběru odpadků prováděním zhutňování souběžně s podvádějícími vlákny. To snižuje latence hroty a zmaří dlouhé stop-the-World Common v tradičních GC.
Mezi typické případy použití pro Shenandoah GC patří:
- Aplikace s potřebou konzistentní doby odezvy s nízkou latencí a minimální GC pauzy.
- Aplikace střední až velké haldy, kde je fragmentace problémem, protože Shenandoah agresivně kompaktuje pro zvládnutí fragmentace.
- Aplikace, které těží ze souběžného zhutnění bez složitosti specifických ukazatelských zbarvení a bariérových mechanismů jako v ZGC.
-Scénáře, zejména v Javě 21 nebo novějším, kde experimentální generační Shenandoah GC zvyšuje propustnost a zlepšuje odolnost zatížení v prostředích s těžkým pamětí.
Úvahy o výkonu a vhodnosti:
- ZGC je navržen tak, aby se účinně škáloval do velmi velkých velikostí haldy (více terabajtů), přičemž udržuje konzistentní časy pauzy, které zůstávají většinou ovlivněny expanzí haldy. Díky tomu je vhodný pro aplikace s velkými paměly, jako jsou velká data a rozsáhlé vrstvy ukládání do mezipaměti.
- Shenandoah vyniká ve scénářích se středními velikostmi haldy a vykazuje lepší propustnost než ZGC za mírných podmínek využití RAM. Zlepšuje využití paměti agresivním zhutněním a je vhodný pro aplikace, kde je upřednostňována trvalá propustnost.
-Oba sběratelé zlepšují konkurenceschopnost Java pro požadavky na velmi nízkou latenci typické ve finančním obchodování, telekomunikacích, hrách a analytice v reálném čase.
- Použití pokročilých technik ZGC, jako jsou barevné ukazatele a bariéry zatížení, umožňuje velmi efektivní souběžné značení a přemístění objektů, což přispívá k jeho schopnosti minimalizovat doby pauzy.
- Hlavní výhoda Shenandoah spočívá v jeho souběžné strategii zhutnění, snižuje fragmentaci paměti a poskytuje předvídatelnou latenci s nízkou dobu pauzy.
Shrnutí případů charakteristického použití:
- ZGC je často upřednostňován pro extrémně velké hromady a aplikace, kde je předvídatelná latence nezávislá na velikosti haldy; Vyhovuje případům použití ve velkých datových platformách a kritických systémech latence.
- Shenandoah je vybrán pro aplikace vyžadující konzistentní nízké doby pauzy se zaměřením na zhutnění paměti, aby se snížila fragmentaci, přizpůsobila případy použití ve středně velkých haldách systémech s různými životnostmi objektu, jako jsou databáze a systémy v reálném čase, které těží z vylepšení generačního sběru.