Android开发中内存 VSS、RSS、PSS、USS 的区别 Hello

# procrank
  PID       Vss      Rss      Pss      Uss     Swap    PSwap    USwap    ZSwap  cmdline
 1546  23119064K  434772K  246374K  221424K   26896K   25795K   25776K    8547K  system_server
 2195  18248184K  348776K  180992K  166788K   27548K   26431K   26412K    8758K  com.android.systemui
 ...
 1108  10797196K    3268K      65K      44K     648K     648K     648K     214K  /system/bin/thermald
                           ------   ------   ------   ------   ------   ------  ------
                          1850510K  1456516K  699812K  624553K  620960K  206964K  TOTAL

ZRAM: 208520K physical used for 629248K in swap (4194300K total swap)
 RAM: 10989740K total, 343872K free, 10312K buffers, 7536160K cached, 20688K shmem, 487084K slab 

1. VSS
Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
VSS表示一个进程可访问的全部内存地址空间的大小。这个大小包括了进程已经申请但尚未使用的内存空间。在实际中很少用这种方式来表示进程占用内存的情况,用它来表示单个进程的内存使用情况是不准确的。

此大小还包括可能不驻留在RAM中的内存,如已分配但未写入的malloc。 VSS对于确定进程的实际内存使用非常少用。


2. RSS
Resident Set Size 实际使用物理内存(包含共享库占用的内存)
表示一个进程在RAM中实际使用的空间地址大小,包括了全部共享库占用的内存,这种表示进程占用内存的情况也是不准确的。

RSS可能会产生误导,因为它报告进程使用的所有共享库的总数,即使共享库只加载到内存中一次,无论有多少进程使用它。 RSS也不是单个进程的内存使用的准确表示。


3. PSS
Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

表示一个进程在RAM中实际使用的空间地址大小,它按比例包含了共享库占用的内存。假如有3个进程使用同一个共享库,那么每个进程的PSS就包括了1/3大小的共享库内存。这种方式表示进程的内存使用情况较准确,但当只有一个进程使用共享库时,其情况和RSS一模一样。
当一个进程被销毁时,其占用的那部分PSS又会被按比例地分配给其余使用这些库的进程。


4. USS
Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
表示一个进程本身占用的内存空间大小,不包含其它任何成分,这是表示进程内存大小的最好方式!

USS是一个非常有用的数字,因为它表示运行特定进程的真正内存增量成本。当进程被终止时,USS是实际返回到系统的总内存。 USS是判断进程中的内存泄漏时最值得注意的数字。

总结:

一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

原文地址:https://www.cnblogs.com/hellokitty2/p/15625912.html