android内存 CPU
内存
在Android里,程序内存被分为2部分:native和dalvik,dalvik就是我们普通的java使用内存,也就是我们上一篇文章分析堆栈的时候使用的内存。我们创建的对象是在这里面分配的,对于内存的限制是 native+dalvik 不能超过最大限制。android程序内存一般限制在16M,也有的是24M(早期的Android系统G1,就是只有16M)。具体看定制系统的设置,在Linux初始化代码里面Init.c,可以查到到默认的内存大小。
查看某个应用的内存消耗情况:adb shell dumpsys meminfo $package_name or $pid
- dalvik:是指dalvik所使用的内存。
- native:是被native堆使用的内存。应该指使用C\C++在堆上分配的内存。
- other:是指除dalvik和native使用的内存。但是具体是指什么呢?至少包括在C\C++分配的非堆内存,比如分配在栈上的内存。
- Pss:它是把共享内存根据一定比例分摊到共享它的各个进程来计算所得到进程使用内存。
- PrivateDirty:它是指非共享的,又不能换页出去(can not be paged to disk )的内存的大小。比如Linux为了提高分配内存速度而缓冲的小对象,即使你的进程结束,该内存也不会释放掉,它只是又重新回到缓冲中而已。
- SharedDirty:与上面相对。
/proc/stat文件
第一行是是总的CPU使用情况,我们自用关心这个就可以了。
- user:从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含nice值为负进程。
- nice:从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间。
- system:从系统启动开始累计到当前时刻,处于核心态的运行时间。
- idle:从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间。
- iowait:从系统启动开始累计到当前时刻,IO等待时间。
- irq:从系统启动开始累计到当前时刻,硬中断时间。
- softirq:从系统启动开始累计到当前时刻,软中断时间。
- stealstolen:which is the time spent in other operating systems when running in a virtualized environment。
- guest:which is the time spent running a virtual CPU for guest operating systems under the control of the Linux kernel。
总的cpu时间totalCpuTime = user + nice + system + idle + iowait + irq + softirq + stealstolen + guest
/proc/pid/stat
该文件包含了某一进程所有的活动的信息,该文件中的所有值都是从系统启动开始累计
到当前时刻。
- pid=6873 进程号
- utime=1587 该任务在用户态运行的时间,单位为jiffies
- stime=41958 该任务在核心态运行的时间,单位为jiffies
- cutime=0 所有已死线程在用户态运行的时间,单位为jiffies
- cstime=0 所有已死在核心态运行的时间,单位为jiffies
进程的总Cpu时间processCpuTime = utime + stime + cutime + cstime,该值包括其所有线程的cpu时间
/proc/pid/task/stat
该文件包含了某一进程所有的活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。该文件的内容格式以及各字段的含义同/proc/pid/stat文件。
线程Cpu时间threadCpuTime = utime + stime