• 技术文章 >后端开发 >Golang

    golang如何释放map内存?

    coldplay.xixicoldplay.xixi2020-07-18 15:03:06原创3793

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

    golang释放map内存的方法:

    示例代码:
    go version: 1.12.9

    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)
    }

    输出结果:

    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

    字段说明:

    从运行结果可以看出,map中的key被删除以后占用的内存并没有被释放掉。

    结论:
    golang的map在key被删除之后,并不会立即释放内存,所以随着程序的运行,实际上map占用的内存只会越来越大。此外,GC会在标记阶段访问map中的每一个元素,当map非常大时这会对程序性能带来非常大的开销。不过go 1.5版本之后,如果map的key和value中都不包含指针,那么GC会忽略这个map。

    相关学习推荐:Go语言教程

    以上就是golang如何释放map内存?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:golang map 内存
    上一篇:golang如何处理输入? 下一篇:golang如何退出进程?
    大前端线上培训班

    相关文章推荐

    • golang map判断key是否存在• golang map是否有顺序• golang map无法删除元素吗• golang map需要make吗

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网