參考:https://www.jianshu.com/p/05a83c34a205
概念:
*內存溢出:系統會給每個App分配內存空間也就是heap size值,當app佔用的內存加上申請的內存超過了Dalvik
虛擬機的最大內存時就會拋出Out of Memory異常。
*內存泄漏:當一個對象不再使用時,被應該被垃圾回收器回收,但這個對象由於被其它正在使用的對象所持有,
造成無法被回收,造成內存泄漏,內存泄漏最終會導致內存溢出。
關係:內存泄漏是造成內存溢出的主要原因之一。
危害:
*內存溢出:會觸發java.lang.OutOfMemoryError,造成程序崩潰。
*內存泄漏:過多的內存泄漏會造成內存溢出或者UI卡頓現象。
內存泄漏的原因:
*大量的圖片,音頻,視頻的不合理處理。
*非靜態內部類和匿名內部類Handler,Thread,Runnable等由於持有外部類activity的引用,從而關閉activity時 ,
線程未完成造成內存泄漏。
*資源未及時關閉。(如BroadcastReceiver actiivity關閉時未註銷)
*對static關鍵字的濫用。
*如果使用context儘量使用Application的Context。
*不要使用String進行字符串拼接。
*一些第三方庫