Как определить использование размера кучи приложения для 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, и сборщик мусора не очень хорош/быстро восстанавливает эту память. поэтому будьте осторожны.