Дампы кучи и памяти используют расхождения в андроиде?

1

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

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

Java.lang.OutOfMemoryError: bitmap size exceeds VM budget

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

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

Теги:
memory-leaks
memory
heap

2 ответа

0

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

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

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

  • 0
    Рад, что ты решил свою проблему. Я не удивлен, что это не было на самом деле утечка. Обычно вам приходится изо всех сил пытаться утечки памяти в Java.
0

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

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

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

Удачи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню