Sobes.tech
Junior — Middle

Wyjaśnij mechanizm automatycznego zbierania śmieci w języku Go i jak zarządza pamięcią.

sobes.tech AI

Odpowiedź od AI

W języku Go używany jest automatyczny zbieracz śmieci (Garbage Collector, GC), który zarządza pamięcią, zwalniając nieużywane obiekty.

Mechanizm opiera się na algorytmie śledzenia i liczenia dostępności obiektów:

  • Go uruchamia zbieranie śmieci równolegle z wykonywaniem programu (GC współbieżny).
  • GC określa, które obiekty na stercie nie są już dostępne z odwołań korzeniowych (np. zmiennych globalnych, stosów goroutine).
  • Nieosiągalne obiekty są uważane za śmieci i są zwalniane.

Cechy:

  • Go używa trójgeneracyjnego zbierania: mark (oznaczanie dostępnych obiektów), sweep (zwalnianie nieosiągalnych).
  • Zbieranie śmieci minimalizuje przerwy, aby nie blokować wykonania programu.
  • Zarządzanie pamięcią odbywa się automatycznie, programista nie musi jawnie zwalniać pamięci.

Przykład:

func main() {
    s := make([]int, 1000000) // przydział pamięci
    // użycie s
    s = nil // teraz zakres nie jest dostępny
    // GC zwolni pamięć przy następnym uruchomieniu
}

W ten sposób Go upraszcza zarządzanie pamięcią, zmniejszając prawdopodobieństwo wycieków i błędów.