El *garbage collector* (GC) en Go es un mecanismo que gestiona automáticamente la memoria en tiempo de ejecución, liberando memoria que ya no está en uso para evitar fugas de memoria (*memory leaks*). Esto permite a los desarrolladores centrarse en la lógica del programa sin preocuparse por la gestión manual de la memoria.
El garbage collection en Go rastrea los objetos en memoria que ya no son referenciados por el programa y los elimina para liberar espacio. Go utiliza un recolector de basura *tracing*, lo que significa que identifica objetos que aún están en uso y recolecta aquellos que no lo están.
El GC de Go trabaja en segundo plano y periódicamente:
1. Identifica objetos alcanzables: rastrea objetos en la memoria que todavía son accesibles desde el código.
2. Reclama memoria: elimina objetos inalcanzables para liberar su memoria.
3. Minimiza pausas: el garbage collector en Go está diseñado para minimizar las interrupciones en la ejecución del programa, usando un enfoque *concurrente* y *pausado*.
Go permite ajustar el comportamiento del garbage collector a través de la variable de entorno GOGC
. El valor predeterminado es 100
, lo que significa que el GC se ejecuta cuando el uso de memoria ha crecido en un 100% desde la última recolección. Puedes ajustar este valor para optimizar el rendimiento según las necesidades de tu aplicación.
GOGC=200 go run main.go
En este ejemplo, el GC se ejecutará cuando el uso de memoria haya crecido en un 200%.
El siguiente código ilustra cómo funciona el garbage collection en Go:
package main
import (
"fmt"
"runtime"
)
func main() {
// Crear una función que genere objetos
for i := 0; i < 1e6; i++ {
_ = make([]byte, 1024) // Asignar 1KB de memoria
}
// Forzar la ejecución del garbage collector
runtime.GC()
fmt.Println("Garbage collection forzada")
}
Este programa asigna una gran cantidad de memoria y luego fuerza al garbage collector a ejecutarse utilizando la función runtime.GC()
, lo cual es útil en situaciones específicas pero no es algo que se necesite hacer habitualmente, ya que Go gestiona la memoria automáticamente.
Para más detalles sobre el garbage collector en Go, visita la documentación oficial de Go.
Jorge García
Fullstack developer