Какая статистика для iOS Память.Живые байты?Реальная память?Другой? - PullRequest
26 голосов
/ 12 марта 2012

Я определенно запутался в этом вопросе.

У меня есть приложение для iPad, которое показывает использование «живых байтов» 6-12 МБ в инструменте выделения объектов.Если я поднимаю монитор памяти или монитор активности, столбец «Реальная память» последовательно поднимается до 80-90 Мб после некоторого серьезного использования.

Так у меня нормальный объем памяти или высокий?

Этот ответ и этот ответ утверждают, что вы должны смотреть «Живые байты», поскольку в столбце «Реальная память» показаны освобожденные блоки памяти, но ОС невсе же восстановил его.

С другой стороны, этот ответ утверждает, что вам необходимо обратить внимание на этот монитор памяти, поскольку «Живые байты» не включают в себя такие вещи, как элементы интерфейса.

Как обстоят дела с объемом памяти iOS!? :)

Ответы [ 3 ]

13 голосов
/ 12 марта 2012

Видя, как я написал последний ответ , на который вы ссылались, мне придется придерживаться этого.Если вам нужен полный и точный подсчет текущего использования памяти для вашего приложения, используйте инструмент Memory Monitor.

По причинам, которые я описываю в в этом ответе , Allocations скрывает размеры памятинекоторые элементы, что означает, что его общее использование памяти значительно ниже, чем объем памяти вашего приложения.Многие люди сталкиваются с трудностями, пытаясь настроить свое приложение на старых устройствах iOS.На старом оборудовании у вас был жесткий потолок памяти ~ 30 МБ, при превышении которого ваше приложение было убито жестко.

Многие разработчики (включая меня) увидели, что у нас было всего ~ 1-2 МБ живых байтов в распределении, и подумали, что мы хороши, пока наши приложения не начали получать предупреждения о памяти и досрочные завершения.Если вы посмотрите на монитор памяти, вы увидите, что истинный объем этих приложений в памяти составляет> 20 МБ, и вы можете увидеть, что приложения закрываются в тот момент, когда они пересекли барьер 30 МБ в мониторе памяти.

Поэтому, если вы хотите получить точную оценку общего объема используемой памяти приложения, используйте Memory Monitor.Распределение отлично подходит для поиска конкретных объектов, находящихся в памяти, особенно когда вы используете снимки кучи для поиска вещей, которые могут накапливаться (например, утечки, сохранение циклов или по другим причинам).Просто не доверяйте этому при определении реального размера вашего приложения в памяти.

13 голосов
/ 12 марта 2012

Это просто две разные метрики для измерения использования памяти. Какой из них «правильный», зависит от того, на какой вопрос вы пытаетесь ответить.

В двух словах, разница между «живыми байтами» и «реальной памятью» - это разница между объемом памяти, используемой в настоящее время для материалов, созданных вашим приложением, и общим объемом физической памяти, в настоящее время присваиваемой вашему приложению. Есть как минимум две причины, по которым они различаются:

  • код: Конечно, код вашего приложения должен быть загружен в память, и система виртуальной памяти наверняка приписывает это приложению, даже если это не память, выделенная приложением.

  • пулы памяти: Большинство распределителей работают, поддерживая один или несколько пулов памяти, из которых они могут выделять фрагменты для отдельных объектов или выделенных блоков памяти. Большинство реализаций malloc работают таким образом, и я ожидаю, что распределитель объектов тоже работает. Размер этих пулов не уменьшается автоматически, когда объект освобождается - память просто помечается как «свободная» в пуле, но весь пул все равно будет привязан к вашему приложению.

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

Итак, что вы пытаетесь узнать о вашем приложении? Если вы пытаетесь выяснить, почему ваше приложение рухнуло из-за нехватки памяти, посмотрите на «живые байты» (чтобы увидеть, что ваше приложение сейчас использует) и на «реальную память» (чтобы узнать, сколько памяти система виртуальных машин говорит вам. приложение использует). Если вы пытаетесь улучшить производительность памяти своего приложения, более вероятно, что использование «живых байтов» или «живых объектов» поможет, так как с этой памятью вы можете что-то делать.

1 голос
/ 12 марта 2012

«Живые байты» означают память, выделенную вашим кодом (например, malloc), поэтому у вас есть доступ к этой памяти. «Реальная память» показывает физический объем памяти, используемый вашим приложением. Сюда входят также текстуры OpenGL, (возможно) звуки из Open AL ...

Живые байты полезны для проверки, когда вы выделяете и освобождаете память в своем коде. Реальная память - хороший показатель эффективности оптимизации памяти. И это накладные расходы вызывает предупреждения «недостаточно памяти».

...