Как определить использование размера кучи приложения для Android
Я хотел бы знать количество кучи пространства, используемого моим приложением для Android, двумя способами: - программным
- через DDMS.
Я упомянул этот пост, до публикации здесь. В этом сообщении упоминается, что Debug.getNativeHeapSize()
возвращает heapsize. Это точный метод, который я должен использовать, чтобы программно определить размер кучи? Если да, то где я должен его регистрировать, чтобы получить правильное использование моего приложения?
Ответы
Ответ 1
вот что я использую:
public static void logHeap() {
Double allocated = new Double(Debug.getNativeHeapAllocatedSize())/new Double((1048576));
Double available = new Double(Debug.getNativeHeapSize())/1048576.0;
Double free = new Double(Debug.getNativeHeapFreeSize())/1048576.0;
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setMinimumFractionDigits(2);
Log.d("tag", "debug. =================================");
Log.d("tag", "debug.heap native: allocated " + df.format(allocated) + "MB of " + df.format(available) + "MB (" + df.format(free) + "MB free)");
Log.d("tag", "debug.memory: allocated: " + df.format(new Double(Runtime.getRuntime().totalMemory()/1048576)) + "MB of " + df.format(new Double(Runtime.getRuntime().maxMemory()/1048576))+ "MB (" + df.format(new Double(Runtime.getRuntime().freeMemory()/1048576)) +"MB free)");
}
Ответ 2
Да.
Обратите внимание, что в DDMS есть куча и вы можете использовать MAT Eclipse, что более чем полезно, особенно в отслеживании утечек памяти, но это огромные, но числа, которые вы видите, являются справочной только памятью, управляемой виртуальной машиной. В андроиде есть много подсистем, которые реализованы под VM - native. Простейший пример класса Bitmap. Вы не увидите всю память, выделенную для Bitmap в DDMS, и сборщик мусора не очень хорош/быстро восстанавливает эту память. поэтому будьте осторожны.