<b>1.3 新問題的進一步挖掘</b>
上一節介紹了記憶體測試的基本流程,講述了如何發現并處理簡單的記憶體問題。對于dalvik heap部分總結出了一些常見的問題模式,以及如何使用工具識别和處理這些常見的記憶體問題。
當簡單問題不再是問題的時候,我們就會開始遇上一些奇怪問題了,類似于下面這些:
“我們這個版本引入了一個挺簡單的庫,記憶體就漲了2mb。”
“這些代碼隻是初始化了幾個對象,還沒有開始用呢。”
“我隻是改了一行代碼,沒有建立新對象。”
“我一行代碼都沒改,怎麼會漲呢?”
這次出現的問題就是這樣一類問題,新版本的dalvik heap pss記憶體出現了2mb左右的增長,但dalvik heap
alloc隻增長了273kb,而從dalvik heap free也能看出大部分增長的記憶體是處于空閑狀态的。
對問題經過一段時間的觀察,我們有以下幾點發現:
經過較長時間待機後也沒有被釋放回系統。
有幾處代碼會導緻記憶體增長,隻要将這些代碼屏蔽掉,記憶體使用情況就下降到正常水準。
這些代碼配置設定的記憶體并不多,甚至有些地方是不需要配置設定記憶體的。
有些代碼并不是這個版本新加入的,已經存在較長時間了。
使用裁剪功能的方法編譯并分析記憶體後,基本可以确定是新加入代碼消耗了記憶體,但并沒有記憶體洩漏,代碼經過審查也沒有發現問題。
這個結果讓我們陷入了困惑,常用的方法找不出問題,說明有更深層次的原因。接下來要從更底層的dvm虛拟機尋找問題。