Android内存管理: 理解App的PSS
原文链接:http://www.littleeye.co/blog/2013/06/11/android-memory-management-understanding-app-pss/
当在应用程序上运行Little Eye时,在内存视图中,会报告有关应用程序内存的3个重要统计信息。 Dalvik内存使用情况,即Java堆消耗的内存量,Native内存,即JVM外部进程使用的内存量。
然后是第三个统计量,被称为“PSS”。 什么是PSS?
Propotionate Set Size(比例集大小)
“比例集大小”是Android系统计算的统计信息,以确定是否要杀死您的进程。 只看你的应用程序消耗多少内存,是不正确的方式,因为你的应用程序可能与其他进程使用一些共享内存,责怪你的应用程序正在使用任何共享内存是“不公平”的。 Android系统可能会杀死使用太多内存的应用程序(尤其是如果应用程序在后台),因此Android系统需要找到一种方法来可靠地计算应用程序负责的内存量。
什么是共享内存?
Android是一个基于Linux的系统,Linux使用“共享”页面来跨进程共享相同的内存。 共享内存的一个常见用途是在进程之间共享“代码”内存页(加载只读可执行代码的内存区域)。 外部库和JVM的可执行代码是可以跨进程安全共享的内存区域的示例。 还可以是数据页,其是“写时复制”,其可以在进程之间临时共享,直到一个进程修改共享存储器。
技术应用“真实”内存使用
因此,为了“公平”技术应用使用的内存,Android使用了PSS统计量。基本上,它是您的应用程序消耗的非共享内存和可以“归因于您的应用程序”的共享内存部分(与其他进程共享的内存)/(分享共享内存的进程数量)的和。
现在,Android有一个“更公平”的方式来计算谁消耗了大量的内存,Android将按照PSS由大到小的顺序开始杀死进程。
作为一个开发者意味着什么?
如果你的应用程序得到非常高的PSS分数,你的应用程序可能会被Android系统杀死。 也许这是你可以处理的东西,但是在后台被意外杀死可能会对你的应用程序造成影响,特别是如果你依靠一些后台Activity或Service来进行工作。 确保您的应用程序的PSS不是太高,特别是当您的应用程序进入后台。 进入后台后,释放不在吸引的内存和对象,并断开任何不再需要的共享内存,你不再需要,可能是一个好主意。 这将减少你的意外被Android系统杀死的机会。
要记住的一点是,PSS没有“硬限制” - 不能保证你的应用程序超过某个阈值将被杀死,或者保证低于某个阈值可以生存。 应用程序不在前台时,必须做好任何时间被杀死的准备。如果PSS值较低,它有助于减少那些机会。