1. 避免可控的内存泄漏
1.1 什么是内存泄漏
1.2 内存泄漏的场景
1.2.1 非静态内部类的静态实例
1.2.2 多线程相关的匿名内部类/非静态内部类
1.2.3 Handler 内存泄漏
1.2.4 未正确使用 Context
1.2.5 静态 View
1.2.6 WebView
使用 WebView 会把 WebView 的 APK 资源加载进来,而且应用生命周期结束前都不会被卸载。
1.2.7 资源对象未关闭
1.2.8 集合中对象没清理
1.2.9 Bitmap 对象
1.2.10 监听器未关闭
2. Memory Monitor
2.1 使用 Memory Monitor
2.2 大内存申请与 GC
2.3 内存抖动
3. Allocation Tracker
3.1 使用 Allocation Tracker
3.2 alloc 文件分析
4. Heap Dump
4.1 使用 Heap Dump
4.1.1 总览视图
4.1.2 详情视图
4.2 检测内存泄漏
5. 内存分析工具 MAT
5.1 生成 hprof 文件
5.1.1 准备内存泄漏的代码
5.1.2 DDMS 生成 hprof 文件
5.1.3 Memory Monitor 生成 hprof 文件
5.2 MAT 分析 hprof 文件
5.2.1 Dominator Tree
Dominator Tree 意为支配树。
- Shallow Heap
- Retained Heap
5.2.2 Histogram
5.2.3 OQL
OQL 全称为 Object Query Language,类似于 SQL 的查询语言,用来查询当前内存中满足指定条件的所有对象。
5.2.4 对比 hprof 文件
6. LeakCanary
6.1 使用 LeakCanary
请看官方文档。
6.2 LeakCanary 应用举例
请看官方文档,下面举一个有些年月的例子。
- RefWatcher
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END