性能优化之内存泄漏检测

1.启动应用

性能优化之内存泄漏检测_第1张图片
1.png

2.查看堆信息

性能优化之内存泄漏检测_第2张图片
2.png

3.分析

性能优化之内存泄漏检测_第3张图片
3.png
性能优化之内存泄漏检测_第4张图片
4.png

4.查看分析结果

性能优化之内存泄漏检测_第5张图片
5.png
性能优化之内存泄漏检测_第6张图片
6.png

5.总结

内存泄漏:在Java中有些对象的生命周期是有限的,当它们完成了特定的逻辑后将会被垃圾回收;但是,如果在对象的生命周期本来该被垃圾回收时这个对象还被别的对象所持有引用,那就会导致内存泄漏。

  • context长期持有:当activity已经销毁,但是任然有其他对象持有其传递过去的context引用,导致GC无法回收(尽可能使用applicationContext对象可以在一定程度上避免这个问题)
  • static修饰成员变量:static修饰的成员属于类,而不是对象,所以该成员的引用的生命周期会较长,可能会导致内存泄漏(尽量避免static修饰的成员引用资源耗费过多的实例,如Context;在Activity生命周期结束时手动置空该引用,从而使得GC可以回收)
简言之:不要把activity轻易的交给其他“人”,如果非要这么做,记得在自己销毁时,收回(置空)自己的引用。

6.性能优化工具

leakcanary
360fireline

你可能感兴趣的:(性能优化之内存泄漏检测)