Android Apps内存储器占用量

Android Apps内存占用量


1) android 的 demo Snack(贪吃蛇)究竟占用了多少内存? ) 用 DDMS查看是2.7M

b) 用shell dumpsys meminfo
                    native   dalvik    other    total
       size:     9248     2819      N/A    12067
  allocated: 3490     2430      N/A     5920
 是12M 和 5.9M(allocated), 其中 dalvik的内存与DDMS看到的heap内存接近 (2.4M vs 2.7M)

c)用 shell ps 查看是 VSIZE是147M, 而物理内存是21M
 USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME
app_93    1100  13219 147052 21316 ffffffff 00000000 S com.example.android.snake


搞得我一头雾水,几个月后看了下面这篇文章,才有所了解

http://elinux.org/Android_Memory_Usage
  Vss and Rss are generallyworthless, because they don't accurately reflect a process's usage of pages shared with other processes.
用 procrank -h,看Pss ( proportional set size) 和 Uss(unique set size)才是正道

看下面两个程序, RSS 也是 20M 左右,但实际占用 5M多,
PID      Vss           Rss     Pss     Uss     cmdline
1271 19888K 19888K 4297K 1764K com.android.inputmethod.latin
 1332 19560K 19560K 3993K 1620K com.android.alarmclock


Uss 是 Apps 单独占有的内存

Pss 是 Apps 占用的共享内存平均数 (   就是: 共享内存 / 进程数   ) + Uss


总结:

1)一个简单的 Android 应用,占用空间可能是 5M 

( 当然你运行的程序多了, 每个程序分摊的的共享内存降低, 很有可能接近 dalvik heap 内存大小, 前提是你调用的 native 接口不会分配很大的内存  )


2)DDMS中显示的是 dalvik  heap 的内存, 但不包括native 的内存 ( native 也可能在 OS 的栈和堆中分配内存)


3) VSIZE 和 RSS 不能衡量 Android 应用的内存占用