2013-04-25 64 views
1

我幾個月前在Google Play上發佈了一個應用程序,我的大部分用戶都對我的應用程序的內存使用有嚴重問題,這是真的,因爲當我檢查了我的內存使用情況從「運行的應用程序」標籤,我看到,它利用存儲器80〜110MB,像下面的圖片:尋找浪費內存的課程

enter image description here

爲了找到類/活動或代碼片段引起該問題我發現MAT(內存分析工具)插件有用,但它確實讓我感到困惑,請考慮到以下圖像:

enter image description here

使用的內存的總大小爲9.8MB然而「運行應用程序」選項卡顯示我80MB在同一時間!

另一個問題是柱狀圖,淺堆byte[]對象太高。

這是正常的嗎?另外,當我調試一些Google項目時,字節值總是太高!

enter image description here

所以我怎麼能找到什麼是使用所有這些記憶?

+0

你檢查了[這個問題](http://stackoverflow.com/questions/6080906/memory-analyzer-tool-in-android?lq=1)?這聽起來像你想要的。 – thegrinner 2013-09-17 20:47:35

+0

這裏要澄清一下,您是否嘗試過常規調試?你期望使用那個空間,搜索byte []等的代碼。 – clwhisk 2013-09-22 02:40:38

回答

2

當一個Android應用程序啓動時,它繼承了由Zygote分配的對象 - 這是使應用程序產卵速度更快的技巧。所以當你得到一個內存轉儲時,它們會顯示爲你自己的。

爲什麼Zygote有這麼多的內存分配的答案是讓resource加載更快的另一個訣竅。在Android啓動期間,Zygote 預加載一些類和資源的列表,因此所有其他應用程序不需要每次加載它們。

參見ZygoteInit.java#330用於實施這種預加載。

大量使用字節數組是由於此預加載的資源(它是位圖)。

查看此answer以獲取來自權威資源的MAT /字節數組使用情況分析的更具體示例。

0

您是否嘗試過使用visual vm?這裏有一個很好的教程來找出類和實例的內存使用情況(visual vm tutorial)。希望這可以幫助你。