Cómo funciona el nuevo recolector de basura Green Tea de Go y por qué importa

Fuentes: Watching Go's new garbage collector move through the heap

Go 1.26 introdujo Green Tea como recolector de basura predeterminado, una evolución presentada originalmente en Go 1.25 que mejora la eficiencia de caché del proceso de limpieza de memoria. En Go, los objetos se agrupan por clases de tamaño dentro de fragmentos contiguos de páginas de 8 KiB, una técnica heredada de allocadores como tcmalloc. El artículo demuestra, mediante un programa que asigna 100 objetos de tres tamaños distintos (32, 64 y 128 bytes) y recorre el espacio de direcciones imprimiendo un carácter por cada 32 bytes, cómo el runtime de Go sitúa los objetos del mismo tamaño de forma contigua. Tras forzar una recolección, se comprueba que el colector no mueve los objetos, lo que confirma que sigue siendo un recolector no compactador. Esa misma prueba, portada a C#, muestra un patrón de asignación diferente, con objetos de tamaños heterogéneos intercalados. La consecuencia práctica es que un colector no compactador como el de Go no puede fusionar páginas que han quedado semivacías y dispersas tras la liberación de objetos, lo que genera un problema de páginas dispersas que Green Tea mitiga pero no resuelve por completo. El artículo incluye el código completo en Go y C# para reproducir los experimentos y comparar el comportamiento de ambos entornos de ejecución.