在開發應用程序時,我注意到它最終崩潰,因爲JVM無法分配更多內存。使用adb shell dumpsys meminfo命令,我可以看到分配的本地堆增長,同時切換活動,直到它接近16M時,它崩潰了。我相信我現在已經修正了代碼來阻止這種情況的發生,但是我注意到由..meminfo返回的數字有所不同,現在一般似乎略有上升。如何判斷一個Android應用程序是否確實在泄漏內存?
基本上我不知道他們是否應該在我啓動並停止應用程序時返回相同的值。我有這些數字,我不知道他們是否意味着我有內存泄漏與否:
在主屏幕,內存(PID看到DDMS)應用程序,但沒有運行
亞行外殼dumpsys meminfo中(相關PID)給出:
native dalvik other total
size: 5248 4039 N/A 9287
allocated: 5227 3297 N/A 8524
free: 12 742 N/A 754
(Pss): 2183 3534 1726 7443
(shared dirty): 1976 4640 876 7492
(priv dirty): 2040 1664 940 4644
應用從主屏幕開始,acivities開始依次爲:
閃屏 - >選擇模式 - >活動1,那麼所有的退了出去使用返回按鈕, 直到回到家裏現在creen
meminfo中:
native dalvik other total
size: 5572 4231 N/A 9803
allocated: 5497 3153 N/A 8650
free: 74 1078 N/A 1152
(Pss): 2479 3614 1742 7835
(shared dirty): 1976 4632 876 7484
(priv dirty): 2336 1740 956 5032
過程重複:
native dalvik other total
size: 5696 4231 N/A 9927
allocated: 5211 2949 N/A 8160
free: 392 1282 N/A 1674
(Pss): 2515 3713 1742 7970
(shared dirty): 1976 4632 876 7484
(priv dirty): 2372 1840 956 5168
Eclipse的內存分析工具(我沒有找到所有的信息)以下 「泄漏嫌疑人的報道:
3,143 instances of "java.lang.Class", loaded by "<system class loader>" occupy 736,760 (35.69%) bytes.
Biggest instances:
class com.ibm.icu4jni.util.Resources$DefaultTimeZones @ 0x40158fe0 - 165,488 (8.02%) bytes.
class android.text.Html$HtmlParser @ 0x400eebd8 - 126,592 (6.13%) bytes.
class com.google.googlenav.proto.GmmMessageTypes @ 0x43d183d8 - 56,944 (2.76%) bytes.
class org.apache.harmony.security.fortress.Services @ 0x40071430 - 51,456 (2.49%) bytes.
class android.content.res.Resources @ 0x4004df38 - 33,584 (1.63%) bytes.
class android.text.AutoText @ 0x400f23c8 - 31,344 (1.52%) bytes.
Keywords
java.lang.Class
Details »
Problem Suspect 2
8,067 instances of "java.lang.String", loaded by "<system class loader>" occupy 497,304 (24.09%) bytes.
Keywords
java.lang.String
Details »
Problem Suspect 3
54 instances of "org.bouncycastle.jce.provider.X509CertificateObject", loaded by "<system class loader>" occupy 256,024 (12.40%) bytes. These instances are referenced from one instance of "java.util.HashMap$HashMapEntry[]", loaded by "<system class loader>"
Keywords
org.bouncycastle.jce.provider.X509CertificateObject
java.util.HashMap$HashMapEntry[]
所有意見將會感激地收到
請參閱此相關的問題:http://stackoverflow.com/questions/1147172/what-android-tools-and-methods最好找到內存資源泄漏 – 2011-02-23 22:34:24
@Mayra:謝謝你的指針。 '分配跟蹤器'看起來很有前景。我明天會調查一下。 – NickT 2011-02-23 23:03:24