單例模式引起記憶體洩漏

2021-09-30 16:46:35 字數 634 閱讀 6597

在csdn上看到了關於懶漢式單例模式直接傳遞context context 物件引起記憶體洩漏的問題。

引起記憶體洩漏是因為例項化單例物件的activity例項因為被單例物件一直持有無法gc導致的記憶體洩漏,總的來說,就是長生命週期物件持有短生命週期物件導致短生命週期物件無法被**。

餓漢式單例模式:如果不需要新建執行緒,不用傳context

/**

* dcl 懶漢模式高階版

*/public class single

public static single getinstance()}}

return instance;

}}

當使用餓漢單例模式,並且需要開啟新執行緒時:

/**

* 需要開啟新執行緒的餓漢模式

*/public class single2

public static single2 getinstance(context context)}}

return instance;

}}

這種方法會導致記憶體溢位,因為context的生命週期長,正確寫法:

或者使用弱引用weakreference。

fast json 引起得記憶體洩漏

最近專案在做壓力測試得時候,發現效能快速劣化,tps很低,到最後系統掛死。通過檢視cpu情況,發現cpu占用非常高,找到暫用cpu的執行緒是gc執行緒 同時檢視系統記憶體gc情況,發現頻繁gc,並且記憶體不能夠 明顯是有了記憶體洩漏的現象,再dump記憶體工具,發現com.alibaba.fastj...

安卓 Handler引起的記憶體洩漏

myhandler activity activity override public void handlemessage message msg 將 改為以上形式之後,就算完成了。還有一種就是當activity銷毀的時候,也就是在ondestroy 方法裡加上 mhandler.removeca...

Android 解決MVP引起的記憶體洩漏

首先不了解mvp模式的孩紙先去看一下mvp再閱讀本部落格嘍。使用mvp模式的主要作用,是它解決了業務邏輯和資料訪問的緊耦合,使presenter作為view和model的中間人,降低了資料和view的耦合度。所以mvp有很多有點 利於維護 易於測試 松耦合 復用性高,易於擴充套件。但由於presen...