Volver a la página principal
lunes 21 octubre 2024
5

Cómo funciona el garbage collection en Go

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.

¿Qué es el garbage collection en Go?

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.

Funcionamiento del garbage collection

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

Características del GC en Go

  • Recolección concurrente: el GC funciona junto con el programa sin detener completamente la ejecución.
  • Baja latencia: está optimizado para reducir las pausas, lo que lo hace ideal para aplicaciones de alto rendimiento.
  • Automatización: no necesitas liberar memoria manualmente como en lenguajes como C o C++, ya que el GC lo hace por ti.

Ajustes del garbage collector

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%.

Ejemplo práctico

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.

Referencia

Para más detalles sobre el garbage collector en Go, visita la documentación oficial de Go.

Etiquetas:
go
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer