Sobes.tech
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