2013-12-18 32 views
0

我有一个map [string] * list.List,每个列表节点也是一个指针。通过简单清除地图为零,所有的地图和列表以及所有这些指针将被清除并垃圾收集并准备好再次使用?使用指针值清除地图Go

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 
+0

这里的问题很相似https://groups.google.com/forum/#!topic/golang-nuts/6NxgkyQxS2c – nvcnvn

+0

垃圾收集器最终会从内存中删除对象。这不会保证什么时候会发生。 – fuz

回答

2

这取决于:如果它不再“可到达”,那么所有东西都是GC'ed。如果您保留其他参考资料,您将不会收集地图中存储的内容。如果地图是这些对象的唯一根,它们将被收集。 (不要过多地考虑这种东西。)

+0

我要说的是同样的事情,即使你*确定你没有引用留下来,而你*仍然*真的偏执狂,你*可以使用'runtime.GC()' (http://golang.org/pkg/runtime/#GC),但如果你不知道还有什么事情发生,它可能是有害的。 – Intermernet

0

map是一个引用类型,即它是一个指向底层结构的指针类型。你可以将你的指针设置为nil,但是如果其他人有一个指向相同底层结构的指针,那么他们仍然可以参考里面的所有东西。