Android: отслеживать количество созданных объектов - PullRequest
14 голосов
/ 01 мая 2009

Я портирую игру на Android (кода много, а его очень мало), и DalvikVM рассказывает мне (через LogCat) о сборе мусора. В какой-то момент кода я получаю поток сообщений «GC освобождает х объектов / х мс», в основном сообщая мне, что ~ 150 000 объектов только что были удалены, и это занимает целую секунду.

Я хочу знать, откуда они взялись! Я почти уверен, что не создаю столько объектов намеренно.

Итак, есть ли способ получить ... в основном противоположность этому сообщению? Что-то, что печатает сообщение журнала, когда какой-либо объект создан ?

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

Я использую Eclipse 3.4.2, если это уместно.

Есть идеи?

Ответы [ 2 ]

8 голосов
/ 03 мая 2009

Это возможно с помощью инструмента ddms, который поставляется с Android (не версия Eclipse). Используя это, посмотрите на вкладку отслеживания распределения. Вы можете начать отслеживать распределение всех объектов вместе со следами стеков, где они были размещены. Однако этот инструмент может генерировать много информации, а конкретную информацию, которую вы хотите, не всегда легко разобрать или найти. Если у вас есть версия для Sun JVM, я бы порекомендовал использовать упомянутые инструменты Кая, они намного более развиты. Если вам нужно сделать это в Android, использование трекера выделения даст вам старт.

3 голосов
/ 01 мая 2009

Почему вы не профилируете существующий игровой код на Sun JVM (если вы переносите Java-игру)? Затем вы можете воспользоваться JProfiler, Yourkit и т. Д. И посмотреть, какие огромные объекты очищаются. (Используйте -XX: + PrintGCDetails, чтобы увидеть, как запускается сборщик мусора и когда его искать.)

Если этого не окажется в игре, вы довольно безболезненно поняли это и можете обратить свое внимание на код Android. И, к сожалению, о чем я мало знаю.

...