2011-01-04 1 views
4

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

Применение ~ 80.Mb

Тестирование на тренажере с использованием Отчисления на инструменте, показывает мне, что в настоящее время используется около 30 Мб, но при тестировании на IPod 4g с помощью Activity Monitor показывает «физической памяти использовано ~ 133MB» и «Физическая память Free ~ 77Mb "

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

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

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

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

Там нет утечки 100%

+1

Вы должны принять некоторые ответы, чтобы поблагодарить тех, кто вам поможет – Mark

+0

Хорошо, я буду :) – 0xDE4E15B

ответ

12

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

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

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

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

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

Heapshot analysis зверски эффективен при рассмотрении этой проблемы.

+0

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

+0

+1 для анализа Heapshot. – Richard

Смежные вопросы