Android内存中的RSS、PSS、USS

在dumpsys meminfo中经常能看到以下指标:


Android内存中的RSS、PSS、USS_第1张图片
dumpsys meminfo

可以看到有PSS的指标。而使用ps时,有时候还能看到RSS,USS。那这些指标代表什么意思呢?

计算内存足迹

首先,我们得知道kernel会追踪系统中所有的内存页面的内存分配。


Android内存中的RSS、PSS、USS_第2张图片
Pages used by different processes

在计算app使用了多少内存时,系统需要统计共享页面(shared pages)。App在访问同一个service或者library的时候会共享内存页面。比如,Google地图和一个游戏app可能会共享一个定位服务。这使得在决定每个app独占多少内存时变得十分困难。


Android内存中的RSS、PSS、USS_第3张图片
Pages shared by two apps (middle)

因此在为一个app计算内存足迹时,可以使用以下任意指标。
  • Resident Set Size(RSS):app使用的任意内存页面数量,包括shared 和 non-shared pages.
  • Proportional Set Size(PSS):app使用的non-shared pages,以及使用的shared page的平均值。比如,如果三个进程共享3MB,则认为每个进程平均占用1MB。也就是按比例的(Proportional)。
  • Unique Set Size(USS):app使用的non-shared pages,shared pages被排除在外。
    PSS在操作系统想知道所有进程使用了多少内存时是十分有用的。但在计算PSS时由于区分哪部分被共享,因此比较耗时。RSS的话不需要区分shared和non-shared pages的差异,因此计算起来更快。同时在追踪内存分配变化时会显得比较实用。最后,可以使用RSS-USS得出共享部分占用的内存大小,如果USS较小而计算得出来的差值很大,那么可以认为共享部分占用的内存过大了。

你可能感兴趣的:(Android内存中的RSS、PSS、USS)