adb shell dumpsys 命令 查看内存
来源:互联网 发布:透视眼软件 编辑:程序博客网 时间:2024/05/16 06:28
补记: MAT(memory analyzer tool )是google 推荐的进行内存使用量分析的工具. 功能全面而强大!!!
首先看一下dumpsys有哪些功能:
dumpsys 用来给出手机中所有应用程序的信息,并且也会给出现在手机的状态。
dumpsys [Option]
meminfo 显示内存信息
cpuinfo 显示CPU信息
account 显示accounts信息
activity 显示所有的activities的信息
window 显示键盘,窗口和它们的关系
wifi 显示wifi信息
从我的G14中可以看到它从以下service获得所有的信息
Currently running services:
SurfaceFlinger
accessibility
account
activity
alarm
appwidget
assetredirection
audio
backup
battery
batteryinfo
bluetooth
bluetooth_a2dp
bluetooth_hid
bluetooth_network
clipboard
connectivity
content
cpuinfo
device_policy
devicestoragemonitor
diskstats
dropbox
entropy
hardware
input_method
iphonesubinfo
isms
location
media.audio_flinger
media.audio_policy
media.camera
media.player
meminfo
mount
netstat
network_management
notification
package
接下来,来看看Android系统是如何实现dumpsys的。
dumpsys的代码在mydroid/frameworks/base/cmds/dumpsys/dumpsys.cpp
所有的dump信息都是由重载了Binder中的dump函数的类来完成:
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
...
}
代码很简单,发现搜有dump的信息都是由defaultServiceManager(关于Android的ServiceManager的结构分析参见我之后的一篇文章)提供的由系统注册的所有service来提供信息。
以meminfo为例:
它是在mydroid/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中的setSystemProcess函数处被注册的
SrviceManager.addService("activity", m);
ServiceManager.addService("meminfo", new MemBinder(m));
...
MemBinder->ProcessRecord->各个正在运行状态的ApplicationThread的状态(mydroid/frameworks/base/core/java/android/app/ActivityThread.java),从中得到需要的meminfo信息。
总之,关键还是package的管理和它的活动周期的管理问题。值得深入理解。
===========================================================================================
android程序内存被分为2部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 native+dalvik 不能超过最大限制。android程序内存一般限制在16M,当然也有24M的。
用以下命令可以查看程序的内存使用情况:
adb shell dumpsys meminfo $package_name or $pid //使用程序的包名或者进程id
用com.tencent.qqpimsecure为例:
具体每一项代表什么,参考:http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android#2299813,我们比较关心的是这2行:
其中size是需要的内存,而allocated是分配了的内存,对应的2列分别是native和dalvik,当总数也就是total这一列超过单个程序内存的最大限制时,OOM就很有可能会出现了。
多数时候,发生OOM 都是在做一些跟图片相关的操作,以下提出一些建议尽量可以减少这种情况的发生:
1
.decode bitmap 的时候,尽量配置下Options,例如:inSameSize
2
.Bitmap使用完以后,调用 bitmap.recycle()来释放内存
3
.如果应用是基于图片的应用,尽量采用LazyLoad和DymanicRecycle
4
.decode bitmap 的时候,将decode代码
try
catch
出来,
catch
oom error,避免程序crash,可以在
catch
里面做一些释放内存操作
http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android/2299813#2299813
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys命令 查看内存
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys 命令 查看内存
- adb shell dumpsys mminfo 命令 查看内存
- adb dumpsys 查看内存
- adb shell dumpsys 命令
- adb shell dumpsys 命令
- 各位大神们,初来咋到,求助呀!
- JSTL(fn函数)总结
- 有名管道通讯整理
- ZOJ-2547
- vua 10282 - Babelfish(Hash、map)
- adb shell dumpsys 命令 查看内存
- 自由软件之父:“苹果公司罪大恶极”
- Twitter将向科学家开放全部数据
- 多线程命名管道通信的设计
- POSIX条件变量
- struts学习
- AppDelegate详解+viewController中监听Home键触发以及重新进入界面的方法
- DreamWeaver CS5视频教程(建站必备)
- SCI论文写作的模式及套路