2015-01-24 13 views
10

Podczas badania wykorzystania pamięci RAM w aplikacji, nad którą pracuję, używam narzędzia Monitor pamięci w Android Studio (dostęp do niego można uzyskać w menu Narzędzia> Narzędzia> Android> Monitor pamięci). Zauważyłem, że użycie pamięci RAM mojej aplikacji zgłoszonej w Monitorze pamięci jest zawsze o wiele niższe niż podczas przeglądania użycia pamięci RAM z urządzenia (można uzyskać do tego dostęp, przechodząc do Ustawienia> Aplikacje> Uruchomione). Jak widać na poniższych zrzutach ekranu, Monitor Pamięci zgłasza około 18 MB pamięci RAM (23 MB, jeśli wliczasz wolne miejsce), ale urządzenie raportuje 43 MB.Monitor pamięci w Android Studio zgłasza inne użycie pamięci RAM niż urządzenie

Dlaczego różnica i jest jeszcze bardziej dokładna niż inne?

Memory Monitor

device

+2

Skupiłbym się na "procstats": http://android-developers.blogspot.com/2014/01/process-stats-understanding-how-your.html – CommonsWare

+0

W dokumentach dla programistów Google ma również opis "Badanie użycia pamięci RAM" https://developer.android.com/tools/debugging/debugging-memory.html, które obejmuje Monitor urządzeń z Androidem. Dostęp do tego można uzyskać w Android Studio, przechodząc do menu Narzędzia> Android> Monitor urządzenia Android – Richard

Odpowiedz

8

Podejrzewam, że narzędzie Monitor pamięć mówi do maszyny wirtualnej Dalvik o alokacji sterty dokonanych przez kod Java, a menedżer urządzeń pokazuje co cały proces wykorzystuje dla pamięci . Tak więc pierwsza nie obejmuje narzutu lub pamięci używanej przez samą maszynę wirtualną (lub jej tekst i biblioteki) lub jakichkolwiek przydziałów off-sterty (czasami kod natywny może przydzielić pamięć, która nie jest bezpośrednio widoczna na maszynie wirtualnej).

Zobacz https://developer.android.com/tools/debugging/debugging-memory.html#ViewingAllocations i spróbuj uruchomić polecenie:

adb shell dumpsys meminfo <package_name> 

aby uzyskać bardziej precyzyjny podział zużycie pamięci w czasie wykonywania aplikacji.

0

Przetestowałem pamięci monitora Allocated przez Android Studio można uzyskać w ten sposób programowo:

long allocatedMemory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

Ale to działa tylko, aby uzyskać informacje o bieżącej aplikacji.

Powiązane problemy