Android Apps内存储器占用量
Android Apps内存占用量
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
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
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_UsageVss 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 应用的内存占用