Почему существует разница между отчетами об использовании памяти приложением Activity Monitor и Allocations Instrument

Я столкнулся с довольно странной проблемой.

Приложение ~80.Мб

Тестирование на симуляторе с использованием Allocations Instrument показывает, что в настоящее время используется около 30 МБ, но при тестировании на iPod 4g с помощью Activity Monitor показывает «Используется физическая память ~ 133 МБ» и «Физическая память свободна ~ 77 МБ».

Из-за предупреждений о памяти мое приложение постоянно падает.

В чем разница между физической памятью, используемой в ActivityMonitor и инструменте распределения?

Раньше я доверял Allocations Instrument, потому что когда я освобождал объекты, объем используемой памяти уменьшался, но в ActivityMonitor объем ИСПОЛЬЗУЕМОЙ памяти увеличивается и уменьшается странным образом, не зависящим от того, что я делаю. Итак, помогите мне понять, потому что я думаю, что выделенная память такая же, как и используемая память, или я ошибаюсь?

Изменить: Кажется, я понял, как данные отображаются в мониторе активности. Но проблема сохраняется. В ActivityMonitor есть столбец под графиком. Там я нашел свое приложение. А там память только прибавляется.

Утечек нет 100%


person 0xDE4E15B    schedule 04.01.2011    source источник
comment
Вы должны принять некоторые ответы, чтобы поблагодарить тех, кто помогает вам   -  person mmmmmm    schedule 04.01.2011


Ответы (1)


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

AM как бы суммирует набор различных чисел, связанных с памятью. Это очень грубое число. Инструмент Allocations обобщает именно набор распределений в вашем приложении (которое в Mac OS X может включать в себя как GC, так и не GC-выделения). Уменьшите выделение, и общее использование памяти, как правило, снизится.

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

Также обратите внимание, что «100% утечек нет» — это лишь около 10% общих усилий по сокращению использования памяти. Ваше приложение отбрасывается из-за вопиющего потребления памяти. Это либо из-за архитектурной проблемы, когда алгоритмы вашего приложения используют много памяти, либо из-за того, что ваше приложение выделяет и отказывается от памяти. Заброшенная память может не отображаться как утечка; если у вас есть, скажем, кеш только для записи, в котором дубликаты элемента помещаются в кеш снова и снова, но никогда не извлекаются, использование вашей памяти будет расти до отказа, но утечки не будут показывать никаких утечек.

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

Heapshot-анализ крайне эффективен при выявлении подобных проблем.

person bbum    schedule 04.01.2011
comment
Кажется, ты прав! Поскольку приложение создает 4 изображения с анимацией, каждая анимация имеет 30 кадров. - person 0xDE4E15B; 04.01.2011