Будет ли GC Golang освобождать память объекта, на который ссылается только программа? - PullRequest
0 голосов
/ 16 мая 2018
m := map[string]*Object {
    "a": obj
}
go func(obj *Object) {
    obj.Do()
}(m["a"])

delete(m, "a")

освободит ли ГХ память из obj, когда obj.Do() не завершится?

1 Ответ

0 голосов
/ 16 мая 2018

Код оценит

m["a"]

, который даст указатель obj, затем obj будет помещен в новый стек для goroutine, а затем goroutine будет запущен с этим стеком, а затем obj будет удален с карты в исходной goroutine. В этот момент новый стек подпрограмм будет иметь указатель на obj, и поэтому по этой причине obj не будет получен до тех пор, пока 2-я программа не завершит выполнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...