Монитор памяти в Android Studio сообщает о разном использовании ОЗУ, чем устройство

При исследовании использования ОЗУ в приложении, над которым я работаю, я использую средство мониторинга памяти в Android Studio (доступ к нему можно получить в Android Studio, выбрав Инструменты > Android > Монитор памяти). Я заметил, что использование ОЗУ моего приложения, о котором сообщается в Memory Monitor, всегда намного ниже, чем при просмотре использования ОЗУ с устройства (к нему можно получить доступ, выбрав "Настройки" > "Приложения" > "Выполнение" ). Как вы можете видеть на скриншотах ниже, Memory Monitor сообщает о 18 МБ использования ОЗУ (23 МБ, если вы включаете свободное пространство), но устройство сообщает о 43 МБ.

Почему разница, а также еще одна точность, чем другая?

Memory Monitor

device

Ответ 1

Я подозреваю, что инструмент мониторинга памяти разговаривает с виртуальной машиной dalvik о распределении кучи, созданной кодом Java, и диспетчер устройств показывает, что весь процесс использует для памяти. Таким образом, первое не включает служебные данные или память, используемые самой виртуальной машиной (или ее текстом и библиотеками), или любые распределения вне кучи (иногда собственный код может выделять память, которая не видна непосредственно для виртуальной машины).

См. https://developer.android.com/tools/debugging/debugging-memory.html#ViewingAllocations и попробуйте запустить команду:

adb shell dumpsys meminfo <package_name>

чтобы получить более точную разбивку использования памяти во время выполнения вашего приложения.

Ответ 2

Я протестировал монитор памяти Android Studio Allocated, используя этот способ программно:

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

Но это работает только для получения информации о текущем приложении.