Как определить использование размера кучи приложения для Android - PullRequest
21 голосов
/ 27 января 2011

Я хотел бы узнать объем пространства кучи, используемого моим приложением для Android, двумя способами: - программно - через DDMS.

Я ссылался на эту запись до публикацииВот.В этом посте упоминается, что Debug.getNativeHeapSize() возвращает размер кучи.Это именно тот метод, который я должен использовать, чтобы программно определить размер кучи?Если да, то где мне регистрировать его, чтобы получить правильное использование кучи в моем приложении?

Ответы [ 2 ]

55 голосов
/ 23 февраля 2011

вот что я использую:

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)");
    }
3 голосов
/ 07 февраля 2011

Да.Обратите внимание, что в DDMS также есть представление кучи, и вы можете использовать MAT Eclipse , что более чем полезно, особенно при отслеживании утечек памяти, НО, и это огромные цифры, которые вы видите, являются справочными только для управляемой памятиВ.М.Есть много подсистем в Android, которые реализованы под VM - нативной.Простейший пример класса Bitmap.Вы не увидите всю память, выделенную для растрового изображения в DDMS, и сборщик мусора не очень хорошо / быстро восстанавливает эту память.так что будь осторожен.

...