本文摘自php中文网,作者coldplay.xixi,侵删。
golang释放map内存的方法:首先删除map中的所有key,map占用内存仍处于【使用状态】;然后map置为nil,map占用的内存处于【空闲状态】;最后处于空闲状态内存,一定时间内在下次申请的可重复被使用,不必再向操作系统申请即可。

golang释放map内存的方法:
示例代码:
go version: 1.12.9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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 2 3 4 5 6 | 2019/11/22 15:42:33 Alloc = 138 TotalAlloc = 138 Sys = 68290 NumGC = 0
2019/11/22 15:42:33 Alloc = 456 TotalAlloc = 460 Sys = 68610 NumGC = 1
2019/11/22 15:42:33 8192
2019/11/22 15:42:33 0
2019/11/22 15:42:33 Alloc = 458 TotalAlloc = 464 Sys = 68674 NumGC = 2
2019/11/22 15:42:33 Alloc = 146 TotalAlloc = 466 Sys = 68674 NumGC = 3
|
字段说明:
Alloc
: 当前堆上对象占用的内存大小;
TotalAlloc
:堆上总共分配出的内存大小;
Sys
: 程序从操作系统总共申请的内存大小;
NumGC
: 垃圾回收运行的次数。
从运行结果可以看出,map中的key被删除以后占用的内存并没有被释放掉。
阅读剩余部分
相关阅读 >>
golang中的联合体
golang elasticsearch7的使用
golang切片需要make吗
golang中线程和协程的区别是什么
go-carbon 1.2.6 版本发布,优化错误处理机制,弃用出错直接panic的粗暴处理方式
如何升级基础架构
golang基础-高级特性概述
go-carbon 1.3.3 版本发布,新增获取星座方法和判断是否是某个星座方法
go语言的依赖管理
golang的内存管理(中篇)
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang如何释放map内存?