golang的GC是否只有goroutine引用的对象的空闲内存?

时间:2018-05-16 06:11:16

标签: go

m := map[string]*Object {
    "a": obj
}
go func(obj *Object) {
    obj.Do()
}(m["a"])

delete(m, "a")

obj尚未完成时,GC会释放obj.Do()的内存吗?

1 个答案:

答案 0 :(得分:2)

代码将评估

error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert("Request: " + XMLHttpRequest.responseText.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);

将指针obj,然后obj将被放置在goroutine的新堆栈上,然后goroutine将以该堆栈启动,然后obj将从原始goroutine中的地图中删除。此时,新的goroutine堆栈将有一个指向obj的指针,因此obj将不会被gc'这样,直到第二个goroutine完成执行。