殁舞

导航

 

参考:https://blog.csdn.net/x275920/article/details/123991656
主要分为2种操作。

  • 简单粗暴

    1. 来个内存泄漏分析Leak Suspects和Top Consumers,可以看出大部分简单的内存泄漏问题
    2. 看保留堆/深堆Retained Heap大的,这个表示如果这个对象被清理,那么Retained Heap都是可以被清理的,所以内存释放不掉看这种
    3. 确定是哪个对象后,再看这个对象的引用关系,
      • List objects -> incoming谁引用了这个对象,可以跟踪到这个对象在哪创建的,可以定位问题
      • List objects -> outcoming这个对象引用了哪些对象(可以看做保留堆)
  • 仔细分析

    • 看支配树Dominator Tree手动分析,套路和上述差不多,不过可以更灵活的使用一些方法
      • 比如当保留堆看起来都不大,那么可以按类、包名对实体进行分组,可能可以看出哪个类的保留堆比较大。
      • 或者对实体进行正则过滤,只关注自己怀疑的类。
    • 看直方图Histogram,这个就是按类的维度来看哪个类的保留堆比较大。
    • 看线程概况thread_overview,可以看出是否某个线程保留堆比较大。

这里只是作为一个索引,在详细的可以看参考的文档,写的比较贴心

posted on 2024-01-25 17:28  殁舞  阅读(5)  评论(0编辑  收藏  举报