虚拟机
Android的虚拟机是Dalvik,Dalvik是指令集基于寄存器架构,执行其特有的文件格式——dex字节码,以此来完成对象生命周期管理、堆栈管理、线程管理、安全异常管理、垃圾回收等重要功能。
我们所谓的内存优化,其实就是Dalvik内存的优化。
在这里要介绍几个概念:
dalvik heap:用于分配对象,处理图像
Native Heap: malloc分配,受系统限制
Android系统对dalvik的虚拟机heapsize作了硬性限制,当java进程申请的java空间超过阈值时,就会抛出OOM异常(这个阈值可以是48M、24M、16M等,视机型而定),可以通过adb shell getprop | grep dalvik.vm.heapgrowthlimit查看此值。
也就是说,程序发生OMM并不表示RAM不足,而是因为程序申请的java heap对象超过了dalvik 的限制。
如何查看进程的内存信息
使用adb shell dumpsys meminfo + packagename/pid
使用adb shell procrank查看进程内存信息
这里介绍几个概念:
VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS- Unique Set Siz