golang如何释放map内存?
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
字段说明:
Alloc
: 当前堆上对象占用的内存大小;TotalAlloc
:堆上总共分配出的内存大小;Sys
: 程序从操作系统总共申请的内存大小;NumGC
: 垃圾回收运行的次数。
从运行结果可以看出,map中的key被删除以后占用的内存并没有被释放掉。
结论:
golang的map在key被删除之后,并不会立即释放内存,所以随着程序的运行,实际上map占用的内存只会越来越大。此外,GC会在标记阶段访问map中的每一个元素,当map非常大时这会对程序性能带来非常大的开销。不过go 1.5版本之后,如果map的key和value中都不包含指针,那么GC会忽略这个map。
相关学习推荐:Go语言教程
以上是golang如何释放map内存?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

对于机械硬盘、或SATA固态硬盘,软件运行速度的提升会有感觉,如果是NVME硬盘,可能感觉不到。一,注册表导入桌面新建一个文本文档,复制粘贴如下内容,另存为1.reg,然后右键合并,并重启电脑。WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement]"DisablePagingExecutive"=d

本站9月3日消息,韩媒etnews当地时间昨日报道称,三星电子和SK海力士的“类HBM式”堆叠结构移动内存产品将在2026年后实现商业化。消息人士表示这两大韩国内存巨头将堆叠式移动内存视为未来重要收入来源,计划将“类HBM内存”扩展到智能手机、平板电脑和笔记本电脑中,为端侧AI提供动力。综合本站此前报道,三星电子的此类产品叫做LPWideI/O内存,SK海力士则将这方面技术称为VFO。两家企业使用了大致相同的技术路线,即将扇出封装和垂直通道结合在一起。三星电子的LPWideI/O内存位宽达512

在Go中安全地读取和写入文件至关重要。指南包括:检查文件权限使用defer关闭文件验证文件路径使用上下文超时遵循这些准则可确保数据的安全性和应用程序的健壮性。

本站6月7日消息,金邦(GEIL)在2024台北国际电脑展上推出了其最新DDR5解决方案,而且给出了SO-DIMM、CUDIMM、CSODIMM、CAMM2和LPCAMM2等版本可选。▲图源:Wccftech如图所示,金邦展出的CAMM2/LPCAMM2内存采用非常紧凑的设计,最高可提供128GB的容量,速度最高可达8533MT/s,其中部分产品甚至可以在AMDAM5平台上稳定超频至9000MT/s,且无需任何辅助散热。据介绍,金邦2024款PolarisRGBDDR5系列内存最高可提供8400

本站7月23日消息,微电子标准制定方JEDEC固态技术协会当地时间22日宣布,DDR5MRDIMM和LPDDR6CAMM内存技术规范即将正式推出,并介绍了这两项内存的关键细节。DDR5MRDIMM中的“MR”即MultiplexedRank(多路复用列),这意味着该内存支持两个或以上的Rank(列),并可在单个通道上组合和传输多个数据信号,无需额外的物理连接就能有效提升带宽。JEDEC规划了多代DDR5MRDIMM内存,目标最终将其带宽提升至12.8Gbps,较DDR5RDIMM内存目前的6.4

在 7600MT/s、8000MT/s这样的超高频旗舰内存价格普遍较高的情况下,雷克沙出手了,他们推出了名为战神之翼 ARES RGB DDR5 的全新内存系列,拥有 7600 C36 和 8000 C38 两种规格可选,16GB*2 套条的价格分别为 1299 元和 1499 元,性价比非常高。本站拿到了 8000 C38 版本的战神之翼,接下来就给大家带来它的开箱图赏。雷克沙战神之翼 ARES RGB DDR5 内存的包装设计精良,采用醒目的黑红配色搭配彩色印刷。包装左上角设有专属 &quo

本站8月12日消息,韩媒ETNews报道称,三星电子内部已确认在平泽P4工厂建设1cnmDRAM内存产线的投资计划,该产线目标明年6月投入运营。平泽P4是一座综合性半导体生产中心,分为四期。在早前规划中,一期为NAND闪存,二期为逻辑代工,三期、四期为DRAM内存。三星已在P4一期导入DRAM生产设备,但搁置了二期建设。而1cnmDRAM是第六代20~10nm级内存工艺,各家的1cnm(或对应的1γnm)产品目前均尚未正式发布。韩媒在报道中称,三星电子计划在今年底启动1cnm内存生产。▲三星平泽

近日,有博主爆出关于iPhone17系列的参数,该系列将全系标配LTPO屏,并且内存最高将升级至12GB。iPhone17系列将包括iPhone17、iPhone17Pro、iPhone17ProMax和iPhone17Slim四款机型,屏幕尺寸分别是6.27英寸、6.27英寸、6.86英寸和6.65英寸。所有机型都将配备LTPO面板,支持ProMotion可变刷新率,这是苹果首次在标准版机型上提供高刷新率屏幕。此外,iPhone17Pro和iPhone17ProMax这两款Pro机型将会标配1
