Go语言中重新初始化map是否会解除原引用并触发垃圾回收?
Go中重新初始化map是否会让原map被垃圾回收?
先看你创建的string到bool类型的map示例:
myMap := make(map[string]bool) myMap["Jan"] = true myMap["Feb"] = false myMap["Mar"] = true
你的问题是:在对这个map做了一些操作后,不想通过遍历每个键来删除它,而是重新初始化map(如下代码),这样是否会解除对原map的引用并让它被垃圾回收?
myMap = make(map[string]bool)
当然可以!
当你把myMap重新赋值给一个用make创建的新map时,这个变量就不再指向原来的那个map了。只要没有其他变量或者数据结构还持有原map的引用,原map就会失去所有活跃的引用,Go的垃圾回收器会自动回收它占用的内存。
顺便提一句,还有个更直接的方式:直接把myMap赋值为nil:
myMap = nil
这样也能达到同样的效果——切断对原map的引用,让GC去处理它。完全不需要手动遍历删除每个键,Go的内存管理会在没有活跃引用时自动清理这些内存。
内容的提问来源于stack exchange,提问作者Deepak Kumar
相关产品推荐
相关产品推荐

