Измерить (Android) фрагментацию кучи?

У нас есть приложение с большим количеством растровых изображений в памяти. Он продолжает терпеть неудачу с

java.lang.OutOfMemoryError: bitmap size exceeds VM budget

ошибки. Возможно, мы действительно используем слишком много памяти; возможно, у нас происходит утечка памяти; также возможно, что мы не делаем ничего плохого, и нас убивает фрагментация кучи. (Поскольку сборщик мусора Android не перемещает активные блоки, у нас могут быть свободные мегабайты, и мы не сможем выделить 50 КБ.)

Есть ли способ исключить фрагментацию? Я искал что-то вроде maxAvail/memAvail, но не нашел ничего подходящего.


person Jon Shemitz    schedule 02.12.2011    source источник


Ответы (1)


Я хотел бы изучить кучу через MAT. Анализатор памяти Eclipse поможет вам определить, какие из предложенных проблем у вас действительно есть.

На Google I/O 2011 состоялся доклад, в котором были рассмотрены некоторые основы управления памятью и отладки. Вы можете посмотреть его онлайн здесь: http://www.youtube.com/watch?v=_CruQY55HOk&feature=relmfu

person smith324    schedule 10.12.2011
comment
Спасибо. Я вернусь к этому как можно скорее и либо приму ваш ответ, либо опубликую дополнительные комментарии. - person Jon Shemitz; 13.12.2011
comment
Когда MAT показывает, что вы используете 5M из 32 или 64 и получаете OOM при выделении 2M, трудно сделать вывод, что это что-то иное, кроме фрагментации. - person Jon Shemitz; 06.04.2012