2 回答

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
為了嘗試完全回答這個(gè)問(wèn)題,我們需要弄清楚問(wèn)題到底是什么。
對(duì)于標(biāo)題問(wèn)題:
我是否需要將地圖設(shè)置為零才能對(duì)其進(jìn)行垃圾收集?
不,一旦地圖值超出范圍,它將像任何其他值一樣被垃圾收集。
我
map[string]*stuct
用許多不同的值填充這個(gè) [ ] 映射,并且在一段時(shí)間后,這些值中的許多將永遠(yuǎn)不會(huì)再次使用。
您展示的這個(gè)示例地圖包含指針值,只要它們包含在地圖中,就永遠(yuǎn)不會(huì)收集它們指向的值。從映射中刪除值(使用delete
或?qū)㈡I設(shè)置為另一個(gè)值)將允許收集指針引用的內(nèi)存。不需要對(duì)地圖進(jìn)行特殊處理以確保垃圾收集。
現(xiàn)在,map 的內(nèi)部結(jié)構(gòu)目前沒(méi)有被壓縮,小值(包括指針和 128 字節(jié)以下的任何東西)直接存儲(chǔ)在哈希桶中。包含數(shù)百萬(wàn)個(gè)條目的地圖在刪除這些條目后不會(huì)立即變小,因此如果您需要釋放該內(nèi)存,最好將您想要的剩余值復(fù)制到新地圖中。這類似于擁有一個(gè)不再需要的大切片,除了一些值,您需要將剩余的值復(fù)制到新切片以釋放原始支持?jǐn)?shù)組。

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以delete()
從地圖中單獨(dú)輸入條目,即使是在對(duì)其進(jìn)行迭代時(shí)也是如此。如果條目的值無(wú)法從其他任何東西訪問(wèn)(并且它足夠大),它們將被 GC 處理。
您看的問(wèn)題引用了一些舊代碼(您可以自己查看源代碼),從地圖中刪除對(duì)象后應(yīng)該清空內(nèi)存
- 2 回答
- 0 關(guān)注
- 173 瀏覽
添加回答
舉報(bào)