Hprof что за файл android

Русские Блоги

Android Studio-HPROF инструмент для просмотра и анализа файлов

Когда вы используете инструмент «Монитор памяти» в Android Monitor для мониторинга использования памяти в Android Studio, вы можете записать снимок кучи Java в файл Android HPROF (Примечание переводчика: стандартный формат отличается от стандартного формата файла java hprof). Средство просмотра HPROF перечислит классы, экземпляры классов и деревья ссылок на экземпляры, чтобы помочь вам отслеживать использование памяти и обнаруживать утечки памяти. HPROF изначально был двоичным форматом дампа кучи, поддерживаемым J2SE.

Почему я должен проверить кучу Java

Куча Java отображает следующую информацию:

  • Отображение использования памяти экземплярами объектов по классам;
  • Пример данных для каждого события сборки мусора, будь то системное или ручное событие сбора мусора;
  • Помогите проанализировать, какие типы объектов могут вызвать утечки памяти.

Однако файл HPROF показывает только использование кучи Java в определенный момент.Если вам необходимо понять использование кучи Java в определенный период времени, вам необходимо выяснить изменения, проанализировав файлы HPROF, созданные в разные моменты времени. Инструмент анализа HPROF может автоматически анализировать следующие два типа проблем:

  • Все случаи Деятельности, которые были уничтожены, но не могут быть восстановлены;
  • Повторно определенная строка.

Понимать отображение инструмента просмотра файлов HPROF

Интерфейс средства просмотра файлов HPROF выглядит следующим образом:

Средство просмотра файлов HPROF

Этот инструмент отображает следующую информацию:

название описание
Class name Имя класса
Total Count Общее количество экземпляров этого класса
Heap Count Количество экземпляров этого класса в выбранной куче
Sizeof Размер пространства, занимаемого одним экземпляром (если размер пространства, занимаемого каждым экземпляром, отличается, отображается 0)
Shallow Size Общий размер всех экземпляров в куче (количество кучи * Sizeof)
Retained Size Объем памяти, в котором доминируют все экземпляры этого класса
Instance Конкретный пример
Reference Tree Ссылка на выбранный экземпляр и ссылка на эту ссылку.
Depth Глубина кратчайшего пути от корневого узла GC до выбранного экземпляра
Shallow Size Размер выбранного экземпляра
Dominating Size Объем памяти, в котором доминирует выбранный экземпляр

Если щелкнуть «Задачи анализатора», отобразится инструмент анализа HPROF. Интерфейс показан на правой стороне рисунка ниже:

Инструмент анализа файлов HPROF

С помощью инструмента анализа HPROF вы можете обнаружить пропущенные действия и проанализировать неоднократно определенные строки символов.

Получить и отобразить снимок кучи Java

Чтобы просмотреть снимок кучи Java, необходимо выполнить следующие два шага:

  1. Отобразить запущенную программу в инструменте мониторинга памяти
  2. Нажмите кнопку дампа кучи Java
    После успешного завершения дампа значок, отображаемый на этом мониторе памяти, изменится. Формат имени файла HPROF, созданный Android-студией, называется package_yyyy.mm.dd_hh.mm.ss.hprof, который называется с использованием имени пакета и времени дампа, например, com.android.calc_2015.11.17_14.58.48.hprof.

Просмотр сохраненного файла HPROF

После дампа кучи Android Studio автоматически сохранит файл HPROF, чтобы вы могли просмотреть его снова. Шаги для просмотра файлов HPROF с помощью инструмента просмотра HPROF:

  1. Нажмите кнопку «Захваты» в главном окне или выберите «Вид»> «Инструменты»> «Захваты», чтобы открыть окно «Захваты»;
  2. Откройте папку со снимком кучи;
  3. Дважды щелкните файл HPROF, который вы хотите просмотреть, чтобы открыть интерфейс инструмента просмотра файлов HPROF;
  4. Выберите кучу, которую вы хотите просмотреть
    • Куча приложения — куча, используемая текущим приложением
    • Изображение кучи — отображение памяти текущего приложения на жестком диске
    • Zygote heap-zygote Набор данных библиотек, классов времени выполнения и констант, унаследованных при копировании. Пространство зиготы создается при запуске устройства и никогда не выделяет здесь места.
  5. Выберите параметр просмотра, который хотите просмотреть:
    • Class List View
    • Package Tree View

Анализ данных в инструменте просмотра файлов HPROF

Следующие шаги являются типичными рабочими процессами:

  1. Выберите имя класса в инструменте просмотра файлов HPROF;
  2. Выберите экземпляр этого класса;
  3. Просмотреть справочное дерево;
  4. При необходимости вы можете щелкнуть правой кнопкой мыши на записи дерева, чтобы перейти к исходному коду или экземпляру.

