内存使用分析方法、存储介质及电子设备与流程

文档序号:31838409发布日期:2022-10-18 21:56阅读:78来源:国知局
内存使用分析方法、存储介质及电子设备与流程

1.本发明属于内存分析的技术领域,涉及一种内存使用分析方法,特别是涉及一种内存使用分析方法、存储介质及电子设备。


背景技术:

2.由于某些设备的内存极其有限,所以设备中每个app(应用程序,application的缩写)所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象。因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也被回收,此时对象已经没有指针指向,如果依然存在于内存中,将造成系统异常,例如冗余对象的存在、内存泄露、oom(out of memory,内存溢出)、循环引用以及系统崩溃等。
3.然而,很多异常情况具有隐蔽性、积累性的特征,比其他内存非法访问错误更难检测,并且有的通常不会直接产生可观察的错误症状,而是逐渐积累,降低系统整体性能,极端的情况下可能使系统崩溃。并且,目前很多内存分析方法仅限于开发阶段,通过代码编辑器提供的工具对所用对象和内存进行分析以及问题筛查;当app在设备上实际运行时,要想在不影响业务运行的同时还能全面地获取对象及内存相关信息进行分析并不容易。


技术实现要素:

4.鉴于以上所述现有技术的缺点,本发明的目的在于提供一种内存使用分析方法、存储介质及电子设备,其优势在于,可以在应用运行时通过对对象内存使用情况进行有效分析,进而及时排查系统异常。
5.本发明的另一目的在于提供一种内存使用分析方法、存储介质及电子设备,其优势在于,通过监测对象从创建到回收整个过程中的对象行为,分析内存的使用情况,进而实现在不同应用场景下进行问题排查和问题定位。
6.本发明的另一目的在于提供一种内存使用分析方法、存储介质及电子设备,其优势在于,通过对象创建时间和对象销毁时间筛选内存创建区中的存活对象信息,并通过存活对象信息的分析,准确掌握所监测的对象信息。
7.本发明的另一目的在于提供一种内存使用分析方法、存储介质及电子设备,其优势在于,可以通过存活对象信息将系统异常定位至代码的具体位置。
8.本发明的另一目的在于提供一种内存使用分析方法、存储介质及电子设备,其优势在于,可以实现尽可能在早期发现系统各种异常,避免问题严重化。
9.本发明的另一目的在于提供一种内存使用分析方法、存储介质及电子设备,其优势在于,可以有效识别出冗余对象的存在,排查冗余对象在创建或回收阶段的异常。
10.本发明的另一目的在于提供一种内存使用分析方法、存储介质及电子设备,其优势在于,通过对象的筛选,可以根据对象名称或对象所用时间等不同分析需求进行灵活地
对象筛选及分析,避免监听所有对象导致的额外开销。
11.本发明的另一目的在于提供一种内存使用分析方法、存储介质及电子设备,其优势在于,通过不同对象对同一内存的使用分析,可以分析获取内存碎片信息。
12.为实现上述目的及其他相关目的,本发明一方面提供一种内存使用分析方法,所述内存使用分析方法包括:分别存储对象在创建过程与回收过程中所对应的对象信息;比对所述对象在创建过程与回收过程中所对应的对象信息,确定所述对象的生命周期;根据所述对象的生命周期分析所述对象所对应内存的使用情况。
13.为实现上述目的及其他相关目的,本发明另一方面提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述的内存使用分析方法的步骤。
14.为实现上述目的及其他相关目的,本发明最后一方面提供一种电子设备,包括:处理器及存储器;所述存储器用于存储计算机程序,所述处理器用于执行所述存储器存储的计算机程序,以使所述电子设备执行所述的内存使用分析方法的步骤。
附图说明
15.图1显示为本发明的内存使用分析方法于一实施例中的原理流程图。
16.图2显示为本发明的内存使用分析方法于一实施例中的对象信息处理流程图。
17.图3显示为本发明的内存使用分析方法于一实施例中的内存异常检测流程图。
18.图4显示为本发明的内存使用分析方法于一实施例中的问题定位流程图。
19.图5显示为本发明的电子设备于一实施例中的结构连接示意图。
20.元件标号说明
[0021]5ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
电子设备
[0022]
51
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
处理器
[0023]
52
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
存储器
[0024]
s11~s13
ꢀꢀꢀꢀꢀꢀꢀꢀ
步骤
[0025]
s121~s123
ꢀꢀꢀꢀꢀꢀ
步骤
[0026]
s131~s133
ꢀꢀꢀꢀꢀꢀ
步骤
[0027]
s133a~s133d
ꢀꢀꢀꢀ
步骤
具体实施方式
[0028]
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
[0029]
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图示中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
[0030]
本发明所述的内存使用分析方法、存储介质及电子设备可以通过监测对象从创建到回收整个过程中的对象行为,有效分析内存的使用情况,进而实现在不同应用场景下及时进行问题排查和问题定位。
[0031]
以下将结合图1至图5详细阐述本实施例的一种内存使用分析方法、存储介质及电子设备的原理及实施方式,使本领域技术人员不需要创造性劳动即可理解本实施例的内存使用分析方法、存储介质及电子设备。
[0032]
请参阅图1,显示为本发明的内存使用分析方法于一实施例中的原理流程图。如图1所示,所述内存使用分析方法具体包括以下几个步骤:
[0033]
s11,分别存储对象在创建过程与回收过程中所对应的对象信息。
[0034]
于一实施例中,将所述对象信息存放于一存储空间内;所述存储空间包括内存创建区和内存回收区;所述内存创建区用于存放所述对象在创建过程中所对应的对象信息,所述内存回收区用于存放所述对象在回收过程中所对应的对象信息。
[0035]
具体地,将所述对象信息按照预设数据结构存放于所述存储空间内;所述预设数据结构包括字典、数组或集合中的至少一种。需要说明的是,所述预设数据结构还可以是除上述数据结构以外的其他可进行字符串数据存储的非对象类型的数据结构形式。
[0036]
具体地,所述对象信息包括对象名称、对象内存地址、对象内存大小、对象创建时间或对象销毁时间中的至少一种。
[0037]
于实际应用中,在alloc调用的时候,记录对象所对应的对象名称、对象内存地址、对象内存大小、对象创建时间,并存入相应的字典;当对象被销毁时则调用dealloc,记录待销毁对象所对应的对象名称、对象内存地址、对象内存大小、对象销毁时间,并存入相应的字典。
[0038]
s12,比对所述对象在创建过程与回收过程中所对应的对象信息,确定所述对象的生命周期。
[0039]
请参阅图2,显示为本发明的内存使用分析方法于一实施例中的对象信息处理流程图。
[0040]
如图2所示,s12包括以下步骤:
[0041]
s121,查找所述内存创建区和所述内存回收区中某一对象的对象信息。
[0042]
具体地,通过调用预设比对函数来进行比对,将同时出现在alloc中的和dealloc中的对象信息查找出来。其中,预设比对函数是指实现对象信息比对功能的函数。例如,alloc中存储有对象名称、对象内存地址、对象内存大小和对象创建时间,dealloc中存储有对象名称、对象内存地址、对象内存大小和对象销毁时间,若alloc中存储的对象名称、对象内存地址、对象内存大小与dealloc中存储的对象名称、对象内存地址、对象内存大小均相同,则认为alloc与dealloc中存有同一个对象所对应的对象信息,不同的是,alloc中单独存储有对象创建时间,dealloc中单独存储有对象销毁时间。
[0043]
s122,若所述对象创建时间早于所述对象销毁时间,则将所述对象对应的对象信息删除。由此,通过删除的对象信息和留下的对象信息,可确定与对象信息所对应的对象的生命周期情况,例如,某一对象的对象创建时间早于对象销毁时间,则该对象信息删除,且该对象从创建到销毁的时间段表示了该对象的生命周期。
[0044]
s123,分析仅存于所述内存创建区的对象信息。由此,本发明通过对象创建时间和
对象销毁时间筛选内存创建区中的存活对象信息,并通过存活对象信息的分析,准确掌握所监测的对象信息。
[0045]
具体地,某一对象信息仅存于内存创建区alloc中,则与之对应的对象有可能是在正常使用的对象,处于该对象生命周期的某一使用阶段中,未到达销毁时间,也有可能是对象的创建或回收过程出现异常。
[0046]
s13,根据所述对象的生命周期分析所述对象所对应内存的使用情况。
[0047]
具体地,对于已删除的对象信息,说明该对象信息对应的对象被正常使用和销毁,进一步说明该对象信息对应的对象的内存使用情况正常;仅存于内存创建区alloc中的对象信息,则根据该对象信息对应的对象是否被正常使用来判定内存使用的正常与否,由此,本发明可以实现尽可能在早期发现系统各种异常,避免问题严重化。
[0048]
请参阅图3,显示为本发明的内存使用分析方法于一实施例中的内存异常检测流程图。
[0049]
如图3所示,s13包括以下步骤:
[0050]
s131,将仅存于所述内存创建区的对象信息作为疑似问题对象。
[0051]
需要说明的是,在所有的疑似问题对象中,有一部分正常使用的对象可能会在未来的某个点释放,因此,所有的疑似问题对象中包括问题对象以及一部分正常对象。
[0052]
s132,根据预设对象规则,在所述疑似问题对象中识别出问题对象。
[0053]
具体地,所述预设对象规则包括用于对象信息数据筛选的正则匹配规则以及针对不同业务场景设置的特定规则。特定规则例如viewcontroller的创建及释放、相关数据model模型的创建释放和某些延时对象的执行释放等,均需要灵活的规定操作和时机,无法用正则匹配规则表述出来。进一步地,在特定规则应用之前,还可以先利用正则匹配规则在大量的对象信息数据中查找出与这些行为相关的对象信息。
[0054]
s133,利用所述问题对象定位问题代码。
[0055]
具体地,通过包括且不限于对象的类名(即对象名称)、对象创建时间,对象内存地址等维度,来定位疑似问题对象的创建时期,进而根据实际的业务代码,通过对象类名的正则匹配,搜索并推断出疑似错误产生的问题代码。
[0056]
请参阅图4,显示为本发明的内存使用分析方法于一实施例中的问题定位流程图。如图4所示,s133包括以下步骤:
[0057]
s133a,筛选出所述问题对象的行为相关的类文件。
[0058]
具体地,当定位到特定行为或者页面切换导致的内存爆增或长期不释放的行为时,判定存在问题对象,将参与行为的类文件进行筛选。于实际应用中,筛选手段包括但不限于视图控制器(uiviewcontroller及其派生类),视图(uiview及其派生类),以及其他相关对象的生命周期回调函数的监控。
[0059]
进一步地,用户在时间t1点击了一个页面,在时间t2退出了该页面,若问题对象的创建时间t3处于t1至t2之外,则判定为问题对象与点击页面和退出页面无关;若问题对象的创建时间t3处于t1至t2之间,则判定为问题对象与点击页面和退出页面相关。其中,与该问题对象相关的两个行为是点击页面和退出页面。
[0060]
s133b,利用文本匹配脚本在所述类文件中进行文本定位,确定问题区域。
[0061]
具体地,以时间轴为维度,利用对比脚本工具进行文本定位,则确定问题区域为点
击页面和退出页面的类文件的相关区域。进一步地,还可以将对比脚本工具与特定的页面切换时机等综合分析得出。例如,问题对象的创建时间t3处于t1至t2之间,且靠近t2,则可以进一步预测问题区域很可能出现在退出页面的类文件的相关区域。
[0062]
s133c,分析所述问题区域所对应的系统函数调用栈的记录,确定问题函数以及问题函数所在位置。
[0063]
具体地,点击页面对应的代码区域和退出页面对应的代码区域是已知的,在此基础上,根据点击页面和退出页面两个类文件的文本和调用栈大概定位到问题区间,缩小排查范围。
[0064]
s133d,按照所述问题函数所在位置查找所述问题函数,在所述问题函数中确定所述问题代码。
[0065]
具体地,例如,问题函数为退出页面对应的函数,由此,进一步在退出页面对应的函数定位最终的问题代码。
[0066]
于一实施例中,在s11步骤之前,所述内存使用分析方法还包括以下步骤:筛选所述对象,筛选的条件包括对象黑名单、对象白名单、对象时间或对象行为中的至少一种。由此,本发明通过对象的筛选,可以根据对象名称或对象所用时间等不同分析需求进行灵活地对象筛选及分析,避免监听所有对象导致的额外开销。一方面,可以设定指定的白名单或指定的黑名单,进行针对性监测,另一方面,可以于整个app运行期间实时进行开启和停止,且并不影响业务的正常运行。
[0067]
其中,所述对象黑名单用于将所述对象黑名单中的对象排除于分析范围之外,所述对象白名单用于将所述对象白名单中的对象纳入分析范围之内,所述对象时间用于将启停时间之间所应用的对象纳入存储范围之内。
[0068]
具体地,在某应用程序中,需查看点击按钮b1之后20s内产生的内存使用情况,可以在点击按钮b1之前,启动对象时间的筛选功能,针对这20s内点击按钮b相关的对象,进行对象信息的存储,在20s后,关闭存储,在该对象监测过程中,在得到存储数据的同时,还继续运行点击按钮b1相关的业务,并不影响业务的执行。
[0069]
具体地,在某应用程序中,需查看点击按钮b2之后产生的内存使用情况,可以在点击按钮b2之前,启动对象行为的筛选功能,针对点击按钮b2所产生的相关的对象行为,进行对象信息的分析。
[0070]
于一实施例中,在s13步骤之后,所述内存使用分析方法还包括以下步骤:分析待创建的对象的大小,根据不同对象的大小设置每一对象的创建时机。
[0071]
具体地,因为内存都是连续的一块空间,每个对象在创建时申请的内存空间是不同的,所以,当同一块内存被两个大小不同的对象前后使用后,会产生内存碎片,由此,本发明可以通过改变代码位置的方式,将同样大小的对象放在一起创建,大小不一的对象按照顺序依次创建,例如按照对象由大到小的顺序或对象由小到大的顺序,会在一定程度上减少内存碎片的出现。
[0072]
需要说明的是,本发明所述的内存使用分析方法可以应用于ios、安卓等不同的系统,以ios为例,基于objective-c开发语言实现所述内存使用分析方法。当ios app产生内存对象分配时,可以跟踪记录对象从被创建到销毁回收的整个过程,以便能够进行内存相关的处理,包括但不仅限于预防oom崩溃、检查冗余的未使用对象、记录内存使用情况、监听
app整体运行路径等。
[0073]
于一实际应用中,利用所述内存使用分析方法识别hook(替换)对象的init和dealloc所导致的循环引用。因为hook对象后,需要记录新的对象信息,例如,需要将当前对象对应的对象创建时间,对象销毁时间、对象名称、对象内存地址和对象内存大小等对象信息作为字符串存起来,然而现有技术中将字符串的本身也作为一种对象,会导致字符串在被创建的时候也被hook了,从而无限循环下去。本发明针对对象信息字符串,采用非对象类型的数据结构,因此致使非对象类型字符串无法被识别成对象,进行hook操作,避免了hook对象的init和dealloc会导致产生循环引用。
[0074]
于另一实际应用中,利用所述内存使用分析方法检查是否有冗余对象被创建或有对象没有被回收。若某一对象在创建之后不符合预设的对象行为,或创建后未被使用或有另一对象与该对象执行的行为、功能相同,则判定为创建的冗余对象;若某一对象未在预设的销毁时间进行销毁,导致仅存于内存创建区中,则判定为该对象未被回收。
[0075]
本发明所述的内存使用分析方法的保护范围不限于本实施例列举的步骤执行顺序,凡是根据本发明的原理所做的现有技术的步骤增减、步骤替换所实现的方案都包括在本发明的保护范围内。
[0076]
本实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述内存使用分析方法。
[0077]
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过计算机程序相关的硬件来完成。前述的计算机程序可以存储于一计算机可读存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的计算机可读存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的计算机存储介质。
[0078]
请参阅图5,显示为本发明的电子设备于一实施例中的结构连接示意图。如图5所示,本实施例提供一种电子设备5,具体包括:处理器51及存储器52;所述存储器52用于存储计算机程序,所述处理器51用于执行所述存储器52存储的计算机程序,以使所述电子设备5执行所述内存使用分析方法的各个步骤。
[0079]
上述的处理器51可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processing,简称dsp)、专用集成电路(alication specific integrated circuit,简称asic)、现场可编程门阵列(field programmable gatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
[0080]
上述的存储器52可能包含随机存取存储器(random access memory,简称ram),也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
[0081]
于实际应用中,所述电子设备可以是包括存储器、存储控制器、一个或多个处理单元(cpu)、外设接口、rf电路、音频电路、扬声器、麦克风、输入/输出(i/o)子系统、显示屏、其他输出或控制设备,以及外部端口等所有或部分组件的计算机;所述计算机包括但不限于如台式电脑、笔记本电脑、平板电脑、智能手机、智能电视、个人数字助理(personal digital assistant,简称pda)等个人电脑,所述电子设备还可以是车机端或是智能眼镜、智能手表或其他可穿戴设备。在另一些实施方式中,所述电子设备还可以是服务器,所述服务器可以根据功能、负载等多种因素布置在一个或多个实体服务器上,也可以是由分布的
或集中的服务器集群构成的云服务器,本实施例不作限定。
[0082]
综上所述,本发明所述内存使用分析方法、存储介质及电子设备可以在应用运行时通过对对象内存使用情况进行有效分析,进而及时排查系统异常。通过监测对象从创建到回收整个过程中的对象行为,分析内存的使用情况,进而实现在不同应用场景下进行问题排查和问题定位。通过对象创建时间和对象销毁时间筛选内存创建区中的存活对象信息,并通过存活对象信息的分析,准确掌握所监测的对象信息。可以通过存活对象信息将系统异常定位至代码的具体位置。可以实现尽可能在早期发现系统各种异常,避免问题严重化。可以有效识别出冗余对象的存在,排查冗余对象在创建或回收阶段的异常。通过对象的筛选,可以根据对象名称或对象所用时间等不同分析需求进行灵活地对象筛选及分析,避免监听所有对象导致的额外开销。通过不同对象对同一内存的使用分析,可以分析获取内存碎片信息。本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
[0083]
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1