获取内存信息
在了解如何获取内存信息之前,开发者需要先了解内存的一些具体划分,在了解了这些知识的基础上,才能更好地理解如何管理、优化内存。
Shared内存与Private内存
Private内存非常好理解,也就是完全属于每个应用独享的那部分已分配的内存。
相对于Private内存,Android中的基础公共库、组件,还有一些Native的library,Android系统为了节省内存资源,为它们提供了公共的内存资源。这些内存资源就是Shared内存,这些内存被所有运行的进程所共享。同时,从指令中获取的Shared内存大小,也就是每个App进程所获取到的Shared内存的平均值。
Android这样的设计非常巧妙。Android进程始于Zygote进程,Zygote进程是一切进程的来源,公共资源、组件和Native的library都在Zygote进程中初始化。而其他进程通过fork的方式产生新的进程,这样新的进程产生时就已经带有了Shared内存所预先加载的内容,从而提高了应用进程的创建速度。
Dirty内存与Clean内存
Dirty内存并不是脏数据,而是指只存储在RAM中的内存数据。当RAM清除这些内存后,应用要想再次读取原来内存中的数据就必须重新分配后再进行读取。
而Clean内存则相反,保存在Clean内存中的数据同时会缓存在文件中。这样当RAM清除这些内存后,应用想要再次读取这些内存中的数据就可以直接从缓存文件中读取。
其他内存概念
- dalvik是指dalvik所使用的内存。
- native是被native堆使用的内存,应该指使用C\C++在堆上分配的内存。
- other是指除dalvik和native使用的内存。但是具体是指什么呢?至少包括在C\C++分配的非堆内存,比如分配在栈上的内存。
