Отслеживание использования памяти

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

Отслеживание выделений с инструментами

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

Можно добавить любые из этих инструментов к единственному документу трассировки и собрать данные для каждого из них одновременно. Способность собрать данные одновременно позволяет Вам коррелировать информацию от одного инструмента с другими. Например, инструмент Утечек часто объединяется с инструментом ObjectAlloc так, чтобы можно было и отследить выделения и узнать, которые были пропущены.

После собирающихся данных для Вашего приложения необходимо проанализировать его. Следующие разделы обеспечивают подсказки относительно того, как проанализировать данные с помощью нескольких из связанных с памятью инструментов. Для получения информации о том, как использовать инструмент Утечек, посмотрите, что Утечки Открытия Используют Инструменты.

Анализ выделений памяти с инструментом ObjectAlloc

Вы используете инструмент ObjectAlloc для отслеживания действия выделения памяти для приложения. Этот инструмент отслеживает выделения памяти со времени, Ваше приложение запускается, пока Вы не прекращаете записывать данные. Инструмент показывает Вам выделения с точки зрения числа создаваемых объектов и размер (или тип) создававшихся объектов. В режиме просмотра значка, приборные панели гистограмма в реальном времени, позволяющая Вам видеть изменения и тренды непосредственно, как они происходят. Это также сохраняет историю выделений и освобождения, давая Вам возможность возвратиться и видеть, где были выделены те объекты.

Информация, выведенная на экран инструментом ObjectAlloc, зарегистрирована средством статистики выделения, встроенным в Базовую платформу Основы. Когда это средство активно, каждое выделение и освобождение зарегистрированы, как это происходит.

Анализ использования общей памяти

Для приложений Mac инструмент Общей памяти отслеживает вызовы любому shm_open и shm_unlink функции, использующиеся для открытия и закрытия областей общей памяти в системе. Можно использовать эту информацию для обнаружения, где приложение получает ссылки на области общей памяти и исследовать, как часто выполняются те вызовы. Подробная область выводит на экран список каждого вызова функции вместе с информацией о среде вызова во время вызова. В частности область перечисляет исполнимую программу, инициировавшую вызов и параметры функции. Открытие области Extended Detail показывает отслеживание стека, связанное с вызовом.

Анализ данных от инструмента монитора памяти

Для приложений Mac приборные панели Монитора памяти сортировали статистику об использовании системной памяти. Можно использовать этот инструмент для просмотра трендов использования памяти в приложении или во всей системе. Например, Вы видите, сколько памяти в настоящее время активно, неактивно, соединена проводом, и свободен. Можно также видеть объем памяти, разбитый на страницы в или. Вы могли бы использовать этот инструмент в сочетании с другими инструментами для отслеживания объема памяти использование приложения относительно определенных операций.

Отслеживание Выделений памяти С malloc_history

В OS X, malloc_history инструмент выводит на экран данные следа, показывающие точно, где Ваша программа выполнила вызовы к malloc и free функции. Если Вы указываете адрес при вызове malloc_history, инструмент отслеживает выделения памяти, происходящие в том адресе только. Если Вы указываете -all_by_size или -all_by_count опции, инструмент выводит на экран все выделения, собирая в группу частые выделения.

Перед использованием malloc_history инструмент на Вашей программе, необходимо сначала активировать malloc опции журналирования библиотеки путем установки MallocStackLogging к 1. Можно также хотеть установить MallocStackLoggingNoCompact переменная окружения для сохранения информации об освобожденных блоках. Для получения дополнительной информации об этих переменных посмотрите Включение Функций отладки Malloc.

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

malloc_history инструмент также подходит для ситуаций, где не могут использоваться Сэмплер или MallocDebug. Например, Вы могли бы использовать этот инструмент от удаленного компьютера или в ситуациях, где Вы хотите минимальное влияние на поведение Вашей программы.

Для получения дополнительной информации об использовании malloc_history инструмент, посмотрите malloc_history страница справочника.

Исследование Памяти С Инструментом «кучи»

В OS X, heap инструмент командной строки выводит на экран снимок памяти, выделенной malloc библиотекой и расположенной в адресном пространстве указанного процесса. Для приложений Какао этот инструмент идентифицирует объекты Objective C по имени. И для блоков памяти и для объектов, инструмент организует информацию «кучей», показывая все элементы в той же «куче» вместе.

heap инструмент предоставляет большую часть той же информации как инструмент ObjectAlloc, но делает так намного менее навязчивым способом. Можно использовать этот инструмент с удаленного сеанса или в ситуациях, где использование Инструментов могло бы замедлить система вниз достаточно для влияния на получающийся вывод.

Для получения дополнительной информации об использовании heap инструмент, посмотрите heap(1) страница справочника.