Runime.getRuntime (). TotalMemory () и ActivityManager.MemoryInfo () - PullRequest
0 голосов
/ 15 декабря 2018

Почему общая память, извлеченная из getRuntime().totalMemory(), не равна, когда мы используем ActivityManager.MemoryInfo()?Ниже в двух частях кода я получаю разные значения:

long totalMemory = Runtime.getRuntime().totalMemory() ;

и

ActivityManager actManager = (ActivityManager) getActivity().getSystemService(ACTIVITY_SERVICE);
                ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
                actManager.getMemoryInfo(memInfo);
                long totalMemory = memInfo.totalMem

, в первом коде я получаю 12.759.040, а из второго кода я получаю 907.034.624!

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Runtime.getRuntime().totalMemory() is

Возвращает общий объем памяти на виртуальной машине Java.Значение, возвращаемое этим методом, может изменяться со временем в зависимости от среды хоста.

memInfo.totalMem равно

Общий объем памяти, доступный дляядро.Это в основном размер ОЗУ устройства, не включая фиксированные выделения ниже ядра, такие как буферы DMA, ОЗУ для ЦП основной полосы частот и т. Д.

Обратите внимание, что объем памяти, необходимый для хранения объекта любого данного типаможет зависеть от реализации.

  • Первый - это память, которую держит jvm, выполняемый вашим процессом, - около 12 МБ.
  • Второй - общая доступная для ядра системапамяти, около одного гигабайта в вашем случае.

Первый является частью второго.

0 голосов
/ 15 декабря 2018

Это две разные вещи.

Runtime.getRuntime (). TotalMemory ()

возвращает общий объем памяти на виртуальной машине Java.Это значение может меняться со временем.Это свободная память времени выполнения.

memInfo.totalMem

возвращает общий объем доступной памяти

Вы можете обратиться к этим двум темам SO:

Тема 1

Тема 2

...