[发明专利]内存泄漏分析方法及相关装置有效
申请号: | 201710931642.7 | 申请日: | 2017-10-09 |
公开(公告)号: | CN109634835B | 公开(公告)日: | 2021-07-27 |
发明(设计)人: | 丁海盛 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 深圳市深佳知识产权代理事务所(普通合伙) 44285 | 代理人: | 王仲凯 |
地址: | 518000 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 内存 泄漏 分析 方法 相关 装置 | ||
本发明提供了内存泄漏分析方法及相关装置,以进行内存泄漏分析,定位存在内存循环引用的对象。该方法包括:获取目标对象的强引用对象,其中,强引用对象为被目标对象强引用的对象,目标对象至少有i个,第一个目标对象为监测出的、发生内存泄漏的对象,第i个目标对象是第i‑1个目标对象的强引用对象;构造表征各对象之间强引用关系的有向图,其中,有向图包括节点和有向边,不同的节点表征不同的对象;任一有向边关联的两个节点包括始点和终点,终点表征的对象是始点表征的对象的强引用对象;遍历有向图中的节点,以确定有向图中的节点是否组成环路;若组成环路,定位环路上的节点所表征的对象为引起内存泄漏的对象。
技术领域
本发明涉及计算机技术领域,更具体的说是涉及内存泄漏分析方法及相关装置。
背景技术
内存泄漏,也称作存储渗漏,指的是程序在运行过程中动态申请的内存空间在使用完毕后未释放,导致对象一直占据内存的现象。
内存泄漏大多是由内存循环引用导致的,虽然有ARC(Automatic ReferenceCounting,自动引用计数)内存管理机制,但两个或多个对象之间进行相互引用依然会造成内存循环引用,进而导致内存泄漏。例如,对象a创建并强引用到了对象b,对象b创建并强引用到了对象c,对象c创建并强引用到了对象b。此外,对象b和c的引用计数分别是2和1。当对象a不再使用b时,会调用release释放对对象b的所有权,因为对象c还强引用了对象b,所以对象b的引用计数为1,则对象b不会被释放。而对象b不释放,对象c的引用计数就是1,因此对象c也不会被释放。这样,对象b和对象c将一直占据,引起内存泄漏。
因此,当发现某对象有内存泄漏问题时(例如发现对象有a内存泄漏问题时),如何进行内存泄漏分析,定位与该对象相互引用的对象,是目前研究的热门。
发明内容
有鉴于此,本发明实施例提供内存泄漏分析方法及相关装置,以进行内存泄漏分析,定位存在内存循环引用的对象。
为实现上述目的,本发明实施例提供如下技术方案:
一种内存泄漏分析方法,包括:
获取目标对象的强引用对象,其中,所述强引用对象为被所述目标对象强引用的对象,并且,所述目标对象至少有i个,第一个所述目标对象为监测出的、发生内存泄漏的对象,第i个所述目标对象是第i-1个所述目标对象的强引用对象,i为大于1的自然数;
构造表征对象之间强引用关系的有向图,其中,所述对象包括各所述目标对象及其强引用对象,所述有向图包括节点和有向边,不同的所述节点表征不同的所述对象,并且任一所述有向边关联的两个节点包括始点和终点,所述终点表征的对象是所述始点表征的对象的强引用对象;
遍历所述有向图中的节点,以确定所述有向图中的节点是否组成环路;
若组成环路,定位所述环路上的节点所表征的对象为存在内存循环引用的对象。
一种内存泄漏分析装置,包括:
获取单元,用于:
获取目标对象的强引用对象,其中,所述强引用对象为被所述目标对象强引用的对象,并且,所述目标对象至少有i个,第一个所述目标对象为监测出的、发生内存泄漏的对象,第i个所述目标对象是第i-1个所述目标对象的强引用对象,i为大于1的自然数;
分析单元,用于:
构造表征对象之间强引用关系的有向图,其中,所述对象包括各所述目标对象及其强引用对象,所述有向图包括节点和有向边,不同的所述节点表征不同的所述对象,并且任一所述有向边关联的两个节点包括始点和终点,所述终点表征的对象是所述始点表征的对象的强引用对象;
遍历所述有向图中的节点,以确定所述有向图中的节点是否组成环路;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710931642.7/2.html,转载请声明来源钻瓜专利网。