参考:https://blog.csdn.net/x275920/article/details/123991656
主要分为2种操作。
-
简单粗暴
- 来个内存泄漏分析Leak Suspects和Top Consumers,可以看出大部分简单的内存泄漏问题
- 看保留堆/深堆Retained Heap大的,这个表示如果这个对象被清理,那么Retained Heap都是可以被清理的,所以内存释放不掉看这种
- 确定是哪个对象后,再看这个对象的引用关系,
- List objects -> incoming谁引用了这个对象,可以跟踪到这个对象在哪创建的,可以定位问题
- List objects -> outcoming这个对象引用了哪些对象(可以看做保留堆)
-
仔细分析
- 看支配树Dominator Tree手动分析,套路和上述差不多,不过可以更灵活的使用一些方法
- 比如当保留堆看起来都不大,那么可以按类、包名对实体进行分组,可能可以看出哪个类的保留堆比较大。
- 或者对实体进行正则过滤,只关注自己怀疑的类。
- 看直方图Histogram,这个就是按类的维度来看哪个类的保留堆比较大。
- 看线程概况thread_overview,可以看出是否某个线程保留堆比较大。
- 看支配树Dominator Tree手动分析,套路和上述差不多,不过可以更灵活的使用一些方法
这里只是作为一个索引,在详细的可以看参考的文档,写的比较贴心
标签:总结,这个,MAT,对象,可以,保留,内存,思路 From: https://www.cnblogs.com/wish5714/p/17987735