O Go 1.25 inclui um novo garbage collector experimental chamado Green Tea, disponível configurando GOEXPERIMENT=greenteagc no momento do build.
Muitos workloads gastam cerca de 10% menos tempo no garbage collector, mas alguns veem reduções de até 40%!
Já está em uso no Google em produção, então encorajamos você a testar. Baseado nos dados que temos agora, planejamos torná-lo o padrão no Go 1.26.
Como Funciona o Garbage Collection
O propósito do garbage collection é recuperar e reutilizar automaticamente memória que não está mais sendo usada pelo programa.
Objetos e Ponteiros
No contexto do runtime Go:
- Objetos são valores Go cuja memória é alocada no heap
- Ponteiros são números que indicam a localização de um valor Go na memória
Por exemplo, o código abaixo aloca um único objeto no heap:
var x = make([]*int, 10) // global
O Algoritmo Mark-Sweep
O garbage collector do Go implementa o algoritmo mark-sweep, que opera em duas fases:
-
Fase Mark: Caminha pelo grafo de objetos a partir das raízes (variáveis globais e locais), marcando tudo que encontra como visitado.
-
Fase Sweep: Itera por todos os objetos não visitados e marca sua memória como livre para reutilização.
É essencialmente um algoritmo de flood em grafo, como uma busca em profundidade ou largura.
O Que Há de Novo no Green Tea
O Green Tea traz melhorias significativas:
- Redução de 10-40% no overhead do GC para muitos workloads
- Algoritmo novo projetado para as capacidades do hardware atual
- No Go 1.26, redução adicional de 10% em hardware com instruções AVX-512
Como Testar
# Build com Green Tea habilitado
GOEXPERIMENT=greenteagc go build ./...
# Rodar aplicação
./minha-app
Reportando Feedback
- Problemas: Abra uma issue
- Sucessos: Comente na issue do Green Tea
Conclusão
O Green Tea representa um avanço significativo no garbage collector do Go, oferecendo melhorias substanciais de performance sem exigir mudanças no código. Com o plano de torná-lo padrão no Go 1.26, os usuários precisarão apenas atualizar a versão do Go para se beneficiar.
Traduzido e adaptado do Go Blog, baseado na palestra de Michael Knyszek na GopherCon 2025.