Android内存机制剖析

android 内存占用高分析 安卓系统内存占用机制_android 内存占用高分析

主要是进程占用内存和共享库占用内存,其中进程占用内存包含虚拟耗用,共享库内存包含比例分配共享库占用的内存。

 

Android内存的四种形式

  • VSS - Virtual Set Size 虚拟耗用内存(图中:2+3)
  • RSS - Resident Set Size 实际使用物理内存(图中:2+3-1)
  • PSS - Proportional Set Size 实际使用的物理内存(图中:2+4)
  • USS - Unique Set Size 进程独自占用的物理内存(图中:2-1)

VSS是一个进程可访问的所有内存空间地址的大小。 由于内存范围广泛不够精细,所以VSS 很少被用于判断一个进程的真实内存使用量。

RSS 是一个进程在RAM中实际持有的内存大小。RSS还包含了该进程所使用的所有共享库的大小,但它不管有多少个进程使用该共享库,该共享库仅被加载到内存一,所以RSS不是单个进程内存使用量的精确表示。 

PSS 与RSS不同,它会按比例分配共享库所占用的内存。 例如:如果有三个进程都使用了一个共享库,共占用了30页内存。那么PSS将认为每个进程分别占用该共享库10页的大小。 PSS是非常有用的数据,因为系统中所有进程的PSS都相加的话,就刚好反映了系统中的总共占用的内存。 而当一个进程被销毁之后, 其占用的共享库那部分比例的PSS,将会再次按比例分配给余下使用该库的进程。这样PSS可能会造成一点的误导,当一个进程被杀死后,它所占用的共享库内存将会被其他仍然使用该共享库的进程所分担。在这种方式下,PSS也会带来误导,因为当一个进程被杀后,PSS并不代表系统回收的内存大小。

USS 是一个进程独自占用的物理内存,这部分内存完全是该进程独享的。USS是一个非常有用的数值,因为它表明了运行一个特定进程所需的真正内存成本。当一个进程被杀死,USS就是所有系统回收的内存。USS是用来检查进程中是否有内存泄露的最好选择。

 

查看PSS内存的方式

由于手游在开发过程中会使用到共享库,因此使用PSS作为查看手游内存信息的指标。

  1. 用adb连手机,cmd执行命令:adb shell dumpsys meminfo<package name>
  2. UWA GOT 工具的OverView

 

参考链接:

https://www.jianshu.com/p/3bab26d25d2e

https://www.iteye.com/blog/myeyeofjava-1837860