Дампы кучи и памяти используют расхождения в андроиде? - PullRequest
1 голос
/ 30 декабря 2010

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

Я бездельничаю с живыми обоями для Android 2.1+ Все шло довольно хорошо, пока я не начал получать ошибку OOM:

Java.lang.OutOfMemoryError: bitmap size exceeds VM budget

Хорошо. Я провел исследование и обнаружил, что у меня наверняка есть утечка памяти. Поэтому я прочитал о том, как анализировать такие проблемы, открыл DDMS и сделал дамп кучи. Размер кучи обычно составляет около 4,5-5 МБ и никогда не превышает 60%. Это не имело смысла, потому что я проверил работающие сервисы на своем телефоне для разработки, и он сообщил, что мой процесс использует 35-42 МБ памяти.

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

Ответы [ 2 ]

0 голосов
/ 31 декабря 2010

Спасибо satur9nine, после публикации этого сообщения я действительно немного покопался и, наконец, понял, что происходит (конечно, это было после того, как я опубликовал вопрос, go figure ).

Я обнаружил, что использование памяти, указанное в диспетчере служб в Android, называется Native Heap. Это размер кучи + растровые изображения (возможно, между прочим?). Но я все еще был немного озадачен тем, почему иногда было больше 40 МБ, когда загружаемые мной изображения составляли всего ~ 900 КБ. Когда он щелкнул, изображения больше не остаются сжатыми при загрузке в память. Таким образом, моя загрузка примерно 30 маленьких PNG занимала огромный объем памяти.

Я ездил на велосипеде через каждый из этих PNG, чтобы сделать анимацию Дождя. В то время я не осознавал, что это плохая стратегия. Как только я понял, что это проблема, я удалил ее и написал простую маленькую «Систему частиц», чтобы создать хорошую анимацию дождя с одним значком частиц, загруженным в память!

0 голосов
/ 31 декабря 2010

Я предполагаю, что вы уже сделали это, но на всякий случай ... вы исследовали строку, которая вызвала OutOfMemoryError?Насколько велик растровое изображение, которое вы пытаетесь создать?

Если это утечка, вот статья, которая может помочь вам проанализировать дамп кучи (вам не придется использовать eclipse, несмотря на название статьи):

Android ==> Анализ памяти ==> Анализатор памяти Eclipse?

Удачи.

...