使用Go中的指针值清除地图

时间:2013-12-18 12:27:02

标签: map garbage-collection go

我有一个map [string] * list.List,每个列表节点也是一个指针。通过简单地将地图清除为nil,是否会清除所有地图和列表以及所有指针并进行垃圾收集并准备再次使用?

type UnrolledGroup struct {                                                                                                                                          
    next int
    s    []uint32
 }

 var dictionary = struct {
     m    map[string]*list.List
     keys []string                                                                                                                                                    
 }{m: make(map[string]*list.List)}

 l := list.New()
 newGroup := UnrolledGroup{next: 1, s: make([]uint32, groupLen)}
 newGroup.s[0] = pos
 l.PushBack(&newGroup)
 dictionary.m[token] = l

现在这样可以清除整个事情吗?

 dictionary.m = nil

2 个答案:

答案 0 :(得分:2)

这取决于:如果不再是"可以到达"那么一切都是GC。如果您保留其他对您存储在地图中的内容的引用,则无法收集。如果地图是这些对象的唯一根,则会收集它们。 (不要过多考虑这些事情。)

答案 1 :(得分:0)

map是引用类型,即它是底层结构的指针类型。您可以将指针设置为nil,但如果其他人有指向相同底层结构的指针,那么他们仍然可以引用内部的所有内容。