Android系统内存优化之二(系统内存信息)

DDMS获得内存信息

(本文原创,转载请注明出处http://blog.csdn.net/rickleaf [email protected]

拿到Android设备以后,可能大家都会去试着通过Google提供的工具来获得系统的内存使用情况。

Google提供了一个工具叫DDMS,在Sysinfo的tab栏里面有一个Memory usage的选项,通过USB连接Android设备以后

很容易抓到这样的图。

 

这张图会列出现在系统的一些进程和使用情况。

其中系统随时可以用的内存是Free和Buffers两项,因为我抓图的系统只有128M的内存,所以看上去这部分可用内存已经很少了。

大家看到这张图,首先想到的就是系统的内存几乎用完,可能会想到Android需要更多的内存等问题。

Android系统内存优化之二(系统内存信息)_第1张图片

 

我在这样的系统试着跑很占内存的游戏等应用程序的时候,发现并没有出现内存不足的问题。

鉴于这个原因,我认为这张图并不能反应出我要得到的系统内存资源信息,因此我只能从另一个角度去分他。

 

/proc/meminfo获得系统内存信息

大家都知道,Android实际上是一个Linux的衍生系统,虽然Google曾经在Linux kernel之上增加了一些专用的内存分配驱动(ashmen,pmem这两部分会随着这个议题的深入来讨论,这里暂时忽略),但是关于一般应用程序的内存使用还是采用Linux的

传统方法,因此我们通过Linux的/proc文件系统的meminfo来分析这个系统的内存使用情况更客观。

之所以这么说,是因为通过这种方法可以绕开繁琐的dalvik实现机制,以系统的层面来分析。

 

现在我们来看/proc/meminfo

 

Android系统内存优化之二(系统内存信息)_第2张图片

 

对于Linux系统来说,可以立即使用的内存是

MemFree+Buffers+Cache=556436kB

系统总共可用的内存为

MemTotal = 107756kB

 

通过运算我们可以发现实际上系统目前还有52%的内存处于空闲状态,和我们从DDMS中拿到的图差很多。

或者说Google隐藏了cache,没有给我我想要的东西。

 

Android内存使用

之前有很多人发表过Android内存使用的问题,通过上面两点的分析。我们可以得出一个结论

Android系统为了加快系统的运行速度会在系统允许的情况下,大量的使用内存作为应用程序的cache。

而当系统内存紧张的时候,会首先释放cache的内存,这也就是我依旧能跑占内存比较大的游戏的原因。

 

有了这个部分的讨论,我们可以知道如果想得到每个Android APP的内存比例可以用DDMS来得到。

如果想判断系统内存更详细的信息可以用Linux的proc/meminfo。

 

在后面的讨论中我会再针对Android特有的内存配置和申请方法讨论一下,最后我们通过对系统深度剪裁完成

Android系统的内存优化。

 

你可能感兴趣的:(android,优化,linux,cache,Google,工具)