Instruments ObjectAlloc: Пояснення живих байт та загальних байтів


86

Я використовую інструмент ObjectAlloc від Instument, намагаючись зрозуміти, якою пам'яттю працює моя програма (iPhone), і коли, і де вона це робить.

Я б дуже хотів отримати базове пояснення цієї статистики:

  • Живі байти
  • # Жити
  • # Перехідний
  • Загальний байт

Коли я намагаюся визначити, скільки пам'яті використовує моя програма, чи слід мені дивитись на байти в реальному часі чи загальні байти? Чи включає це витік пам'яті? Що таке перехідні об'єкти?

Дякую


6
стовпці мають короткі описи, коли ви наводите курсор на їх заголовки.
Piotr Byzia

Відповіді:


110

ObjectAlloc відстежує весь розподіл пам’яті та звільнення пам’яті протягом часу роботи вашої програми.

Це Living bytes, or Net bytesте, скільки пам'яті використовує ваша програма під час, який ви вибрали на шкалі часу. Це включатиме витоку пам'яті, оскільки витікання пам’яті ніколи не звільняється.

#Living- це кількість виділень певного розміру / типу об’єкта (і все ще виділяється). Це дуже корисно при пошуку витоків.

Наприклад, якщо ви повторно виконуєте дію (наприклад, виходить з контролера модального перегляду), і ви бачите, що #Livingоб'єкт щоразу зростає на однакову величину, то ви, мабуть, витікаєте з цих об'єктів. Потім ви можете підтвердити, детально розглянувши і побачивши точний рядок коду, який розподіляє об’єкти, і навіть побачити часовий індекс, створений кожним з них.

Overall bytesвключає звільнену пам’ять. Корисно відстежувати це число для цілей оптимізації продуктивності, але не якщо ви просто намагаєтесь побачити ваш поточний розмір пам'яті або шукати витоки.


3
Що б ви намагалися оптимізувати з точки зору загальних байтів? Намагання зберегти кількість невеликою означає кращу продуктивність?
Dan Rosenstark,

4
Так вірно. Поширеною причиною проблем із продуктивністю є випадковий запуск того самого коду більше одного разу. Інструмент "Розподіли" може бути хорошим способом помітити. Наприклад, навіть якщо зайві об'єкти не просочуються, ви можете сказати: "Чому я зробив 3 із цього об'єкта? Мав бути лише один!"
Кен Аспеслаг

2
Живі байти - це обсяг пам'яті, який зараз використовує ваш додаток. Загальне - це лише загальна сума всіх розподілів, які зробив ваш додаток (включаючи пам’ять, яка з тих пір була звільнена.)
Кен Аспеслаг,

1
@KenAspeslagh, чому б я піклувався про загальні байти, якщо вони також містять випущені об'єкти?
Деджелл,

3
Якщо ви налаштовуєтесь на продуктивність, то ви хочете мінімізувати кількість розподілів, які ваша програма робить під час роботи (навіть якщо ви не пропускаєте зазначені розподіли.) Надмірне розподілення часто може бути показником того, що ви робите це неправильно.
Кен Аспеслаг

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.