優化處理 應用程序的內存使用、空間佔用
避免因不正確使用內存 & 缺乏管理,從而出現 內存泄露(ML)、內存溢出(OOM)、內存空間佔用過大 等問題,最終導致應用程序崩潰(Crash)
下面,將針對回收 進程、對象 、變數的內存分配 & 回收進行詳細講解
由 ActivityManagerService 集中管理 所有進程的內存分配
Android將進程分為5個優先等級,具體如下:
此處僅總結流程,這其中的過程複雜,有興趣的讀者可研究系統源碼ActivityManagerService.java
下面,將詳細講解內存分配 & 內存釋放策略
註:用1個實例講解 內存分配
public class Sample { // 該類的實例對象的成員變數s1、mSample1 & 指向對象存放在堆內存中 int s1 = 0; Sample mSample1 = new Sample();
// 方法中的局部變數s2、mSample2存放在 棧內存 // 變數mSample2所指向的對象實例存放在 堆內存 public void method() { int s2 = 0; Sample mSample2 = new Sample(); } } // 變數mSample3的引用存放在棧內存中 // 變數mSample3所指向的對象實例存放在堆內存 // 該實例的成員變數s1、mSample1也存放在堆內存中 Sample mSample3 = new Sample();
由於靜態分配不需釋放、棧式分配僅 通過幀棧自動出、入棧,較簡單,故不詳細描述
內存溢出 簡介:
關於更加具體的介紹,請看文章:Android性能優化:那些關於Bitmap優化的小事
盡量避免頻繁創建大量、臨時的小對象
註:
此處,還有一些內存優化的小技巧希望告訴給大家
Android 4.0 後提供的一個API
通過分析 Java 進程的內存快照 HPROF 分析,快速計算出在內存中對象佔用的大小,查看哪些對象不能被垃圾收集器回收 & 可通過視圖直觀地查看可能造成這種結果的對象
可查看 分別有哪些類型的數據在堆內存總 & 各種類型數據的佔比情況
至此,關於內存優化的所有知識講解完畢
鏈接:https://www.jianshu.com/p/9745a9375191 轉載請註明原文鏈接
下面我將繼續深入講解 Android中的性能優化知識,有興趣可以繼續關注
推薦閱讀:
TAG:Android開發 | 前端性能優化 | 性能分析 |