[发明专利]内存泄漏分析方法及相关装置有效
申请号: | 201710931642.7 | 申请日: | 2017-10-09 |
公开(公告)号: | CN109634835B | 公开(公告)日: | 2021-07-27 |
发明(设计)人: | 丁海盛 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 深圳市深佳知识产权代理事务所(普通合伙) 44285 | 代理人: | 王仲凯 |
地址: | 518000 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 内存 泄漏 分析 方法 相关 装置 | ||
1.一种内存泄漏分析方法,其特征在于,包括:
获取目标对象的强引用对象,其中,所述强引用对象为被所述目标对象强引用的对象,并且,所述目标对象至少有i个,第一个所述目标对象为监测出的、发生内存泄漏的对象,第i个所述目标对象是第i-1个所述目标对象的强引用对象,i为大于1的自然数;
构造表征对象之间强引用关系的有向图,其中,所述对象包括各所述目标对象及其强引用对象,所述有向图包括节点和有向边,不同的所述节点表征不同的所述对象,并且任一所述有向边关联的两个节点包括始点和终点,所述终点表征的对象是所述始点表征的对象的强引用对象;
遍历所述有向图中的节点,以确定所述有向图中的节点是否组成环路;
若组成环路,定位所述环路上的节点所表征的对象为存在内存循环引用的对象;
其中,若所述目标对象为块对象,所述获取目标对象的强引用对象包括:
伪造块对象及其引用对象,其中,伪造的引用对象与所述目标对象的引用对象一一对应,所述伪造的引用对象为伪造引用对象,所述目标对象的引用对象为真实引用对象;
释放所述伪造的块对象,其中,所述伪造的块对象在被释放时将向其强引用对象发送释放消息,而收到所述释放消息的伪造引用对象为目标伪造引用对象;
将所述目标伪造引用对象所对应的真实引用对象,确定为所述目标对象的强引用对象。
2.如权利要求1所述的方法,其特征在于,若所述目标对象为自定义对象,所述获取目标对象的强引用对象包括:
获取所述目标对象引用的所有对象,其中,所述所有对象包括所述强引用对象和弱引用对象,所述弱引用对象为被所述目标对象弱引用的对象;
去除所述所有对象中的所述弱引用对象,得到所述目标对象的强引用对象。
3.如权利要求2所述的方法,其特征在于,
所述自定义对象为Objective-C对象;
所述获取所述目标对象引用的所有对象包括:
使用Objective-C Runtime class_getIvarLayout()函数,获取所述Objective-C对象引用的所有对象。
4.如权利要求3所述的方法,其特征在于,在所述去除所述所有对象中的所述弱引用对象,得到与目标对象之间具有强引用关系的对象之前,还包括:
使用class_getWeakIvarLayout()函数获取所述Objective-C对象的弱引用对象。
5.如权利要求1所述的方法,其特征在于,
所述伪造的块对象的isa指针与所述目标对象的isa指针指向同一种类型的类class;
isa指针指向同一种类型的class的块对象具有相同的强引用关系。
6.如权利要求2-5任一项所述的方法,其特征在于,所述获取目标对象的强引用对象还包括:获取所述目标对象的关联对象中的强引用对象。
7.如权利要求6所述的方法,其特征在于,所述获取所述目标对象的关联对象中的强引用对象包括:
搜索引用关系表中所述目标对象的关联对象的索引,其中,所述引用关系表包含具有关联对象的对象及其强引用的关联对象的索引;
搜索出的索引所对应的关联对象为所述目标对象的强引用对象。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710931642.7/1.html,转载请声明来源钻瓜专利网。