Защо има разлика между отчетеното използване на паметта на приложение от Activity Monitor и Allocations Instrument

Изправен съм пред доста странен проблем.

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

Тестването на симулатор с помощта на Allocations Instrument ми показва, че в момента се използват около 30 Mb, но при тестване на iPod 4g с помощта на Activity Monitor показва „Използвана физическа памет ~ 133 Mb“ и „Свободна физическа памет ~ 77 Mb“

Поради предупрежденията за паметта приложението ми постоянно се срива.

Каква е разликата между физическата памет, използвана в ActivityMonitor и инструмента за разпределение?

По-рано имах доверие на Allocations Instrument, защото когато освобождавах обекти, обемът на използваната памет намаляваше, но в ActivityMonitor размерът на ИЗПОЛЗВАНА памет се увеличава и намалява по странен начин, който не зависи от това, което правя. И така, помогнете ми да разбера, защото мисля, че разпределената памет е същата като използваната, или греша?

Редактиране: Изглежда разбрах начина, по който данните се показват в активността. Но проблемът продължава. В ActivityMonitor има колона под графиката. Там намерих своето приложение. И там паметта само се увеличава.

Няма течове 100%


person 0xDE4E15B    schedule 04.01.2011    source източник
comment
Трябва да приемете някои отговори, за да благодарите на тези, които ви помагат   -  person mmmmmm    schedule 04.01.2011


Отговори (1)


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

AM е нещо като обобщение на набор от различни числа, свързани с паметта. Това е много грубо число. Инструментът за разпределения обобщава точно набора от разпределения във вашето приложение (което под Mac OS X може да включва както GC, така и не-GC разпределения). Намалете разпределенията и общото използване на паметта като цяло ще намалее.

Имайте предвид, че система, която не е под натиск на паметта, често няма да поиска приложенията да върнат паметта. Това означава, че може да не видите спад в числата на мониторите за активност.

Имайте предвид също, че „няма течове 100%“ е само около 10% от общите усилия за намаляване на използването на паметта. Вашето приложение се изхвърля поради невероятна консумация на памет. Това е или поради архитектурен проблем, при който алгоритмите на приложението ви използват твърде много памет, или защото приложението ви разпределя и изоставя памет. Изоставената памет може да не се покаже като изтичане; ако имате, да речем, кеш само за запис, където дубликати на даден елемент се поставят в кеша отново и отново, но никога не се извличат, използването на паметта ви ще нарасне до неуспех, но течовете няма да покажат течове.

Течът е просто обект, за който няма жизнеспособни препратки. Жизнеспособно рефериран обект все още може ефективно да е теч!

Анализът Heapshot е брутално ефективен при откриването на този вид проблем.

person bbum    schedule 04.01.2011
comment
Изглежда си прав! Тъй като приложението създава 4 изображения с анимация, всяка от анимациите има 30 кадъра. - person 0xDE4E15B; 04.01.2011