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.