eclipse 里面heap 内存报告分析
2016-07-04 14:12
316 查看
无 论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方。 Android tools中的DDMS就带有一个很不错的内存监测工具Heap(这里我使用eclipse的ADT插件,并以真机为例,在模拟器中的情 况类似)。用Heap监测应用进程使用内存情况的步骤如下:
1. 启动eclipse后,切换到DDMS视图,并确认Devices视图、Heap视图都是打开的;
2. 将手机通过USB链接至电脑,链接时需要确认手机是处于“USB调试”模式;
3. 链接成功后,在DDMS的Devices视图中将会显示手机设备的序列号,以及设备中正在运行的部分进程信息;
4. 点击选中想要监测的进程,比如system_process进程;
5. 点击选中Devices视图界面中最上方一排图标中的“Update Heap”图标;
6. 点击Heap视图中的“Cause GC”按钮;
7. 此时在Heap视图中就会看到当前选中的进程的内存使用量的详细情况[如图所示]。
其中如果不知道怎么出来的这个功能,请往下看,如图
1、
将手机链接到电脑,链接时需要确认手机处于“USB调试”模式。链接成功后,在DDMS的Devices视图中将会显示手机设备的序列号,以及设备正在运行的部分进程的信息。
2、点击选中你想要检测的进程,比如com.plamdream.RuyicaiAndroid。在点击选中Device视图界面上放一排图标的“UpdateHeap”图标。
二 、 以
b3d8
上的方法就可以查看自己项目内存情况的,下面就看着每个列表的数据分析都是代表什么意思了。(判断我们的程序是否有内存泄露的可能性)
1、
这里需要注意一个值,Heap视图中,有一个Type叫做dataobject,即数据对象,也就是我们程序中大量存在的类类型的对象。它有一个TotoalSize列,就是当前进程中所有Java数据对象的内存总量。一般情况下,这个值的大小决定了是否会有内存泄露。
不断操作当前应用,同时注意观察dataobject的TotoalSize值。
正常情况下:TotalSize值都会稳定在一个有限的范围内,也就是由于程序中的代码良好,没有造成对象不被垃圾回收的情况。所以说虽然我们不断的操作会不对生成很多新的对象,而现在虚拟机不断的进行GC的过程,这些对象都会被回收了,内存占有量会回落到一个稳定水平。
异常情况:如果代码中存在没有释放对象引用的情况,则dataobject的TotoalSize值在每次GC后会不明显回落,随着操作次数的增多TotoalSize的值会越来越大。 (此处已system_process进程为例,在我的测试环境中system_process进程所占用的内存的data
object的Total Size正常情况下会稳定在2.2~2.8之间,而当其值超过3.55后进程就会被kill。)
2、heap试图里面,其中一个free的内存是VM中Java的使用的内存。
1. 启动eclipse后,切换到DDMS视图,并确认Devices视图、Heap视图都是打开的;
2. 将手机通过USB链接至电脑,链接时需要确认手机是处于“USB调试”模式;
3. 链接成功后,在DDMS的Devices视图中将会显示手机设备的序列号,以及设备中正在运行的部分进程信息;
4. 点击选中想要监测的进程,比如system_process进程;
5. 点击选中Devices视图界面中最上方一排图标中的“Update Heap”图标;
6. 点击Heap视图中的“Cause GC”按钮;
7. 此时在Heap视图中就会看到当前选中的进程的内存使用量的详细情况[如图所示]。
其中如果不知道怎么出来的这个功能,请往下看,如图
1、
将手机链接到电脑,链接时需要确认手机处于“USB调试”模式。链接成功后,在DDMS的Devices视图中将会显示手机设备的序列号,以及设备正在运行的部分进程的信息。
2、点击选中你想要检测的进程,比如com.plamdream.RuyicaiAndroid。在点击选中Device视图界面上放一排图标的“UpdateHeap”图标。
二 、 以
b3d8
上的方法就可以查看自己项目内存情况的,下面就看着每个列表的数据分析都是代表什么意思了。(判断我们的程序是否有内存泄露的可能性)
1、
这里需要注意一个值,Heap视图中,有一个Type叫做dataobject,即数据对象,也就是我们程序中大量存在的类类型的对象。它有一个TotoalSize列,就是当前进程中所有Java数据对象的内存总量。一般情况下,这个值的大小决定了是否会有内存泄露。
不断操作当前应用,同时注意观察dataobject的TotoalSize值。
正常情况下:TotalSize值都会稳定在一个有限的范围内,也就是由于程序中的代码良好,没有造成对象不被垃圾回收的情况。所以说虽然我们不断的操作会不对生成很多新的对象,而现在虚拟机不断的进行GC的过程,这些对象都会被回收了,内存占有量会回落到一个稳定水平。
异常情况:如果代码中存在没有释放对象引用的情况,则dataobject的TotoalSize值在每次GC后会不明显回落,随着操作次数的增多TotoalSize的值会越来越大。 (此处已system_process进程为例,在我的测试环境中system_process进程所占用的内存的data
object的Total Size正常情况下会稳定在2.2~2.8之间,而当其值超过3.55后进程就会被kill。)
2、heap试图里面,其中一个free的内存是VM中Java的使用的内存。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories