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

Runime.getRuntime().totalMemory() and ActivityManager.MemoryInfo()

为什么从 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!

这是两个不同的东西。

Runtime.getRuntime().totalMemory()

returns Java 虚拟机中的内存总量。该值会随时间变化。这是运行时空闲内存。

memInfo.totalMem

returns可用内存总量

可以参考这两个SO主题:

Topic 1

Topic 2

Runtime.getRuntime().totalMemory()

Returns the total amount of memory in the Java virtual machine. The value returned by this method may vary over time, depending on the host environment.

memInfo.totalMem

The total memory accessible by the kernel. This is basically the RAM size of the device, not including below-kernel fixed allocations like DMA buffers, RAM for the baseband CPU, etc.

Note that the amount of memory required to hold an object of any given type may be implementation-dependent.

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

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