2013-12-18 5 views
0

У меня есть карта [строка] * 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, если это уже не «достижимый». Если вы сохраните другие ссылки на материал, который вы храните на карте, он не будет собран. Если карта является единственным корнем для этих объектов, они будут собраны. (Не думайте слишком много о таких вещах.)

+0

Я собирался сказать то же самое, и даже если вы * уверены, что у вас нет ссылок, лежащих вокруг, и вы все еще * действительно параноичны, вы можете * использовать 'runtime.GC()' (http://golang.org/pkg/runtime/#GC), но это, вероятно, будет вредным, если вы действительно не знаете, что еще происходит. – Intermernet

0

map - ссылочный тип, то есть это тип указателя на базовую структуру. Вы можете установить указатель на nil, но если у кого-то есть указатель на ту же основную структуру, то они все еще имеют ссылку на все вещи внутри.

Смежные вопросы