移动端测试===Android内存管理: 理解App的PSS
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值较低,它有助于减少那些机会。
移动端测试===Android内存管理: 理解App的PSS的更多相关文章
- 移动端测试===Android内存泄露和GC机制(转)
本文转自:https://www.testwo.com/article/1153 1.前言 Hello,小伙伴们,相信大家在项目测试中都遇到过内存泄露问题,小编也着实爬过很多坑.比如小编所测项目,更换 ...
- Android 内存管理分析(四)
尊重原创作者,转载请注明出处: http://blog.csdn.net/gemmem/article/details/8920039 最近在网上看了不少Android内存管理方面的博文,但是文章大多 ...
- 浅谈Android内存管理
最近在网上看了不少Android内存管理方面的博文,但是文章大多都是就单个方面去介绍内存管理,没有能全局把握,缺乏系统性阐述,而且有些观点有误,仅仅知道这些,还是无法从整体上理解内存管理,对培养系统优 ...
- Android内存管理机制之一:low memory killer
转载自http://www.miui.com/thread-29268-1-1.html 准备写这个专题之前,心里是有点忐忑的.首先Android内存管理机制相当复杂,想要讲清楚比较困难:其次对于绝大 ...
- [Android Memory] Android内存管理、监测剖析
转载自:http://blog.csdn.net/anlegor/article/details/23398785 Android内存管理机制: Android内存管理主要有:LowMemory Ki ...
- Android——内存管理基础
内存收集概念 内存垃圾收集器(garbage collector) 概念:自定内存管理. 功能:分配内存.保证所有被引用的对象还在内存中.可以释放在运行的代码中不再引用的对象的内存. 垃圾收集器避免了 ...
- 深入理解Android内存管理原理(六)
一般来说,程序使用内存的方式遵循先向操作系统申请一块内存,使用内存,使用完毕之后释放内存归还给操作系统.然而在传统的C/C++等要求显式释放内存的编程语言中,记得在合适的时候释放内存是一个很有难度的工 ...
- Android Dalvikvm 内存管理理解
网上非常多文件介绍了 jvm 内存管理的理论,但在 Dalvikvm 中,到底是怎样实现的. 这几天猛看了 Dalvikvm 的源码,说一下我的理解: 在大层面上讲跟理论一样,jvm 把内存分成了一些 ...
- Android内存管理机制
相信一步步走过来的Android从业者,每个人都会遇到OOM的情况.如何避免和防范OOM的出现,对于每一个程序员来说确实是一门必不可少的能力. 今天我们就谈谈在Android平台下内存的管理之道,开始 ...
随机推荐
- ismember matlab
ismember 判断A中的元素在B中有没有出现 LIA = ismember(A,B) for arrays A and B returns an array of the same size as ...
- ZOJ1994 & POJ2396:Budget——题解
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1994 http://poj.org/problem?id=2396 题目大 ...
- BZOJ4516:[SDOI2016]生成魔咒——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4516 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一 ...
- 【链表】在O(1)的时间删除链表的节点
/** * 在O(1)的时间删除链表的节点 * * @author * */ public class Solution { public static void deleteNode(Node he ...
- Leetcode 445. 两数相加 II
1.题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. ...
- POJ 3107 树形dp
Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6812 Accepted: 2390 Descrip ...
- HDU 3586 树形dp
Information Disturbing Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/ ...
- C语言函数的变参实用与分析
实现变参传递的关键是: 传入参数在内存中是连续分布的. #define va_list void* #define va_arg(arg, type) *(type*)arg; arg = (char ...
- ES6数组的扩展运算符
一.基本使用 ES6中函数可以使用 rest参数 接收函数的多余参数,组成一个数组,放在形参的最后面. let fn = (a, ...value) => { console.log(a); c ...
- ConvexScore
题目描述 You are given N points (xi,yi) located on a two-dimensional plane. Consider a subset S of the N ...