Runtime
Runtime是一个非常有用的类,可以获取很多运行时的数据。
- totalMemory:VM Heap Size
- freeMemory:Free VM Heap Size
- maxMemory:VM Heap Size Limit
代码使用如下所示。
- Log.d("test", "VM Heap Size" + (Runtime.getRuntime().totalMemory() / (1024.0 * 1024.0)) + "MB");
- Log.d("test", "Allocated VM Memory Size" +
- ((Runtime.getRuntime().totalMemory() –
- Runtime.getRuntime().freeMemory()) / (1024.0 * 1024.0)) + "MB");
- Log.d("test", "VM Heap Size Limit" +
- (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所示。
图6.49 内存Monitor
由于Dalvik虚拟机和ART虚拟机的区别,导致其Pss内存分配区别很大。因此,在分析App性能时,建议尽量使用Runtime类来获取内存信息。如图6.50、图6.51是在Android 4.3和Android 5.0系统上运行同一App并保持前台静态运行的内存结果。
图6.50 ART
图6.51 Dalvik
可见,其Pss Total的值因为虚拟机的不同而差别很大。
