内存分析插件-Memory Analyzer (MAT)
2014-01-12 21:48
120 查看
作用:分析内存占用,检查内存泄露
使用:
1、安装插件mat
2、查看内存占用
1),DDMS界面,选中要查看的进程,然后点击Dump HPROP file(如下图),然后就会生成文件并通过mat解析
2),以下是图表的方式分析,略过,不解
3),我使用的是查看对象占用内存表,点击左上的图标
然后就会打开以下界面
Objects 列表示对象数目,Shallow Heap 表示对象占用的内存,Retained Heap表示对象及其引用对象共占用的内存
4),分析内存泄露可以通过观察Objects 数目,更进一步地分析就是程序运行后就Dump HPROP file,再等过段时间再Dump HPROP file一次,前后两次对比对象数目来判断。
示例代码:
public class MainActivity extends Activity {
private LinearLayout root;
class Leaky {
}
List list = new ArrayList();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
root = (LinearLayout) findViewById(R.id.root);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt1:
for (int i = 0; i < 1000; i++) {
list.add(new Leaky());
}
break;
case R.id.bt2:
list.clear();
break;
}
}
}
点击bt1,然后Dump HPROP file,看到如下生成了1000个Leaky对象
点击bt2,释放leaky,Dump HPROP file后看到查看leaky对象数目为0 (正则匹配显示)
以上就是一个直观的查看对象数目、对象占用内存情况
还可以对比分析
再点击bt1,然后Dump HPROP file,接着点击compare...
然后在弹出选着对比文件中,选中刚刚dump的文件
然后会看到如下对比结果
很清晰的就知道点击bt1后进程的对象增加情况。项目内存泄露既可以通过这样前后对比推测哪些对象未被回收而造成泄露了
ViewGroup.removeAllViews();调用这个方法在清空子view的时候,如果子view有添加了callback,则必须要在view移除的回调(比如onDetachedFromWindow) 中removecallback,否则子view无法释放。
使用:
1、安装插件mat
2、查看内存占用
1),DDMS界面,选中要查看的进程,然后点击Dump HPROP file(如下图),然后就会生成文件并通过mat解析
2),以下是图表的方式分析,略过,不解
3),我使用的是查看对象占用内存表,点击左上的图标
然后就会打开以下界面
Objects 列表示对象数目,Shallow Heap 表示对象占用的内存,Retained Heap表示对象及其引用对象共占用的内存
4),分析内存泄露可以通过观察Objects 数目,更进一步地分析就是程序运行后就Dump HPROP file,再等过段时间再Dump HPROP file一次,前后两次对比对象数目来判断。
示例代码:
public class MainActivity extends Activity {
private LinearLayout root;
class Leaky {
}
List list = new ArrayList();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
root = (LinearLayout) findViewById(R.id.root);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt1:
for (int i = 0; i < 1000; i++) {
list.add(new Leaky());
}
break;
case R.id.bt2:
list.clear();
break;
}
}
}
点击bt1,然后Dump HPROP file,看到如下生成了1000个Leaky对象
点击bt2,释放leaky,Dump HPROP file后看到查看leaky对象数目为0 (正则匹配显示)
以上就是一个直观的查看对象数目、对象占用内存情况
还可以对比分析
再点击bt1,然后Dump HPROP file,接着点击compare...
然后在弹出选着对比文件中,选中刚刚dump的文件
然后会看到如下对比结果
很清晰的就知道点击bt1后进程的对象增加情况。项目内存泄露既可以通过这样前后对比推测哪些对象未被回收而造成泄露了
ViewGroup.removeAllViews();调用这个方法在清空子view的时候,如果子view有添加了callback,则必须要在view移除的回调(比如onDetachedFromWindow) 中removecallback,否则子view无法释放。
相关文章推荐
- 如何查看ubuntu下显卡驱动是否已经成功安装
- PHP登陆提示信息框代码
- Linux df命令学习
- EEPROM at24c256读写
- 下面程序有什么错误呢?
- Linux sed命令学习
- vim的常用命令
- vim显示标签页的序号
- Candy III
- PHP设置头部编码为UTF-8语句
- Linux crontab命令学习
- AD9516
- 软件工程-软件危机
- python itertools模块学习
- [转] C语言**位运算**终极剖析 分析的很详细
- python爬虫常用的模块
- 递归算法——归并排序,快速排序,二分查找
- C 语言中 setjmp 和 longjmp
- 2013最吃香的技能:Java称霸、Android势头正猛
- iOS- 用MapKit和CoreLocation 来实现移动设备(地图与定位)