Os principais casos de uso de Shenandoah e ZGC são:
###Shenandoah GC:
1. Baixa latência: Shenandoah foi projetado para minimizar os tempos de pausa, executando a maior parte do trabalho de coleta de lixo simultaneamente com o aplicativo. Isso garante que o aplicativo permaneça responsivo e tenha um bom desempenho mesmo sob uso intenso de memória.
2. Alto rendimento: Shenandoah foi projetado para fornecer alto rendimento, minimizando o tempo gasto na coleta de lixo. Isso garante que o aplicativo possa continuar a funcionar com eficiência, mesmo sob uso intenso de memória.
3. Grandes heaps: Shenandoah foi projetado para lidar com grandes heaps com eficiência, tornando-o adequado para aplicativos que exigem grandes alocações de memória.
4. Alocação constante: Shenandoah é adequado para aplicações com alocação e uso constante de objetos, pois pode lidar com isso de forma eficiente.
5. Objetos mais antigos: Shenandoah é adequado para aplicações onde os objetos são mais antigos e a sobrecarga de criação de novos objetos é pequena, pois pode lidar com isso de forma eficiente.
6. Uso de contêiner: Shenandoah pode ser usado em ambientes conteinerizados, mas depende do caso de uso específico.
###ZGC:
1. Baixa latência: o ZGC foi projetado para minimizar os tempos de pausa, executando a maior parte do trabalho de coleta de lixo simultaneamente com o aplicativo. Isso garante que o aplicativo permaneça responsivo e tenha um bom desempenho mesmo sob uso intenso de memória.
2. Alto rendimento: O ZGC foi projetado para fornecer alto rendimento, minimizando o tempo gasto na coleta de lixo. Isso garante que o aplicativo possa continuar a funcionar com eficiência, mesmo sob uso intenso de memória.
3. Grandes heaps: o ZGC foi projetado para lidar com grandes heaps com eficiência, tornando-o adequado para aplicativos que exigem grandes alocações de memória.
4. NUMA-Aware: O ZGC foi projetado para ser compatível com NUMA, o que significa que ele pode lidar com eficiência com grandes heaps e vários núcleos de CPU.
5. Recurso Experimental: ZGC é um recurso experimental e requer opções específicas de linha de comando para ser ativado. É adequado para aplicações que requerem tempos de pausa muito curtos e podem lidar com grandes alocações de memória.
Em resumo, tanto o Shenandoah quanto o ZGC foram projetados para fornecer baixa latência e alto rendimento, tornando-os adequados para aplicações que exigem gerenciamento eficiente de memória.
Citações:[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