Анализ данных в инструменте анализа файлов HPROF

С помощью инструмента анализа HPROF вы можете обнаружить утечки и проанализировать повторяющиеся строки определения. Стандартная процедура использования инструмента анализа файлов HPROF выглядит следующим образом:

  1. Откройте окно Captures и дважды щелкните файл HPROF, который вы хотите просмотреть, чтобы открыть интерфейс инструмента просмотра файлов HPROF;
  2. Нажмите «Задачи анализатора» в правой панели главного окна Android Studio. По умолчанию инструмент анализа файлов HPROF появится справа от инструмента просмотра файлов HPROF.
  3. Выберите опцию, которую вы хотите проанализировать в списке задач анализатора;
  4. Нажмите кнопку, чтобы начать анализ;
  5. Просмотрите результаты анализа, щелкните записи в результатах, чтобы просмотреть подробности в инструменте анализа файлов HPROF.

Сортировка данных

В инструменте просмотра файлов HPROF нажмите на верхнюю часть таблицы, чтобы создать таблицуДанныеСортировка по возрастанию или сортировка.

Показать исходный код Java

Некоторые элементы, отображаемые в средстве просмотра файлов HPROF, могут напрямую перейти к исходному коду, щелкнуть правой кнопкой мыши проект и выбрать Перейти к исходному тексту.Редактор кодаОткройте исходный код.

Операции с файлами HPROF

В Android Studio вы можете переименовать, найти или удалить файл HPROF, а также преобразовать его в стандартный формат файла HPROF, чтобы использовать другие инструменты анализа для анализа.

Переименовать файл HPROF

Файл HPROF, переименованный в Android Studio, по-прежнему будет отображаться в окне «Захваты».
Выберите файл, с которым вы хотите работать, в списке файлов HPROF в окне Captures, щелкните правой кнопкой мыши Rename

Найдите файлы HPROF

Вы можете быстро найти место, где Android Studio хранит файлы HPROF. Выберите файл, с которым вы хотите работать, в списке файлов HPROF в окне Captures, щелкните правой кнопкой мыши шоу в проводнике, Android Studio откроет системуФайловый браузерПерейдите в место, где хранится файл.

Примечание. Android Studio не может отображать файлы HPROF, которые были перемещены в другие пути в окне «Захваты». Если вы хотите отобразить их, используйте «Файл»> «Открыть». Аналогично, не используйте системный браузер файлов для переименования файлов HPROF.

Удалить файл HPROF

Выберите файл, которым вы хотите управлять, в списке файлов HPROF в окне Captures, щелкните правой кнопкой мыши Delete, и Android Studio удалит файл из окна Captures и жесткого диска.

Преобразование файлов дампа кучи в стандартные файлы HPROF

После преобразования в стандартный файл HPROF его можно проанализировать с помощью инструментов анализа, отличных от Android Studio. Выберите файл, с которым вы хотите работать, в списке файлов HPROF в окне Captures, щелкните правой кнопкой мыши Export to standard .hprof.

Источник

Анализ памяти для Android приложений

В Dalvik есть сборщик мусора, но это не значит, что можно игнорировать управление памятью. Даже наоборот — нужно быть особенно внимательным при использовании памяти, которая, как известно, на мобильных устройствах ограничена. В этой статье будут рассмотрены инструменты, которые значительно помогают следить за тем, как приложение использует память.

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

Инструменты

Android SDK обеспечивает два основных устройства для профилирования использования памяти приложением: вкладка Allocation Tracker в DDMS и дампы кучи (heap dumps). Allocation Tracker может быть полезен в том случае, когда вы хотите узнать об использовании памяти в конкретный период времени, так как он не дает информации о полном состояния кучи, которая выделяется под приложение. За более подробной информацией об Allocation Tracker можно обратиться к статье Tracking Memory Allocations. Остальная часть этой статьи будет посвящена исследования дампов кучи, так как это более мощный инструмент.

Дамп кучи — это снимок состояния всей кучи приложения, который хранится в бинарном файле, формата HPROF. Dalvik использует формат, который похож на тот, который используется инструментом HPROF в Java, но не является точно таким же.

Есть несколько способов создать дамп кучи выполняющегося Android приложения. Первый — использовать кнопку Dump HPROF file в DDMS. Если вам нужно выбрать момент создания дампа более точно, то можно создать его программно, при помощи метода android.os.Debug.dumpHprofData().

Для анализа можно использовать стандартный инструмент jhat или Eclipse Memory Analyzer (MAT). Однако, сначала нужно конвертировать .hprof файл из Dalvik формата в J2SE HPROF формат. Для этого используется утилита hprof-conv, которая поставляется с Android SDK:

