2011-01-27 8 views
21

Chciałbym wiedzieć ilość miejsca stosu używanego przez moją aplikację Android na dwa sposoby: - ​​programowo - poprzez DDMS.Jak wykryć użycie sterty wielkości aplikacji Android?

Odniosłem się do this post, przed zamieszczeniem tutaj. W tym poście wspomina się, że Debug.getNativeHeapSize() zwraca wartość heapsize. Czy jest to dokładna metoda, której powinienem użyć, aby programowo wykryć rozmiar sterty? Jeśli tak, to gdzie powinienem go zarejestrować, aby uzyskać prawidłowe wykorzystanie mojej aplikacji?

+3

W tym poście http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android Dianne dostarcza mnóstwo informacji, które mogą pomóc. –

Odpowiedz

55

oto co używam:

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)"); 
    } 
+0

To całkiem fajne. –

+0

Dzięki, Dzięki tobie mogę wykonać metodę zarządzania :) – delive

3

Tak. Należy pamiętać, że w DDMS jest również widok sterty i można użyć MAT Eclipse, co jest szczególnie pomocne w śledzeniu wycieków pamięci, ALE i jest to ogromne, ale liczby, które widzisz, są pamięcią referencyjną zarządzaną przez maszynę wirtualną. Istnieje wiele podsystemów w Androidzie, które są wdrażane pod VM - natywna. Najprostszy przykład klasy Bitmap. Nie zobaczysz całej pamięci przydzielonej do bitmapy w DDMS i garbage collector nie jest zbyt dobry/szybki w odzyskaniu tej pamięci. więc uważaj.