Sobes.tech
Junior — Middle

Explica mecanismul de colectare automată a gunoiului în limbajul Go și modul în care gestionează memoria.

sobes.tech AI

Răspuns de la AI

În limbajul Go, se utilizează un colector de gunoi automat (Garbage Collector, GC), care gestionează memoria eliberând obiectele neutilizate.

Mecanismul se bazează pe un algoritm de urmărire și numărare a accesibilității obiectelor:

  • Go pornește colectarea gunoiului în paralel cu execuția programului (GC concurent).
  • GC determină care obiecte din heap nu mai sunt accesibile din referințele rădăcină (de exemplu, variabile globale, stive de goroutine).
  • Obiectele inaccesibile sunt considerate gunoi și sunt eliberate.

Caracteristici:

  • Go folosește o colectare în trei generații: mark (marchează obiectele accesibile), sweep (eliberează cele inaccesibile).
  • Colectarea gunoiului minimizează pauzele pentru a nu bloca execuția programului.
  • Gestionarea memoriei este automată, programatorul nu trebuie să elibereze memoria în mod explicit.

Exemplu:

func main() {
    s := make([]int, 1000000) // alocare de memorie
    // utilizarea lui s
    s = nil // acum slice-ul nu mai este accesibil
    // GC va elibera memoria la următoarea rulare
}

Astfel, Go simplifică gestionarea memoriei, reducând probabilitatea de scurgeri de memorie și erori.