MemoryAnalizer它是一个Eclipse推出的内存分析工具(Memory Analizer Tool)简称MAT
我们可以通过它的帮助找出内存泄漏,并且减少内存的消耗.
要想使用它首先要在Eclipse中装上该插件,步骤如下:
2>2>,下载完成后可以在Eclipse中安装
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
while (1<2){
list.add("OutOfMemoryError soon");
}
}
}
然后单击右键 --> Run Configurations弹出如下对话框,把红色标注的内容添上去.
-XX:+HeapDumpOnOutOfMemoryError
然后刷新工程发现出现一个以hprof结尾的文件,如下所示:
然后通过插件将其打开,但是我们的插件不知道为什么打不开,总是报错,最后在网上找答案,建议使用RCP(Rich Client Platform,胖客户端平台)
下载成功后解压,打开MemoryAnalyzer.exe文件
在android使用MAT插件:
Dalvik虚拟机在运行的的时候,也有垃圾回收机制,但是这不意味着我们可以忽略内存的管理,我们应该更加关心手机设备的内存的使用,因为手机的内存比较紧张.在这篇文章里面,我们将要看看一些在android SDK中的内存描绘的工具,帮助我们调整应用程序内存的使用.
一些内存的使用问题是比较明显的,例如,你的应用程序在用户每次触摸屏幕都出现内存泄漏,这可能触发OutofMemoryError异常,并且程序崩溃了.其他的内存泄漏问题比较微妙了,可能仅仅导致应用程序(垃圾回收次数更加频繁并且花费时间更长)和系统执行效率下降,
Android SDK提供了两种主要的方式来描述程序内存的使用:Allocation Tracke(in DDMS[Dalvik Debug Monitor Service])和 heap dumps.
接下来我们将把焦点放在heap dumps上面,它是一个更加强大的内存分析工具.
这里有一些生成一个正在运行的android程序的heap dumps.一种是使用Dump HPROF file 按钮在DDMS里
如果我们想更加精确的知道什么时候dump被创建,我们能够使用android .os.Debug.dumpHprofData()方法以编程的方式来创建deap dump.
或者MAT.然后,第一步需要转换.hprof文件格式从Dalvik格式到Javase HPROF格式.可以使用Android SDK中的hprof-conv工具,在cmd命令行里输入该命令,使用格式如下
hprof-conv in.hprof out.hprof
下面通过一个例子来讲解:
先创建一个Activity
public class MainActivity extends Activity {
static ArrayList<Pilot> list = new ArrayList<Pilot>();//定义一个集合,如果在实际程序可能就是当作缓存了.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
for (int i = 0; i < 2000; i++)
{//在里面添加2000个对象.
list.add(new Pilot("dsfdsgdgdgvfgdsfsd",i));
}
}
}
然后启动该程序,在DDMS中Device 面板里面可以看到该程序的进程.
单击我们程序的进程,然后单击 update heap按钮,右边的面板可能会出现如下图所示的内容,如果不出现单击Cause GC.
在此基础上创建一个heap dump,在Devices工具栏里面有一个Dump HPROF file 按钮,单击该按钮就会弹出hprof文件保存的路径(在此之前要保证我们选中的是我们程序的进程),然后选择一个路径保存即可.接着通过hprof-conver命令转换一下格式即可.最后我们通过安装的插件或者RCP打开即可.
我这里是用过RCP打开的.如图所示:
我们还可以打开Histogram View,所在位置如图所示:
我们在Activty创建了2000个Pilot对象在这里都有显示.并且还支持对象个数,shallow heap(表示所有对象占用的内存大小),retained heap(保持这些对象存活,还包括其他对象对它们引用所需要的内存.)的排序列表.
调试内存泄漏,有时候是有用的在一个不同的时间点去比较堆的状态,这需要我们创建两份HPROF文件,
那么如何去比较两个heap dumps在MAT里(这有一点点复杂)?
1>打开第一个HPROF文件(单击file-->Open Heap Dump)
2>打开Histogram View
3>....
-
Open the first HPROF file (usingFile > Open Heap Dump).
-
Open the Histogram view.
-
In the Navigation History view (useWindow > Navigation Historyif it's not visible), right click onhistogramand selectAdd to Compare Basket.
-
Open the second HPROF file and repeat steps 2 and 3.
-
Switch to the Compare Basket view, and clickCompare the Results(the red "!" icon in the top right corner of the view).
Conclusion
In this article, I've shown how the Allocation Tracker and heap dumps can give you get a better sense of your application's memory usage. I also showed how The Eclipse Memory Analyzer (MAT) can help you track down memory leaks in
your app. MAT is a powerful tool, and I've only scratched the surface of what you can do with it. If you'd like to learn more, I recommend reading some of these articles:
分享到:
相关推荐
Android基础教程源码,code,手机软件入门教程源码
android开发入门教程:一看就懂的Android APP开发入门教程
android经典教程_part1一份很好的android入门教程····快来拍砖吧····
02_Android视频教程_搭建Android开发环境【】03Android视频教程_创建与启动手机模拟器【】04_Android视频教程_开发与运行(卸载)第一个ANDROID应用【】05_Android视频教程_项目的目录结构与安装及启动过程分析【 ...
Android应用开发入门教程__经典版
android_内存泄露分析_mat整理.pdf
android_内存泄露分析_mat参考.pdf
android经典教程_part2 一份很经典的入门学习资料···快来拍砖吧···
android_内存泄露分析_mat[归纳].pdf
Android 内存泄露 Mat工具分析。非常好的分析工具讲解
android 4.1 最新SDK Windows版: http://s1.eoeandroid.com/sdk/4.1/android-sdk_r20-windows.zip(推荐) http://s1.eoeandroid.com/sdk/4.1/installer_r20-windows.exe Mac版: ...
主要从5个模块入手: 1 java的GC机制以及Android最大堆内存分配 2 Monitors 3 DDMS/Traceview 4 Mat 5 LeakCanary 6 开发中要注意的点。
MT6589_Android_scatter_emmc.txt 配置文件
分享Andorid教程,Android开发视频,Android自学教程,Android项目源码等,此套为20天精通Android开发教程第02天教程。
Android内存分析工具,和AS的.hprof文件配合使用分析应用APP的内存。
传智播客_Andorid教程_20天从零到精通精通Android开发视频_第05天 1、SQlite数据库简介 2、SQliteOpenHelper介绍获取 3、数据库升级 4、直接执行sql操作数据库,增删改查 5、通过谷歌封装的api操作数据库,增删改查 ...
Android_Application_Development android入门教程 Android开发 安致 安卓开发入门
android-sdk_r21-windows.zip
Rockchip固件烧录工具AndroidTool_Release,rockusb驱动安装助手,及使用说明
android_px_多屏幕适配生成工具和资源android_px_多屏幕适配生成工具和资源android_px_多屏幕适配生成工具和资源android_px_多屏幕适配生成工具和资源