Подтвердить что ты не робот

Android & Dalvik - получить размер объекта

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

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

4b9b3361

Ответ 1

Для чего это стоит, я просмотрел исходный код 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().

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

Ответ 2

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

Ответ 3

int length =processes.size();

возвращает размер объекта.