Почему мое приложение для Android использует так много памяти при запуске - PullRequest
3 голосов
/ 16 апреля 2011

Я некоторое время изучал проблему утечки памяти.

Я обнаружил в Интернете поток прикрытия с http://www.inter -fuser.com / 2010/02 / android-coverflow-widget-v2.html

Теперь у меня сложилось впечатление, что это приложение вызывает у меня проблемы с памятью, и все еще возможно, что оно как-то связано с этим. Тем не менее, я удалил все из моего приложения, кроме заставки. Других видов деятельности нет. и ничего не делает ......

Начальное намерение загружает действие Заставки.

Мое приложение использует от 79 до 83 процентов моей доступной кучи. Телефон дал мне 2.816M, и я, по-видимому, выделил 2.278M в этом последнем запуске.

Во-первых, 3M свободного места для запуска приложения выглядит не так уж много. Однако 2.2M, загруженный в память при начальной загрузке, выглядит как тонна потребляемой памяти, когда единственное, что я делаю, это загружаю отдельное действие с изображением, указывающим на ресурс значка, измеренный в пределах 4k ......

Как / Почему мое приложение использует столько памяти впустую, и как я могу снизить потребление памяти на 80% при загрузке.

Я работаю на T-Mobile G2, и у меня ничего не работает, кроме этого приложения и сервисов по умолчанию, которые работают на дроиде.

вот некоторая информация о моем дампе памяти

подозреваемый 1

2,239 instances of "java.lang.Class", loaded by "<system class loader>" occupy 673,760 (35.83%) bytes.

Biggest instances:

class com.ibm.icu4jni.util.Resources$DefaultTimeZones @ 0x401dc878 - 166,600 (8.86%) bytes.
class android.text.Html$HtmlParser @ 0x4010de58 - 126,592 (6.73%) bytes.
class org.apache.harmony.security.fortress.Services @ 0x4007fd98 - 51,456 (2.74%) bytes.
class android.content.res.Resources @ 0x4004bb78 - 38,768 (2.06%) bytes.
class com.abc.AppData @ 0x44d1e040 - 26,872 (1.43%) bytes.


Keywords
java.lang.Class

подозреваемый 2

7,072 instances of "java.lang.String", loaded by "<system class loader>" occupy 435,560 (23.16%) bytes. 

Keywords
java.lang.String

подозреваемый 3

58 instances of "org.bouncycastle.jce.provider.X509CertificateObject", loaded by "<system class loader>" occupy 289,288 (15.38%) bytes. These instances are referenced from one instance of "java.util.Hashtable$HashtableEntry[]", loaded by "<system class loader>"

Keywords
org.bouncycastle.jce.provider.X509CertificateObject
java.util.Hashtable$HashtableEntry[]

Как вы можете видеть, система загружается и использует всю предоставленную мне память. Как я могу получить это, чтобы дать мне больше памяти. 3 мег это не очень много для работы. и я пытаюсь показать галерею изображений.

Ответы [ 2 ]

1 голос
/ 16 апреля 2011

Я сталкивался с утечками памяти в прошлом, но не с Android.В прошлом я использовал инструмент анализатора памяти Eclipse (вторая ссылка), который я нашел очень полезным.Чтобы использовать его, вам нужно сгенерировать файл дампа кучи (или снимок памяти), в блоге рассказывается, как это сделать (первая ссылка).

http://www.andorfi.net/2011/03/memory-analysis-for-android-applications/

http://www.eclipse.org/mat/

0 голосов
/ 16 апреля 2011

Советы по отладке и ведению журнала могут помочь лучше понять.

https://market.android.com/details?id=org.jtb.alogcat

http://developer.android.com/guide/developing/debugging/index.html

...