Junior — Middle
Kaip nustatomas objektų egzistavimo laikas valdomoje heap atmintyje?
sobes.tech AI
Atsakymas iš AI
Go kalba, valdomame krūvoje (heap) esantys objektai gyvavimo laiką apibrėžia nuorodų į šiuos objektus gyvavimo laikas. Jei heap'e yra aktyvių nuorodų (kintamųjų, rodyklių), šiukšlių rinkėjas (GC) laiko objektą gyvu ir jo neištrina. Kai visos nuorodos į objektą išnyksta (objektas tampa neprieinamas), GC pažymi jį ištrynimui.
Go naudoja trijų kartų šiukšlių rinkėją su pasiekiamumo sekimo algoritmu: pradedama nuo šakninių objektų (stovas, globalios kintamosios), pažymimi visi pasiekiami objektai, kiti laikomi šiukšle.
Pavyzdys:
func f() {
p := new(int) // objektas krūvoje
*p = 42
// p egzistuoja, objektas gyvas
}
// po išeities iš f() objektas tampa neprieinamas ir bus ištrintas GC