Android & Dalvik - Получить размер объекта - PullRequest
20 голосов
/ 26 января 2012

Как все мы знаем, в Java 5 появилась возможность для Instrumentation легко получать размер объекта.Есть ли такой способ на Android и Dalvik?

Пакет java.lang.instrument недоступен на Android.

Ответы [ 3 ]

13 голосов
/ 27 февраля 2012

Для чего я стоил, я посмотрел на исходный код Dalvik VM и не могу найти какой-либо стабильный API, чтобы получить размер объекта.Если вы хотите взглянуть сами, размер объекта сохраняется в ClassObject::objectSize : size_t, см. dalvik / vm / oo / Object.h .

Однако есть внутренних API для получения размера объекта.Он используется DDMS для предоставления подробной информации о размерах объектов.Но, поскольку API является внутренним, оно может меняться в разных версиях Android.Кроме того, API отправляет необработанные данные byte[] и базируется на клиенте / сервере, а не на простом вызове из библиотеки, поэтому его использование будет крайне неудобным.Если вы хотите взглянуть, начните с dvmAllocObject() в dalvik / vm / alloc / Alloc.cpp и dvmTrackAllocation() call.

Подводя итог: к сожалению, нетне любой готовый к использованию стабильный API для получения размера объекта в виртуальной машине Dalvik.

0 голосов
/ 29 августа 2018

Моя идея получить размер ArrayList<String> в куче состояла в том, чтобы сериализовать объект в массив байтов, где длина - это размер.

Я использовал SerializationUtils изApache Commons Lang .

Для сериализации:

byte[] data = SerializationUtils.serialize((Serializable) arrayList);

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

Как уже упоминалось, для этого требуется библиотека Commons Lang.Его можно импортировать с помощью Gradle:

api 'org.apache.commons:commons-lang3:3.5'

больше упомянутых способов здесь

0 голосов
/ 25 октября 2012

Для этой проблемы лучше не использовать программный подход, а использовать инструмент Memory Analyzer Tool (MAT) от www.eclipse.org/mat/. Он имеет как автономную версию, так и плагин для Eclipse.С его помощью вы можете создать снимок кучи Dalvik, а затем вы можете отсортировать список объектов по их размеру или по размеру объектов, на которые они ссылаются (оставшийся размер).Я использовал это именно для устранения утечек в битовом кэше.

...