MAT使用入门,mat入门
原文出处: 高建武 (Granker,@高爷)
MAT简介
MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。

MAT
当然MAT也有独立的不依赖Eclipse的版本,只不过这个版本在调试Android内存的时候,需要将DDMS生成的文件进行转换,才可以在独立版本的MAT上打开。不过Android SDK中已经提供了这个Tools,所以使用起来也是很方便的。
MAT工具的下载安装
这里是MAT的下载地址:https://eclipse.org/mat/downloads.php,下载时会提供三种选择的方式:

Download MAT
- Update Site 这种方式后面会有一个网址:比如http://download.eclipse.org/mat/1.4/update-site/ ,安装过Eclipse插件的同学应该知道,只要把这段网址复制到对应的Eclipse的Install New Software那里,就可以进行在线下载了。
- Archived Update Site 这种方式安装的位置和上一种差不多,只不过第一种是在线下载,这一种是使用离线包进行更新,这种方式劣势是当这个插件更新后,需要重新下载离线包,而第一种方式则可以在线下载更新。
- Stand-alone Eclipse RCP Applications 这种方式就是把MAT当成一个独立的工具使用,不再依附于Eclipse,适合不使用Eclipse而使用Android Studio的同学。这种方式有个麻烦的地方就是DDMS导出的文件,需要进行转换才可以在MAT中打开。
下载安装好之后,就可以使用MAT进行实际的操作了。
Android(Java)中常见的容易引起内存泄露的不良代码
使用MAT工具之前,要对Android的内存分配方式有基本的了解,对容易引起内存泄露的代码也要保持敏感,在代码级别对内存泄露的排查,有助于内存的使用。
Android主要应用在嵌入式设备当中,而嵌入式设备由于一些众所周知的条件限制,通常都不会有很高的配置,特别是内存是比较有限的。如果我们编写的代码当中有太多的对内存使用不当的地方,难免会使得我们的设备运行缓慢,甚至是死机。为了能够使得Android应用程序安全且快速的运行,Android的每个应用程序都会使用一个专有的Dalvik虚拟机实例来运行,它是由Zygote服务进程孵化出来的,也就是说每个应用程序都是在属于自己的进程中运行的。一方面,如果程序在运行过程中出现了内存泄漏的问题,仅仅会使得自己的进程被kill掉,而不会影响其他进程(如果是system_process等系统进程出问题的话,则会引起系统重启)。另一方面Android为不同类型的进程分配了不同的内存使用上限,如果应用进程使用的内存超过了这个上限,则会被系统视为内存泄漏,从而被kill掉。
常见的内存使用不当的情况
- 查询数据库没有关闭游标
描述:
程序中经常会进行查询数据库的操作,但是经常会有使用完毕Cursor后没有关闭的情况。如果我们的查询结果集比较小,对内存的消耗不容易被发现,只有在常时间大量操作的情况下才会复现内存问题,这样就会给以后的测试和问题排查带来困难和风险。
示例代码:
Java1 2 3 4 Cursor cursor = getContentResolver().query(uri ...); if (cursor.moveToNext()) { ... ... }
修正示例代码:
Java1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Cursor cursor = null; try { cursor = getContentResolver().query(uri ...); if (cursor != null & cursor.moveToNext()) { ... ... } } finally { if (cursor != null) { try { cursor.close(); } catch 您可能想查找下面的文章:
文章分类
最近更新的内容
- java.lang.IllegalArgumentException: Illegal character in query at index 261,
- Android学习笔记(31):滚动视图ScrollView浅析
- Android群英传笔记系列一view的介绍,android群英
- Swift开发iOS应用(1)列表的实现
- Android开发学习——Android项目的目录结构,android项目
- 悬浮对话框的实现,悬浮对话框实现
- Android Studio添加Parcelable序列化小工具(快速提高开发效率)
- android单选按钮RadioGroup的详细使用
- 文件缓存(配合JSON数组),缓存配合json数组
- 想要在launcher中模拟按home键。,launcherhome