前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >支配树(Dominator Tree)

支配树(Dominator Tree)

作者头像
SuperHeroes
发布2019-03-12 14:40:13
3.5K0
发布2019-03-12 14:40:13
举报
文章被收录于专栏:云霄雨霁

MAT中的支配树

在使用MAT分析项目的内存泄漏问题时,其中有一个支配树(Dominator)视图。如果我们把Java对象之间的引用关系看做一张有向图(可以存在环)的话,对象的支配树体现了对象之间的支配关系。如果所有指向对象B的路径都要经过对象A,则认为对象A支配对象B。如果对象A是离对象B最近的支配对象,则认为对象A是对象B的直接支配者。

支配树定理

除起始节点外都有每个点都有唯一的idom(直接支配者),且不成环,故所有的 (idom(w),w) 边形成一棵树,v支配w当且仅当v是树中w的祖先,这棵树叫做支配树。

对象的支配树有以下性质:

  1. 对象A的子树(所有被对象A支配的对象集合)表示对象A的保留集(retained set),即深堆
  2. 如果对象A支配对象B,那么对象A的直接支配者也支配对象B
  3. 支配树的边与对象引用图的边不直接对应

对象支配树的作用

可以用来求深堆的大小。这里解释一下浅堆和深堆:

  • 浅堆表示一个对象结构所占用的内存大小
  • 深堆表示一个对象被GC回收后,可真实释放的内存大小

从支配树的性质可以看出,如果释放对象A,则对象A对应的支配树上的子树都将被释放,因为子树上的对象都不可达了,应该被GC回收。所以支配树上某个对象节点的子树上所有对象的大小就是该对象的深堆大小。

支配树的求解方法

简单求解方法

使用 “迭代+DFS”方法实现。时间复杂度是O(mn)。

  1. 每次删掉一个点,判断哪些点无法从起始节点r到达
  2. 删掉点u后发现点v无法到达,那么点u就是r->v的必经点(点u就是v的支配点)

Lengauer-Tarjan算法

Lengauer-Tarjan算法可以在更优的时间复杂度下求解有向图的支配树。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/09/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MAT中的支配树
    • 支配树定理
      • 对象的支配树有以下性质:
        • 对象支配树的作用
        • 支配树的求解方法
          • 简单求解方法
            • Lengauer-Tarjan算法
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档