無論是之前的手機只有 256 M的內存時代,仍是如今已經 8G 都快成普及的時代,內存優化一直以來都是開發過程當中的一個難題。內存的泄漏以及不合理使用,直接帶來的負面影響就是 APP 顯得卡頓了,甚至最後形成 APP 在內存上出現 OOM 而致使的崩潰問題。優化
內存的問題繁多,但總結以及概括出來,比較突出的可能就是這麼幾個點:內存泄漏、頻繁GC,形成卡頓、新版本整體穩定增加、內存碎片。詳見下圖的描述。設計
可能咱們都知道什麼是內存泄漏,但也不妨再看看關於內存泄漏的具體定義。如下先來看看《維基百科》對於內存泄漏的專業解釋。指針
在計算機科學中,內存泄漏指因爲疏忽或錯誤形成程序未能釋放已經再也不使用的內存。內存泄漏並不是指內存在物理上的消失,而是應用程序分配某段內存後,因爲設計錯誤,致使在釋放該段內存以前就失去了對該段內存的控制,從而形成了內存的浪費。 -- 摘自《維基百科》cdn
而在 Android 中,咱們講內存泄漏,主要是指針對 Java 層的內存泄漏。Java 有本身的垃圾回收機制,理論上來講不須要咱們關注內存的分配與回收。但有一些資源或者說就是對象,在使用過程當中因爲長時間被其餘對象所引用,致使其得不到回收而一直佔用着內存,從而引發了相對某個生命週期而言的內存泄漏。對象
如下是 Android 中常見的內存泄漏問題。blog
經過上圖,能夠看出,Android 中常見的內存泄漏基本都是因爲長期持有 Activity 或者 某個組件的 Context 從而致使的內存泄漏。相應的常看法決方案以下。生命週期