Почему существует разница между зарегистрированным использованием памяти приложением Activity Monitor и инструментом Allocations - PullRequest
4 голосов
/ 04 января 2011

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

Приложение ~ 80.Mb

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

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

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

Ранее я доверял Allocations Instrument, потому что когда я выпускал объекты, объем используемой памяти уменьшался, но в ActivityMonitor объем используемой памяти увеличивается и уменьшается странным образом, который не зависитЯ делаю.Итак, помогите мне понять, потому что я думаю, что выделенная память совпадает с используемой памятью, или я ошибаюсь?

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

Утечек нет 100%

1 Ответ

12 голосов
/ 04 января 2011

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

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

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

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

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

Анализ снимков кучи чрезвычайно эффективен в решении этой проблемы.

...