Golang 記憶體洩漏場景

2021-09-20 13:19:41 字數 943 閱讀 8672

雖然golang 的runtime 會**記憶體,但是本文列舉的場景仍然會造成記憶體洩漏。

todo 此處需要了解下golang 的底層 memory block 分配知識

var s0 string // 包級別變數

// a demo purpose function.

func f(s1 string)

func demo()

可以用如下方式來避免:

func f(s1 string)
這個方法的缺點是有50位元組的重複了

可以繼續優化為如下方式,當然它也有1byte記憶體的浪費

func f(s1 string)
func h() *int 

// do something with s ...

return s[1:3:3]

}

由於返回的slice 仍然存活狀態,會阻止 s中元素被**。

func h() *int 

// do something with s ...

// reset pointer values.

s[0], s[len(s)-1] = nil, nil

return s[1:3:3]

}

有時候,有些goroutinue 會永遠都 hang住

為什麼 go runtime 沒有殺死hang住的goroutinue 乙個原因是因為go routime 很難去判斷乙個goroutinue 是否是要永遠被hang住。另外乙個原因是可能是我們故意將goroutinue hang住,例如為了不面程式退出而hang住主要的goroutinue。

time.ticker 應該被stop,當不再使用時候

不恰當的使用了析構函式

golang的記憶體洩漏

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 全新的介面設計,將會帶來全新的寫作體驗 在創作中心設定你喜愛的 高亮樣式,markdown將 片顯示選擇的高亮樣式進行展示 全新的katex...

安卓記憶體洩漏(三) 洩漏場景

模糊感覺,感覺什麼handler。context記憶體洩漏 一開始各種handler,後來感覺都不敢用,感覺都是記憶體洩漏 梳理1 handler內部類導致記憶體洩漏 handler裡面控制訊息,訊息在佇列裡面,如果設定10s才去處理。則訊息一直在佇列裡面。那這個10s時間handler無法銷毀。內...

java記憶體洩漏易發場景

記憶體洩露是指無用物件 不再使用的物件 持續占有記憶體 無用物件的記憶體得不到及時釋放 容易發生記憶體洩漏的場景 1.靜態集合類引起記憶體洩露,像hashmap這些靜態變數的生命週期和應用程式一致,他們所引用的所有的物件object也不能被釋放,因為他們也將一直被vector等引用著。2.當集合裡面...