Подтвердить что ты не робот

Какая правильная статистика для iOS Memory footprint. Живые байты? Реальная память? Другие?

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

У меня есть приложение для iPad, которое показывает использование "Live Bytes" 6-12mb в инструменте выделения объектов. Если я вытащу монитор памяти или монитор активности, колонка "Реальная память" последовательно поднимается примерно до 80-90 мб после некоторого серьезного использования.

Итак, у меня нормальный размер памяти или высокий?

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

С другой стороны, этот ответ утверждает, что вам нужно обратить внимание на этот монитор памяти, поскольку "Live Bytes" не включает такие элементы, как интерфейсные элементы.

Что такое сделка с памятью iOS?:)

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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