(本文原创,转载请注明出处http://blog.csdn.net/rickleaf [email protected])
拿到Android设备以后,可能大家都会去试着通过Google提供的工具来获得系统的内存使用情况。
Google提供了一个工具叫DDMS,在Sysinfo的tab栏里面有一个Memory usage的选项,通过USB连接Android设备以后
很容易抓到这样的图。
这张图会列出现在系统的一些进程和使用情况。
其中系统随时可以用的内存是Free和Buffers两项,因为我抓图的系统只有128M的内存,所以看上去这部分可用内存已经很少了。
大家看到这张图,首先想到的就是系统的内存几乎用完,可能会想到Android需要更多的内存等问题。
我在这样的系统试着跑很占内存的游戏等应用程序的时候,发现并没有出现内存不足的问题。
鉴于这个原因,我认为这张图并不能反应出我要得到的系统内存资源信息,因此我只能从另一个角度去分他。
大家都知道,Android实际上是一个Linux的衍生系统,虽然Google曾经在Linux kernel之上增加了一些专用的内存分配驱动(ashmen,pmem这两部分会随着这个议题的深入来讨论,这里暂时忽略),但是关于一般应用程序的内存使用还是采用Linux的
传统方法,因此我们通过Linux的/proc文件系统的meminfo来分析这个系统的内存使用情况更客观。
之所以这么说,是因为通过这种方法可以绕开繁琐的dalvik实现机制,以系统的层面来分析。
现在我们来看/proc/meminfo
对于Linux系统来说,可以立即使用的内存是
MemFree+Buffers+Cache=556436kB
系统总共可用的内存为
MemTotal = 107756kB
通过运算我们可以发现实际上系统目前还有52%的内存处于空闲状态,和我们从DDMS中拿到的图差很多。
或者说Google隐藏了cache,没有给我我想要的东西。
之前有很多人发表过Android内存使用的问题,通过上面两点的分析。我们可以得出一个结论
Android系统为了加快系统的运行速度会在系统允许的情况下,大量的使用内存作为应用程序的cache。
而当系统内存紧张的时候,会首先释放cache的内存,这也就是我依旧能跑占内存比较大的游戏的原因。
有了这个部分的讨论,我们可以知道如果想得到每个Android APP的内存比例可以用DDMS来得到。
如果想判断系统内存更详细的信息可以用Linux的proc/meminfo。
在后面的讨论中我会再针对Android特有的内存配置和申请方法讨论一下,最后我们通过对系统深度剪裁完成
Android系统的内存优化。