Junior — Middle
Може ли у Go да дође до ситуације када се ресурси меморије не ослобађају, што доводи до цурења?
sobes.tech АИ
Одговор од АИ
U Go jeziku su mogući curenja memorije, iako je jezik opremljen ugrađenim sakupljačem smeća koji automatski oslobađa neiskorišćenu memoriju. Međutim, curenja mogu nastati ako program nastavi da drži reference na objekte koji više nisu potrebni, na primer:
- Globalne promenljive ili slice-ovi na koje se dodaju elementi, ali se ne brišu.
- Kanali koji se ne zatvaraju i nastavljaju da drže podatke.
- Zatvaranja koja hvataju velike strukture i nisu oslobođena.
Stoga, curenja u Go često su više povezana sa logikom programa nego sa greškama u niskonivou upravljanju memorijom, i sa logikom koja sprečava sakupljač smeća da oslobodi objekte.
Primer:
var cache = make(map[string]*Data)
func addToCache(key string, data *Data) {
cache[key] = data // Ako se keš ne očisti, podaci će ostati u memoriji
}
Ako se keš ne očisti, objekti u njemu neće biti oslobođeni, što će dovesti do rasta potrošnje memorije.