【技术实现步骤摘要】
内存泄漏分析方法及相关装置
本专利技术涉及计算机
,更具体的说是涉及内存泄漏分析方法及相关装置。
技术介绍
内存泄漏,也称作存储渗漏,指的是程序在运行过程中动态申请的内存空间在使用完毕后未释放,导致对象一直占据内存的现象。内存泄漏大多是由内存循环引用导致的,虽然有ARC(AutomaticReferenceCounting,自动引用计数)内存管理机制,但两个或多个对象之间进行相互引用依然会造成内存循环引用,进而导致内存泄漏。例如,对象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的自 ...
【技术保护点】
1.一种内存泄漏分析方法,其特征在于,包括:获取目标对象的强引用对象,其中,所述强引用对象为被所述目标对象强引用的对象,并且,所述目标对象至少有i个,第一个所述目标对象为监测出的、发生内存泄漏的对象,第i个所述目标对象是第i‑1个所述目标对象的强引用对象,i为大于1的自然数;构造表征对象之间强引用关系的有向图,其中,所述对象包括各所述目标对象及其强引用对象,所述有向图包括节点和有向边,不同的所述节点表征不同的所述对象,并且任一所述有向边关联的两个节点包括始点和终点,所述终点表征的对象是所述始点表征的对象的强引用对象;遍历所述有向图中的节点,以确定所述有向图中的节点是否组成环路;若组成环路,定位所述环路上的节点所表征的对象为存在内存循环引用的对象。
【技术特征摘要】
1.一种内存泄漏分析方法,其特征在于,包括:获取目标对象的强引用对象,其中,所述强引用对象为被所述目标对象强引用的对象,并且,所述目标对象至少有i个,第一个所述目标对象为监测出的、发生内存泄漏的对象,第i个所述目标对象是第i-1个所述目标对象的强引用对象,i为大于1的自然数;构造表征对象之间强引用关系的有向图,其中,所述对象包括各所述目标对象及其强引用对象,所述有向图包括节点和有向边,不同的所述节点表征不同的所述对象,并且任一所述有向边关联的两个节点包括始点和终点,所述终点表征的对象是所述始点表征的对象的强引用对象;遍历所述有向图中的节点,以确定所述有向图中的节点是否组成环路;若组成环路,定位所述环路上的节点所表征的对象为存在内存循环引用的对象。2.如权利要求1所述的方法,其特征在于,若所述目标对象为自定义对象,所述获取目标对象的强引用对象包括:获取所述目标对象引用的所有对象,其中,所述所有对象包括所述强引用对象和弱引用对象,所述弱引用对象为被所述目标对象弱引用的对象;去除所述所有对象中的所述弱引用对象,得到所述目标对象的强引用对象。3.如权利要求2所述的方法,其特征在于,所述自定义对象为Objective-C对象;所述获取所述目标对象引用的所有对象包括:使用Objective-CRuntimeclass_getIvarLayout()函数,获取所述Objective-C对象引用的所有对象。4.如权利要求3所述的方法,其特征在于,在所述去除所述所有对象中的所述弱引用对象,得到与目标对象之间具有强引用关系的对象之前,还包括:使用class_getWeakIvarLayout()函数获取所述Objective-C对象的弱引用对象。5.如权利要求1所述的方法,其特征在于,若所述目标对象为块对象,所述获取目标对象的强引用对象包括:伪造块对象及其引用对象,其中,伪造的引用对象与所述目标对象的引用对象一一对应,所述伪造的引用对象为伪造引用对象,所述目标对象的引用对象为真实引用对象;释放所述伪造的块对象,其中,所述伪造的块对象在被释放时将向其强引用对象发送释放消息,而收到所述释放消息的伪造引用对象为目标伪造引用对象;将所述目标伪造引用对象所对应的真实引用对象,确定为所述目标对象的强引用对象。6.如权利要求5所述的方法,其特征在于,所述伪造的块对象的isa指针与所述目标对象的isa指针指向同一种类型的类class;isa指针指向同一种类型的class的块对象具有相同的强引用关系。7.如权利要求2-6任一项所述的方法,其特征在于,所述获取目标对象的强引用对象还包括:获取所述目标对象的关联对象中的强引用对象。8.如权利要求7所述的方法,其特征在于,所述获取所述目标对象的关联对象中的强引用对象包括:搜索引用...
【专利技术属性】
技术研发人员:丁海盛,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东,44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。