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算法可以在更优的时间复杂度下求解有向图的支配树。

支配树(Dominator Tree)相关推荐

  1. Memory Analyzer Tool 1 Shallow heap Retained heap dominator tree(控制树)

    文章目录 1. shallow heap 2. retained heap 3. dominator tree(控制树) 1. shallow heap 引用原文介绍 :Shallow heap is ...

  2. 有向图的必经点,支配树

    支配树的背景 流程图 食物链 GC 场景 DAG 上求支配树 树上倍增 模板: P2597 灾难 一般有向图上求支配树 Lengauer-Tarjan 算法 模板: P5180 [模板]支配树 $0 ...

  3. 第26课:MAT中的Dominator Tree与Retained Set详解

    内容: 1.Dominator Tree与Retained Set         2.Dominator Tree详解 一.Dominator Tree与Retained Set Retained ...

  4. [支配树][lca][倍增][线段树][拓扑] Jzoj P4240 游行

    Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...

  5. 使用行为树(Behavior Tree)实现网游奖励掉落系统

    原地址:http://blog.csdn.net/akara/article/details/6165421 [原创]使用行为树(Behavior Tree)实现网游奖励掉落系统 by AKara 2 ...

  6. hihocoder #1343 : Stable Members(支配树)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Recently Little Hi joined an algorithm learning group. The gr ...

  7. 数据结构与算法(C++)– 树(Tree)

    数据结构与算法(C++)– 树(Tree) 1.树的基础知识 树(tree): 一些节点的集合,可以为空集 子树(sub tree): 树的子集 根(root): 树的第一个节点 孩子和父亲(Chil ...

  8. C语言实现段树segment tree(附完整源码)

    C语言实现段树segment tree 段树结构体定义 实现以下6个接口 完整实现和main测试源码 段树结构体定义 typedef struct segment_tree {void *root; ...

  9. 看动画学算法系列之:后缀树suffix tree

    文章目录 简介 字典树Trie 压缩字典树 后缀树Suffix Tree 后缀树的搜索 查找最长重复子字符串 查找两个字符串的最长公共子字符串 后缀树的代码实现 简介 模式匹配是一个在工作中经常会用到 ...

  10. 【学习笔记】DAG / 一般有向图的支配树 / 灭绝树

    定义与声明 一个有向图 GGG.给定一个起点 sss,假设 sss 能到达所有点. 若去掉某个点 iii 后,sss 无法到达 jjj,则称 iii 为 jjj 的支配点. 显然支配点存在传递关系. ...

最新文章

  1. 10 个 GitHub 上超火的 CSS 技巧项目,找到写 CSS 的灵感!
  2. 力扣——寻找两个有序数组的中位数
  3. Ajax应用简单实例
  4. 【图像压缩】基于matlab GUI哈达玛变换图像压缩【含Matlab源码 845期】
  5. 软件工程中逻辑覆盖的例题_干货丨一文读懂:飞算全自动软件工程平台如何提升软件开发效率...
  6. 《Linux 命令行大全》
  7. linux加载dl580网卡驱动,HP DL580G5安装centos下的阵列卡驱动
  8. Linux系统中CPU占用率较高问题排查思路与解决方法
  9. 启动界面、封面图片、Splash关不掉,一直转圈,无法进入
  10. mov格式怎么转换成mp4?
  11. flv.js视频播放库基本用法
  12. 使用Vue开发微信小程序:mpvue框架
  13. 单片机定时器和计数器的实验C语言,(单片机原理与应用)定时器/计数器设计实验...
  14. java 气泡图_JavaScript图表库Highcharts入门教程(八):气泡图
  15. 听哈佛商学院教授讲:如何建立信任
  16. Linux通过curl下载jdk
  17. cmd命令窗口无法使用快捷键处理方法
  18. 小波变换(matlab)-wavelet toolbox
  19. 结账时提示:不能在对象 't_Balance' 中插入重复键
  20. BeautifulSoup的soup.find_all()与 soup.select()赏析

热门文章

  1. 论文阅读:Tackling the Challenges in Scene Graph Generation with Local-to-Glocal Interaction
  2. python去除图片水印api,python去除图片水印(部分可)
  3. Iterative closest point (ICP) 算法
  4. 男人必备!泡妞全攻略
  5. Python 在线编译器简单实现
  6. 证明N={1,2,...,n,...}有最大元 黄小宁
  7. MVC5局部视图的调用
  8. ffmpeg 一条命令实现 圆形画中画效果
  9. Hi3559AV100 RTSP推H265视频码流使用VLC软件本地直播
  10. python教程cos_Python爬虫入门教程 12-100 半次元COS图爬取