---
title: "Green Tea: O Novo Garbage Collector do Go"
url: "https://golang.com.br/blog/green-tea-garbage-collector/"
markdown_url: "https://golang.com.br/blog/green-tea-garbage-collector.MD"
description: "Green Tea GC do Go 1.25 reduz overhead do garbage collector em ate 40%. Ative com GOEXPERIMENT=greenteagc. Ja em producao no Google, sera padrao no Go 1.26."
date: "2024-08-15"
author: "Michael Knyszek (tradução)"
---

# Green Tea: O Novo Garbage Collector do Go

Green Tea GC do Go 1.25 reduz overhead do garbage collector em ate 40%. Ative com GOEXPERIMENT=greenteagc. Ja em producao no Google, sera padrao no Go 1.26.


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:

```go
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:

1. **Fase Mark**: Caminha pelo grafo de objetos a partir das raízes (variáveis globais e locais), marcando tudo que encontra como visitado.

2. **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

```bash
# Build com Green Tea habilitado
GOEXPERIMENT=greenteagc go build ./...

# Rodar aplicação
./minha-app
```

## Reportando Feedback

- **Problemas**: [Abra uma issue](/issue/new)
- **Sucessos**: Comente na [issue do Green Tea](/issue/73581)

## 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. Em contraste, linguagens como <a href="https://rustlang.com.br/blog/" target="_blank" rel="noopener noreferrer" onclick="umami.track('portfolio-site-click', { destination: 'rustlang.com.br' })">Rust</a> e <a href="https://ziglang.com.br/artigos/zig-alocacao-memoria-estrategias/" target="_blank" rel="noopener noreferrer" onclick="umami.track('portfolio-site-click', { destination: 'ziglang.com.br' })">Zig</a> dispensam garbage collector completamente, gerenciando memória via ownership e alocadores manuais, respectivamente.

---

*Traduzido e adaptado do [Go Blog](https://go.dev/blog/greenteagc), baseado na palestra de Michael Knyszek na GopherCon 2025.*
