Runime.getRuntime()。totalMemory()和ActivityManager.MemoryInfo()

时间:2018-12-15 10:34:53

标签: java android android-memory

为什么从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 :(得分:1)

那是两件事。

  

Runtime.getRuntime()。totalMemory()

返回Java虚拟机中的内存总量。该值可以随时间变化。这是运行时可用的内存。

  

memInfo.totalMem

返回可用内存总量

您可以咨询以下两个SO主题:

Topic 1

Topic 2

答案 1 :(得分:0)

Runtime.getRuntime().totalMemory()

  

返回Java虚拟机中的内存总量。此方法返回的值可能会随时间变化,具体取决于主机环境。

memInfo.totalMem

  

内核可访问的总内存。基本上,这是设备的RAM大小,不包括DMA缓冲区,基带CPU的RAM等内核下固定分配。

     

请注意,保存任何给定类型的对象所需的内存量可能取决于实现。

  • 第一个是运行您的进程的jvm所拥有的内存,大约12 MB。
  • 第二个是内核可访问的系统总内存,在您的情况下约为1 GB。

第一个是第二个的一部分。