記憶體洩漏的場景和解決辦法

2021-09-24 17:44:21 字數 1025 閱讀 7503

1.非靜態內部類的靜態例項

非靜態內部類會持有外部類的引用,如果非靜態內部類的例項是靜態的,就會長期的維持著外部類的引用,組織被系統**,解決辦法是使用靜態內部類

2.多執行緒相關的匿名內部類和非靜態內部類

3.handler記憶體洩漏

handler導致的記憶體洩漏也可以被歸納為非靜態內部類導致的,handler內部message是被儲存在messagequeue中的,有些message不能馬上被處理,存在的時間會很長,導致handler無法被**,如果handler是非靜態的,就會導致它的外部類無法被**,解決辦法是1.使用靜態handler,外部類引用使用弱引用處理2.在退出頁面時移除訊息佇列中的訊息

4.context導致記憶體洩漏

5.靜態view導致洩漏

使用靜態view可以避免每次啟動activity都去讀取並渲染view,但是靜態view會持有activity的引用,導致無法**,解決辦法是在activity銷毀的時候將靜態view設定為null(view一旦被載入到介面中將會持有乙個context物件的引用,在這個例子中,這個context物件是我們的activity,宣告乙個靜態變數引用這個view,也就引用了activity)

6.webview導致的記憶體洩漏

webview只要使用一次,記憶體就不會被釋放,所以webview都存在記憶體洩漏的問題,通常的解決辦法是為webview單開乙個程序,使用aidl進行通訊,根據業務需求在合適的時機釋放掉

7.資源物件未關閉導致

如cursor,file等,內部往往都使用了緩衝,會造成記憶體洩漏,一定要確保關閉它並將引用置為null

8.集合中的物件未清理

集合用於儲存物件,如果集合越來越大,不進行合理的清理,尤其是入股集合是靜態的

9.bitmap導致記憶體洩漏

bitmap是比較佔記憶體的,所以一定要在不使用的時候及時進行清理,避免靜態變數持有大的bitmap物件

10.***未關閉

很多需要register和unregister的系統服務要在合適的時候進行unregister,手動新增的listener也需要及時移除

多執行緒記憶體洩漏 記憶體洩漏的場景和解決辦法

1.非靜態內部類會持有外部類的引用,如果非靜態內部類的例項是靜態的,就會長期的維持著外部類的引用,組織被系統 解決辦法是使用靜態內部類 2.多執行緒相關的匿名內部類和非靜態內部類 3.handler記憶體洩漏 handler導致的記憶體洩漏也可以被歸納為非靜態內部類導致的,handler內部mess...

記憶體洩漏 及 記憶體溢位的區別和解決辦法

1 記憶體洩漏memory leak 是指程式在申請記憶體後,無法釋放已申請的記憶體空間,一次記憶體洩漏似乎不會有大的影響,但記憶體洩漏堆積後的後果就是記憶體溢位。2 記憶體溢位 out of memory 指程式申請記憶體時,沒有足夠的記憶體供申請者使用,或者說,給了你一塊儲存int型別資料的儲存...

C 記憶體洩漏的常規問題和解決辦法

問題 c 記憶體洩漏 原因 記憶體錯誤和並非問題。1,記憶體洩漏 堆疊記憶體沒有釋放,少量一般無事 大量記憶體洩漏 導致記憶體耗盡,後續分配記憶體失敗,程式奔潰。少量記憶體洩漏 程式執行時間長久,也容易奔潰。2,記憶體越界訪問 1 讀越界,讀取不是自己的資料。讀取位址無效,程式直接奔潰。讀取位址有效...