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