創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
怎么在golang中釋放map內(nèi)存?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
golang釋放map內(nèi)存的方法:首先刪除map中的所有key,map占用內(nèi)存仍處于【使用狀態(tài)】;然后map置為nil,map占用的內(nèi)存處于【空閑狀態(tài)】;最后處于空閑狀態(tài)內(nèi)存,一定時(shí)間內(nèi)在下次申請(qǐng)的可重復(fù)被使用,不必再向操作系統(tǒng)申請(qǐng)即可。
golang釋放map內(nèi)存的方法:
示例代碼:
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) }
輸出結(jié)果:
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
: 當(dāng)前堆上對(duì)象占用的內(nèi)存大小;
TotalAlloc
:堆上總共分配出的內(nèi)存大小;
Sys
: 程序從操作系統(tǒng)總共申請(qǐng)的內(nèi)存大小;
NumGC
: 垃圾回收運(yùn)行的次數(shù)。
從運(yùn)行結(jié)果可以看出,map中的key被刪除以后占用的內(nèi)存并沒有被釋放掉。
結(jié)論:
golang的map在key被刪除之后,并不會(huì)立即釋放內(nèi)存,所以隨著程序的運(yùn)行,實(shí)際上map占用的內(nèi)存只會(huì)越來越大。此外,GC會(huì)在標(biāo)記階段訪問map中的每一個(gè)元素,當(dāng)map非常大時(shí)這會(huì)對(duì)程序性能帶來非常大的開銷。不過go 1.5版本之后,如果map的key和value中都不包含指針,那么GC會(huì)忽略這個(gè)map。
看完上述內(nèi)容,你們掌握怎么在golang中釋放map內(nèi)存的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!
本文題目:怎么在golang中釋放map內(nèi)存-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://aaarwkj.com/article10/cdpddo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、面包屑導(dǎo)航、外貿(mào)建站、服務(wù)器托管、Google、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容