Как проанализировать поведение Dalvik GC? - PullRequest
5 голосов
/ 27 декабря 2010

Я разрабатываю приложение на Android. Это долгосрочное приложение, которое непрерывно обрабатывает данные датчика. Во время работы приложения я вижу много сообщений GC в logcat; примерно раз в секунду.

Скорее всего, это связано с тем, что объекты создаются и немедленно разыменовываются в цикле.

Как узнать, какие объекты создаются и освобождаются немедленно?

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

(*) Я пробовал jcat и Eclipse MAT. Я не мог заставить hat работать с кучей-дампами Android; он жаловался на неподдерживаемую версию файла дампа.

Ответы [ 2 ]

4 голосов
/ 27 декабря 2010

Как узнать, какие объекты создаются и выпускаются немедленно?

Шаг # 1: Временно измените ваш код (или создайте проект с использованием соответствующих частей вашего кода), где вы можете нажать кнопку или что-то еще, чтобы выполнить ровно один раз через логику обработки датчика.

Шаг # 2: Войдите в DDMS (автономно или в перспективе Eclipse).

Шаг # 3: выберите ваш эмулятор, затем нажмите на вкладку Allocation Tracker

Шаг № 4: Подведите приложение к точке, в которой оно ожидает нажатия кнопки, начиная с шага № 1, затем нажмите «Запустить отслеживание» на вкладке «Отслеживание распределения DDMS».

Шаг # 4: Нажмите кнопку, и после завершения обработки датчика нажмите кнопку Получить распределения на вкладке отслеживания распределения DDMS.

Это скажет вам, что было выделено во время этой части вашего кода. Он не говорит вам, что «выпущено», потому что это неопределенно, пока не будет запущен цикл GC.

EDIT

Я не уверен, но startAllocCounting() в классе android.os.Debug может иметь тот же эффект, что и нажатие кнопки «Начать отслеживание». Если это так, вы можете просто использовать свой код для отслеживания распределений за один проход цикла, а не возиться с изменениями кода, которые я обрисовал выше.

И, FWIW, , вот небольшая техническая статья о DDMS и отслеживании распределения.

1 голос
/ 27 декабря 2010

Я думаю, вам нужно попробовать трекер выделения:)

(в директории / tools)

http://developer.android.com/resources/articles/track-mem.html

...