首頁 後端開發 Golang golang如何釋放map記憶體?

golang如何釋放map記憶體?

Jul 18, 2020 pm 03:03 PM
golang map 記憶體

golang釋放map記憶體的方法:先刪除map中的所有key,map佔用記憶體仍處於【使用狀態】;然後map置為nil,map佔用的記憶體處於【空閒狀態】;最後處於空閒狀態內存,在一定時間內下次申請的可重複使用,不必再向操作系統申請即可。

golang如何釋放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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

大內存優化,電腦升級16g/32g內存速度沒什麼變化怎麼辦? 大內存優化,電腦升級16g/32g內存速度沒什麼變化怎麼辦? Jun 18, 2024 pm 06:51 PM

對於機械硬碟、或SATA固態硬碟,軟體運轉速度的提升會有感覺,如果是NVME硬碟,可能感覺不到。一,註冊表導入桌面新建一個文字文檔,複製貼上如下內容,另存為1.reg,然後右鍵合併,並重新啟動電腦。 WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement]"DisablePagingExecutive"=d

消息稱三星電子、SK 海力士堆疊式行動記憶體 2026 年後商業化 消息稱三星電子、SK 海力士堆疊式行動記憶體 2026 年後商業化 Sep 03, 2024 pm 02:15 PM

本站9月3日消息,韓媒etnews當地時間昨報道稱,三星電子和SK海力士的「類HBM式」堆疊結構行動記憶體產品將在2026年後實現商業化。消息人士表示這兩大韓國記憶體巨頭將堆疊式行動記憶體視為未來重要收入來源,並計劃將「類HBM記憶體」擴展到智慧型手機、平板電腦和筆記型電腦中,為端側AI提供動力。綜合本站先前報導,三星電子的此類產品叫做LPWideI/O內存,SK海力士則將這方面技術稱為VFO。兩家企業使用了大致相同的技術路線,即將扇出封裝和垂直通道結合在一起。三星電子的LPWideI/O內存位寬達512

如何使用 Golang 安全地讀取和寫入檔案? 如何使用 Golang 安全地讀取和寫入檔案? Jun 06, 2024 pm 05:14 PM

在Go中安全地讀取和寫入檔案至關重要。指南包括:檢查檔案權限使用defer關閉檔案驗證檔案路徑使用上下文逾時遵循這些準則可確保資料的安全性和應用程式的健全性。

金邦推出全新 DDR5 8600 內存,提供 CAMM2、LPCAMM2 及常規型號可選 金邦推出全新 DDR5 8600 內存,提供 CAMM2、LPCAMM2 及常規型號可選 Jun 08, 2024 pm 01:35 PM

本站6月7日消息,金邦(GEIL)在2024台北國際電腦展上推出了其最新DDR5解決方案,而且給出了SO-DIMM、CUDIMM、CSODIMM、CAMM2和LPCAMM2等版本可選。 ▲圖來源:Wccftech如圖所示,金邦展出的CAMM2/LPCAMM2記憶體採用非常緊湊的設計,最高可提供128GB的容量,速度最高可達8533MT/s,其中部分產品甚至可以在AMDAM5平台上穩定超頻至9000MT/s,且無需任何輔助散熱。據介紹,金邦2024款PolarisRGBDDR5系列記憶體最高可提供8400

DDR5 MRDIMM 和 LPDDR6 CAMM 記憶體規格蓄勢待發,JEDEC 公佈關鍵技術細節 DDR5 MRDIMM 和 LPDDR6 CAMM 記憶體規格蓄勢待發,JEDEC 公佈關鍵技術細節 Jul 23, 2024 pm 02:25 PM

本站7月23日消息,微電子標準制定方JEDEC固態技術協會當地時間22日宣布,DDR5MRDIMM和LPDDR6CAMM內存技術規範即將正式推出,並介紹了這兩項內存的關鍵細節。 DDR5MRDIMM中的「MR」即MultiplexedRank(多路復用列),這意味著此記憶體支援兩個或以上的Rank(列),並可在單一通道上組合和傳輸多個資料訊號,無需額外的物理連線就能有效提升頻寬。 JEDEC規劃了多代DDR5MRDIMM內存,目標最終將其頻寬提升至12.8Gbps,較DDR5RDIMM內存目前的6.4

雷克沙戰神之翼 ARES RGB DDR5 8000 內存圖賞:炫彩白翼支援 RGB 雷克沙戰神之翼 ARES RGB DDR5 8000 內存圖賞:炫彩白翼支援 RGB Jun 25, 2024 pm 01:51 PM

在7600MT/s、8000MT/s這樣的超高頻旗艦內存價格普遍較高的情況下,雷克沙出手了,他們推出了名為戰神之翼ARES RGB DDR5 的全新內存系列,擁有7600 C36 和8000 C38 兩種規格可選,16GB*2 套條的價格分別為1299 元和1499 元,性價比非常高。本站拿到了 8000 C38 版的戰神之翼,接下來就帶給大家它的開箱圖賞。雷克沙戰神之翼 ARES RGB DDR5 記憶體的包裝設計精良,採用醒目的黑紅配色搭配彩色印刷。包裝左上角設有專屬 &quo

iPhone 17 系列重磅升級:全系 LTPO 螢幕與高達 12GB 內存 iPhone 17 系列重磅升級:全系 LTPO 螢幕與高達 12GB 內存 Jul 24, 2024 pm 01:39 PM

近日,有部落客爆出關於iPhone17系列的參數,該系列將全系標配LTPO屏,並且內存最高將升級至12GB。 iPhone17系列將包括iPhone17、iPhone17Pro、iPhone17ProMax和iPhone17Slim四款機型,螢幕尺寸分別是6.27吋、6.27吋、6.86吋和6.65吋。所有機型都將配備LTPO面板,支援ProMotion可變更新率,這是蘋果首次在標準版機型上提供高更新率螢幕。此外,iPhone17Pro和iPhone17ProMax這兩款Pro機型將會標配1

消息指出三星電子確認平澤 P4 廠 1c nm DRAM 記憶體產線投資,目標明年 6 月投運 消息指出三星電子確認平澤 P4 廠 1c nm DRAM 記憶體產線投資,目標明年 6 月投運 Aug 12, 2024 pm 04:31 PM

本站8月12日消息,韓媒ETNews通報稱,三星電子內部已確認在平澤P4工廠建設1cnmDRAM內存產線的投資計劃,該產線目標明年6月投入運營。平澤P4是一座綜合半導體生產中心,分為四期。在早前規劃中,一期為NAND快閃存,二期為邏輯代工,三期、四期為DRAM記憶體。三星已在P4一期導入DRAM生產設備,但擱置了第二期建設。而1cnmDRAM是第六代20~10nm級內存工藝,各家的1cnm(或對應的1γnm)產品目前均尚未正式發布。韓媒在報道中稱,三星電子計畫在今年底啟動1cnm記憶體生產。 ▲三星平澤

See all articles