Пример: Отладка утечки памяти

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

Давайте рассмотрим приложение Honeycomb Gallery sample app из Android SDK. Это простая фотогалерея, которая демонстрирует использование неких методов нового API в Honeycomb. Сейчас мы преднамеренно создадим утечку памяти, чтобы затем продемонстрировать метод отладки.

Представим себе, что мы хотим, чтобы приложение получало изображения по сети. Чтобы сделать его более отзывчивым к пользователю, возможно, стоит реализовать кэш для хранения недавно просмотренных изображений. Мы можем это сделать, внеся некоторые изменения в ContentFragment.java. В начале класса объявим и инициализируем новую переменную:

В этом отображении мы будем кэшировать загруженные Bitmap’ы. Теперь можно изменить метод updateContentAndRecycleBitmap() для проверки кэша перед загрузкой и добавления Bitmap’ов в кэш после загрузки:

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

Исследование кучи с помощью DDMS

Dalvik Debug Monitor Server (DDMS) — это один из главных инструментов для отладки в Android. Он является частью плагина ADT к среде разработки Eclipse, его также можно найти в папке tools/ вашего Android SDK. Для более подробной информации можно прочесть Using DDMS.

Давайте используем DDMS для анализа использования кучи нашим приложением. Вы можете запустить DDMS двумя способами:

  • Из Eclipse: Window -> Open Perspective -> Other… > DDMS
  • Из командной строки: запустите ddms (или ./ddms на Mac/Linux) в папке tools/

Выберите процесс com.example.android.hcgallery в левой панели и кликните на кнопку Show heap updates на панели инструментов. Затем переключитесь на вкладку VM Heap в DDMS. Вы увидите некоторую базовую информацию об использовании кучи, которая будет обновляться при каждом вызове сборщика мусора. Чтобы увидеть первое обновление, кликните на кнопку Cause GC.

Можно заметить, что «живые» объекты занимают в памяти чуть меньше 8Мб (см. на колонку Allocated ). Теперь пролистаем фотографии, и можно будет увидеть, как это число увеличивается. Так как в приложении всего 13 фотографий, то утечка памяти ограничена. В некотором смысле, это наихудший случай, который может получиться, поэтому здесь никогда не будет OutOfMemoryError.

Создание дампа кучи

Кликните по кнопке Dump HPROF file в панели инструментов DDMS, выберите место сохранения файла, и сконвертируйте его, используя утилиту hprof-conv. В этом примере, мы будем использовать отдельную версию MAT (1.0.1), её можно скачать здесь.

Если вы используете Eclipse, с установленным MAT, то после нажатия на кнопку «dump HPROF», файл автоматически конвертируется и откроется в окне Ecilpse.

Анализ дампа кучи при помощи MAT

Запустите MAT и загрузите HPROF-файл, который был только что создан. MAT — мощная утилита, и разъяснение всех её особенностей вне этого топика, поэтому я объясню только один из методов как можно определить утечку — при помощи вида «Гистограмма» (Histogram view). В этом виде можно увидеть список классов, отсортированных по числу экземпляров, shallow heap (общий размер памяти, занимаемый экземплярами), или retained heap (общая память, занимаемая экземплярами и объектами, на которые они ссылаются).

Если отсортировать по shallow heap, то можно увидеть, что вверху окажется число экземпляров byte[]. В Android 3.0 Bitmap’ы представляются в виде массивов из байтов, размер которых зависит от размера Bitmap’a. То есть понятно, что они представляют память, которая занимается нашими Bitmap’ами. Щелкните правой кнопкой на классе byte[] и выберите List Objects > with incoming references. Вы увидите список всех массивов из байтов, размещенных в куче.

Выберите один из больших объектов и раскройте его. В итоге вы увидите всю цепочку ссылок, которая образуется из-за этого объекта. Вот он — наш кэш для Bitmap’ов!

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

Сравнение дампов кучи с помощью MAT

При отладке утечек памяти, бывает полезно сравнить состояние кучи в разные моменты времени. Чтобы сделать это, создайте два HPROF файла (не забывайте их конвертировать утилитой hprof-conv).

Вот как вы можете сравнить эти два файла:

  1. Откройте первый файл (File > Open Heap Dump).
  2. Откройте гистограммный вид.
  3. В виде истории навигации (Window > Navigation History), щелкните правой кнопкой на histogram и выберите Add to Compare Basket.
  4. Откройте второй файл и повторите шаги 2 и 3.
  5. Переключитесь в вид Compare Basket, и кликните Compare the Results (красная иконка восклицательного знака в правом верхнем углу)

Источник

Читайте также:  Смарт вейв для андроид
Оцените статью