天天看點

移動App性能測評與優化1.2.3 示例

<b>1.2.3 示例</b>

1.1節已經介紹了出現記憶體洩漏時的問題及分析方法,在這裡我們再以一個真實的例子介紹常見的幾種記憶體問題和分析方法。

這是發生在手機管家4.x的某個版本上的案例,新版中加入了一些功能,開發人員估計新功能可能會配置設定幾萬位元組到幾十萬位元組的記憶體,是以我們來進行記憶體方面的測試驗證。當新功能的代碼合入後,我們發現應用啟動後的記憶體增長超過了2mb,這可大大超出了所有人的預期,一定是有什麼地方出了嚴重的問題。

由于新加入了好幾個功能,是以要逐個去排查。如果某個新功能的代碼都在同一個package下,那麼就可以使用mat的過濾功能來驗證這部分代碼是否使用了記憶體,如圖1-7所示。

圖1-7 使用mat的過濾功能

經過一番篩選排查,發現記憶體中多出了一些新對象,多消耗了約300kb記憶體,目前這并不能解釋記憶體增長了2mb的原因。但仔細檢查多出來的對象并清理掉不用的部分也是有幫助的。

經過檢查,這部分記憶體是其他新功能使用的。對此我們需要進一步确認,這些對象是否是有用的,還是臨時建立的。對于臨時建立不再使用的對象可以主動銷毀,而對于儲存着資訊将要用到的對象也可以進行進行壓縮裁剪,以進一步減少占用的記憶體。

在以上排查中,我們确實發現了一些問題,但将一些不用的對象清理後再執行測試,總體記憶體并沒有明顯減少。現在看來,dalvik heap裡配置設定的記憶體并沒有增加許多,說明問題是不能隻在dalivk heap裡就能解決的,也許是别的部分出現了問題?接下面我們就繼續深挖下去。

繼續閱讀