Runtime

Runtime是一个非常有用的类,可以获取很多运行时的数据。

  • totalMemory:VM Heap Size
  • freeMemory:Free VM Heap Size
  • maxMemory:VM Heap Size Limit

代码使用如下所示。

  1. Log.d("test", "VM Heap Size" + (Runtime.getRuntime().totalMemory() / (1024.0 * 1024.0)) + "MB");
  2. Log.d("test", "Allocated VM Memory Size" +
  3. ((Runtime.getRuntime().totalMemory()
  4. Runtime.getRuntime().freeMemory()) / (1024.0 * 1024.0)) + "MB");
  5. Log.d("test", "VM Heap Size Limit" +
  6. (Runtime.getRuntime().maxMemory() / (1024.0 * 1024.0)) + "MB");

其中,获取已分配内存是通过当前Heap Size减去Free Heap Size获取的。

这里介绍了很多获取内存信息的方法API,但是对于App开发者来说,最有用的还是通过Runtime获取的VM Heap Size和Allocated VM Memory Size。这也是在Android Studio的Monitor中所监控的内存消耗曲线图,如图6.49所示。

Runtime - 图1 图6.49 内存Monitor

由于Dalvik虚拟机和ART虚拟机的区别,导致其Pss内存分配区别很大。因此,在分析App性能时,建议尽量使用Runtime类来获取内存信息。如图6.50、图6.51是在Android 4.3和Android 5.0系统上运行同一App并保持前台静态运行的内存结果。

Runtime - 图2 图6.50 ART

Runtime - 图3 图6.51 Dalvik

可见,其Pss Total的值因为虚拟机的不同而差别很大。