golang map delete 会释放value吗

如题所述

不会释放value,仅仅标记为不可用,但实际内存还是在占用

package main

import (
"log"
"runtime"
)

var intMap map[int]int
var cnt = 8192

func main() {
printMemStats()

initMap()
runtime.GC()
printMemStats()

log.Println(len(intMap))
for i := 0; i < cnt; i++ {
delete(intMap, i)
}
log.Println(len(intMap))

runtime.GC()
printMemStats()

intMap = nil
runtime.GC()
printMemStats()
}

func initMap() {
intMap = make(map[int]int, cnt)

for i := 0; i < cnt; i++ {
intMap[i] = i
}
}

func printMemStats() {
var m runtime.MemStats
runtime.ReadMemStats(&m)
log.Printf("Alloc = %v TotalAlloc = %v Sys = %v NumGC = %v\n", m.Alloc/1024, m.TotalAlloc/1024, m.Sys/1024, m.NumGC)
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-03-12
我最早使用的语言是Java和Python, 并且一直都对Python充满好感, 我喜欢这种很朴实和高效率的感觉, 但我却最后没有采用Python,原因其实也很简单, 我就是不喜欢缩进语法, 就跟很多人换工作仅仅是为了屏幕更大一点一样