让我有一个地图,其中包含字符串的键和指向结构的指针的值
type Entity struct{}
entity := &Entity{}
m := map[string]*Entity{"foo":entity}
我得到了值并稍后删除了该条目
en := m["foo"]
delete(m, "foo")
我的问题是,由于从地图中删除了指向它的指针,内存是否会被垃圾收集?另一方面,在删除条目之前,我有新指针 en ,它的指针副本也指向同一个内存位置,因此内存不会被垃圾收集甚至地图条目被删除?我很困惑,很感激。
答案 0 :(得分:0)
Go的当前实现是一个parallel mark-and-sweep垃圾收集器。
准确地说,在声明entity
的范围内,由于您提到的相同原因,此对象不会被收集 - 在从地图中删除后仍然存在对该对象的引用。
地图的状态是内部的,只有在删除操作后才会从那里删除。