内存泄漏分析方法及相关装置制造方法及图纸

技术编号:20865785 阅读:16 留言:0更新日期:2019-04-17 09:13
本发明专利技术提供了内存泄漏分析方法及相关装置,以进行内存泄漏分析,定位存在内存循环引用的对象。该方法包括:获取目标对象的强引用对象,其中,强引用对象为被目标对象强引用的对象,目标对象至少有i个,第一个目标对象为监测出的、发生内存泄漏的对象,第i个目标对象是第i‑1个目标对象的强引用对象;构造表征各对象之间强引用关系的有向图,其中,有向图包括节点和有向边,不同的节点表征不同的对象;任一有向边关联的两个节点包括始点和终点,终点表征的对象是始点表征的对象的强引用对象;遍历有向图中的节点,以确定有向图中的节点是否组成环路;若组成环路,定位环路上的节点所表征的对象为引起内存泄漏的对象。

【技术实现步骤摘要】
内存泄漏分析方法及相关装置
本专利技术涉及计算机
,更具体的说是涉及内存泄漏分析方法及相关装置。
技术介绍
内存泄漏,也称作存储渗漏,指的是程序在运行过程中动态申请的内存空间在使用完毕后未释放,导致对象一直占据内存的现象。内存泄漏大多是由内存循环引用导致的,虽然有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的自然数;构造表征对象之间强引用关系的有向图,其中,所述对象包括各所述目标对象及其强引用对象,所述有向图包括节点和有向边,不同的所述节点表征不同的所述对象,并且任一所述有向边关联的两个节点包括始点和终点,所述终点表征的对象是所述始点表征的对象的强引用对象;遍历所述有向图中的节点,以确定所述有向图中的节点是否组成环路;若组成环路,定位所述环路上的节点所表征的对象为存在内存循环引用的对象。一种内存泄漏分析装置,包括:获取单元,用于:获取目标对象的强引用对象,其中,所述强引用对象为被所述目标对象强引用的对象,并且,所述目标对象至少有i个,第一个所述目标对象为监测出的、发生内存泄漏的对象,第i个所述目标对象是第i-1个所述目标对象的强引用对象,i为大于1的自然数;分析单元,用于:构造表征对象之间强引用关系的有向图,其中,所述对象包括各所述目标对象及其强引用对象,所述有向图包括节点和有向边,不同的所述节点表征不同的所述对象,并且任一所述有向边关联的两个节点包括始点和终点,所述终点表征的对象是所述始点表征的对象的强引用对象;遍历所述有向图中的节点,以确定所述有向图中的节点是否组成环路;若组成环路,定位所述环路上的节点所表征的对象为存在内存循环引用的对象。一种移动终端,至少包括处理器和存储器;所述处理器通过执行所述存储器中存放的程序以及调用其他设备,执行上述的内存泄漏分析方法。可见,在本申请实施例中,在获取目标对象的强引用对象后,会构造表征对象间的强引用关系的有向图,使用有向图进行内存泄漏分析和定位,从而定位出存在内存循环引用、引发内存泄漏的对象。附图说明图1为本专利技术实施例提供的应用场景示例图;图2a为本专利技术实施例提供的移动终端的计算机架构示例图;图2b为本专利技术实施例提供的内存泄漏分析装置的示例性结构图;图3为本专利技术实施例提供的内存泄漏分析方法的示例性流程图;图4a和图4b为本专利技术实施例提供的引用关系示意图;图5为本专利技术实施例提供的有向图的示意图;图6为本专利技术实施例提供的释放伪造的Block对象的示意图;图7为本专利技术实施例提供的Block对象内部结构的示意图。具体实施方式一般的,移动终端的app可能会存在内存泄漏的问题。内存泄漏大多是由内存循环引用导致的。本专利技术提供的内存泄漏分析方法及相关装置(例如内存泄漏分析装置、移动终端),则可进行内存泄漏分析,定位存在内存循环引用的对象。内存泄漏分析装置可以软件的形式应用于移动终端中,当以软件形式存在时,上述内存泄漏分析装置具体可为独立的APP,也可作为某APP或操作系统的组件。或者,上述内存泄漏分析装置可以硬件的形式,作为移动终端的组成部分(例如具体可为移动终端的控制器/处理器)。上述内存泄漏分析方法及相关装置适用于移动终端的开发测试环境。图1示出了上述内存泄漏分析装置101的一种示例性应用场景:监控装置102可监测APP的哪个对象发生内存泄漏,内存泄漏分析装置101则可进行内存泄漏分析,定位存在内存循环引用的对象。图2a示出了上述移动终端的一种通用计算机系统结构。上述计算机系统可包括总线、处理器1、存储器2、通信接口3、输入设备4和输出设备5。处理器1、存储器2、通信接口3、输入设备4和输出设备5通过总线相互连接。其中:总线可包括一通路,在计算机系统各个挂件之间传送信息。处理器1可以是通用处理器,例如通用中央处理器(CPU)、网络处理器(NetworkProcessor,简称NP)、微处理器等,也可以是特定应用集成电路(application-specificintegratedcircuit,ASIC),或一个或多个用于控制本专利技术方案程序执行的集成电路。还可以是数字信号处理器(DSP)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。处理器1可包括主处理器(CPU)。处理器1的个数可为一个或多个。存储器2中保存有执行本专利技术技术方案的程序,还可以保存有操作系统和其他关键业务。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。更具体的,存储器2可以包括只读存储器(read-onlymemory,ROM)、可存储静态信息和指令的其他类型的静态存储设备、随机存取存储器(randomaccessmemory,RAM)、可存储信息和指令的其他类型的动态存储设备、磁盘存储器、flash等等。输入设备4可包括接收用户输入的数据和信息的装置,例如键盘、鼠标、摄像头、扫描仪、光笔、语音输入装置、触摸屏、计步器或重力感应器等。输出设备5可包括允许输出信息给用户的装置,例如显示屏、打印机、扬声器等。通信接口3可包括使用任何收发器一类的装置,以便与其他设备或通信网络通信,如以太网,无线接入网(RAN),无线局域网(WLAN)等。处理器1通过执行存储器2中所存放的程序以及调用其他设备,可实现下述实施例提供的内存泄漏分析方法。图2b示出了内存泄漏分析装置的一种示例结构,可包括获取单元201和分析单元202,本文后续将结合内存泄漏分析方法,对上述获取单元201和分析单元202的功能进行介绍。获取单元201和分析单元202的功能,可由前述的处理器1执行存储器2中所存放的程序以及调用其他设备实现。图3示出了内存泄漏分析方法的一种示例性流程。图3所示的方法应用于上述提及的领域或应用场景(例如图1)中。上述示例性流程包括:在301部分:获取目标对象的强引用对象;可由前述内存泄漏分析装置102的获取单元201执行301部分。上述强引用对象为被该目标对象强引用的对象。具体的,在一个示例中可采用深度优先算法扫描强引本文档来自技高网...

【技术保护点】
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

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1