公司项目要对程序的内存和CPU占用分析,总结一下。
如果有些命令执行不成功,请先获取root权限。主要用到的命令为三个:
adb shell dumpsys meminfo com.xiaohu.test
输出信息主要关注Native和Dalvik的Heap信息,分别给出了JNI和Java层的内存分配情况。
adb shell top d 1 | grep com.xiaohu.test
每隔1秒输出应用的CPU、内存和运行状态等信息,但是它给出的内存信息并不准确。
adb shell procrank | grep com.xiaohu.test
输出应用内存耗用四种不同的表现形式
VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
VSS 表示一个进程可访问的全部内存地址空间的大小。这个大小包括了进程已经申请但尚未使用的内存空间。在实际中很少用这种方式来表示进程占用内存的情况,用它来表示单个进程的内存使用情况是不准确的。
RSS 表示一个进程在RAM中实际使用的空间地址大小,包括了全部共享库占用的内存,这种表示进程占用内存的情况也是不准确的。
PSS 表示一个进程在RAM中实际使用的空间地址大小,它按比例包含了共享库占用的内存。假如有3个进程使用同一个共享库,那么每个进程的PSS就包括了1/3大小的共享库内存。这种方式表示进程的内存使用情况较准确,但当只有一个进程使用共享库时,其情况和RSS一模一样。
USS 表示一个进程本身占用的内存空间大小,不包含其它任何成分,这是表示进程内存大小的最好方式!
可以看到:VSS>=RSS>=PSS>=USS
尝试了使用DDMS分析Native内存的方法,由于导致游戏运行过慢放弃,但这仍不失为一个好方法。
<p>版权声明:本文为博主原创文章,未经博主允许不得转载。</p>