Инструменты ObjectAlloc: Объяснение живых байтов и общих байтов


86

Я использую инструмент ObjectAlloc от Instument, чтобы понять, какую память делает мое приложение (iPhone), когда и где оно это делает.

Мне бы очень хотелось получить базовое объяснение этой статистики:

  • Живые байты
  • # Жить
  • # Транзиторий
  • Всего байтов

Когда я пытаюсь вычислить, сколько памяти использует мое приложение, мне нужно посмотреть в байтах в реальном времени или в общих байтах? Это включает утечку памяти? Что такое переходные объекты?

Благодарность


6
столбцы имеют краткие описания, когда вы наводите курсор на их заголовки.
Петр Визия

Ответы:


110

ObjectAlloc отслеживает все выделение и освобождение памяти за время работы вашей программы.

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

#Living- сколько выделений определенного размера / типа объекта произошло (и все еще выделено). Это очень полезно при поиске утечек.

Например, если вы многократно выполняете действие (например, выходите из контроллера модального представления) и видите, что #Livingобъект растет на одну и ту же величину каждый раз, то вы, вероятно, пропускаете эти объекты. Затем вы можете подтвердить, детализировав и просмотрев точную строку кода, которая выделяет объекты, и даже увидеть временной индекс, каждый из которых был создан.

Overall bytesвключает память, которая была освобождена. Это число полезно отслеживать в целях оптимизации производительности, но не в том случае, если вы просто пытаетесь увидеть свой текущий объем памяти или искать утечки.


3
Что бы вы пытались оптимизировать с точки зрения общего количества байтов? Попытка сохранить небольшое количество означает лучшую производительность?
Дэн Розенстарк,

4
Да исправить. Распространенной причиной проблем с производительностью является случайный запуск одного и того же кода более одного раза. Инструмент «Распределение» может быть хорошим способом заметить. Например, даже если дополнительные объекты не просачиваются, вы можете сказать: «Зачем я сделал 3 из этих объектов? Должен был быть только один!»
Кен Аспеслаг,

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

1
@KenAspeslagh, зачем мне заботиться об общих байтах, если он содержит также выпущенные объекты?
Dejell

3
Если вы настраиваете производительность, вы хотите минимизировать количество выделений, которые ваше приложение делает во время работы (даже если вы не пропускаете указанные выделения). Чрезмерное выделение часто может быть индикатором того, что вы делаете это неправильно.
Ken Aspeslagh

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.