CN116680161A - 内存泄漏检测方法、可读介质和电子设备 - Google Patents
内存泄漏检测方法、可读介质和电子设备 Download PDFInfo
- Publication number
- CN116680161A CN116680161A CN202211238100.9A CN202211238100A CN116680161A CN 116680161 A CN116680161 A CN 116680161A CN 202211238100 A CN202211238100 A CN 202211238100A CN 116680161 A CN116680161 A CN 116680161A
- Authority
- CN
- China
- Prior art keywords
- memory
- time
- sampling time
- increment
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000015654 memory Effects 0.000 title claims abstract description 690
- 238000001514 detection method Methods 0.000 title claims abstract description 64
- 238000005070 sampling Methods 0.000 claims abstract description 105
- 238000000034 method Methods 0.000 claims abstract description 88
- 230000008569 process Effects 0.000 claims abstract description 28
- 239000004816 latex Substances 0.000 claims 1
- 229920000126 latex Polymers 0.000 claims 1
- 239000000523 sample Substances 0.000 claims 1
- 239000000758 substrate Substances 0.000 claims 1
- 238000004891 communication Methods 0.000 description 35
- 230000006854 communication Effects 0.000 description 35
- 230000006870 function Effects 0.000 description 28
- 239000010410 layer Substances 0.000 description 24
- 238000007726 management method Methods 0.000 description 23
- 238000004364 calculation method Methods 0.000 description 22
- 238000010586 diagram Methods 0.000 description 18
- 238000012545 processing Methods 0.000 description 14
- 230000005236 sound signal Effects 0.000 description 13
- 238000010295 mobile communication Methods 0.000 description 12
- 230000008859 change Effects 0.000 description 10
- 210000000988 bone and bone Anatomy 0.000 description 9
- 230000003287 optical effect Effects 0.000 description 7
- 230000005856 abnormality Effects 0.000 description 6
- 238000012544 monitoring process Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 238000013528 artificial neural network Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 229920001621 AMOLED Polymers 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 230000036962 time dependent Effects 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 238000012935 Averaging Methods 0.000 description 2
- 208000033748 Device issues Diseases 0.000 description 2
- 230000003416 augmentation Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000036772 blood pressure Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 238000013480 data collection Methods 0.000 description 2
- 230000007812 deficiency Effects 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 239000002096 quantum dot Substances 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000007175 bidirectional communication Effects 0.000 description 1
- 238000013529 biological neural network Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 210000004556 brain Anatomy 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 239000004020 conductor Substances 0.000 description 1
- 239000012792 core layer Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 230000001939 inductive effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000010985 leather Substances 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 229910044991 metal oxide Inorganic materials 0.000 description 1
- 150000004706 metal oxides Chemical class 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 230000002138 osteoinductive effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000010349 pulsation Effects 0.000 description 1
- 230000005855 radiation Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000004622 sleep time Effects 0.000 description 1
- 230000003238 somatosensory effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001755 vocal effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/18—Complex mathematical operations for evaluating statistical data, e.g. average values, frequency distributions, probability functions, regression analysis
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请涉及计算机技术领域,公开了一种内存泄漏检测方法、可读介质和电子设备。方法包括:获取在程序运行过程中第一时间段内的多个采样时间点处的内存占用量;基于内存占用量确定程序在第一时间段内的内存增长量;内存增长量满足第一条件时,确定在各采样时间点的单次内存释放能力;进一步确定程序运行过程中,在第一时间段内的内存释放能力;基于内存增长量和内存释放能力,确定内存泄漏检测结果。通过本申请实施例的内存泄漏检测方法,电子设备可以动态地根据程序运行过程中的内存增长量和内存释放能力进行内存泄漏的判定,而不是依赖于单一固定阈值,提升了内存泄漏检测的准确性,降低了内存泄漏检测的误报率,从而提升用户体验感。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种内存泄漏检测方法、可读介质和电子设备。
背景技术
电子设备的系统在运行程序的过程中会根据程序的需求对程序动态分配内存,在满足一定条件时,如:程序执行完毕,需要对已分配的内存进行回收释放,若已分配的内存未释放或无法释放,会造成内存泄漏(Memory Leak),造成系统内存的浪费,可能会导致电子设备的程序运行速度减慢甚至系统崩溃等严重后果。
传统的内存泄漏检测方法是判断程序占用内存的时间和/或大小是否超过预设阈值,如果超过,则认为程序运行过程中发生了内存泄漏。然而,若一个程序正常运行时需要占用较大内存空间和/或较长时间占用内存,使得该程序占用内存的时间和/或大小超过了预设阈值,则会导致内存泄漏检测方法的误判,使得内存泄漏检测误报率较高,影响用户体验。因此,需要一种更精确的内存泄漏检测方法。
发明内容
本申请的目的在于提供一种内存泄漏检测方法、可读介质和电子设备。
本申请的第一方面提供了一种内存泄漏检测方法,应用于电子设备,方法包括:获取在程序运行过程中,程序在第一时间段内的多个采样时间点处的内存占用量;基于在多个采样时间点处的内存占用量,确定程序在第一时间段内的使用内存的内存增长量;对应于内存增长量满足第一条件,确定在各采样时间点处,在第一时间段内的单次内存释放能力;基于各采样时间点的单次内存释放能力,确定程序运行过程中,在第一时间段内的内存释放能力;基于程序在第一时间段内的内存增长量和内存释放能力,确定在第一时间段内的内存泄漏检测结果。
即在本申请实施例中,这里的第一时间段可以是系统运行程序经过的一个时间段,内存占用量可以是系统运行程序时已分配的内存空间大小,内存增长量可以是系统运行程序经过的一个时间段内程序运行时内存占用量的变化幅度,内存释放能力可以是程序运行过程中某一时刻可以释放的内存大小。
通过本申请实施例的内存泄漏检测方法,电子设备可以动态地根据程序运行过程中的内存增长量和内存释放能力进行内存泄漏的判定,而不是依赖于单一固定阈值,提升了内存泄漏检测的准确性,降低了内存泄漏检测的误报率,从而提升用户体验感。
在上述第一方面的一种可能的实现中,基于在多个采样时间点处的内存占用量,确定程序在第一时间段内的使用内存的内存增长量,包括:获取第一增长量,第一增长量为第一时间段内最后一个采样时间点处的内存占用量与第一个采样时间点处的内存占用量的差值;获取第二增长量,第二增长量为根据最小二乘法确定第一时间段内的内存增长斜率与第一时间段对应的总采样时间的乘积;基于第一增长量和第二增长量确定内存增长量。
即在本申请实施例中,这里的第一增长量可以是内存绝对增长量,第二增长量可以是内存拟合增长量。
在上述第一方面的一种可能的实现中,根据最小二乘法确定第一时间段内的内存增长斜率,包括:获取第一时间段内的n个采样时间点的数据:(x1,y1),(x2,y2)……(xn,yn),其中,x值表示采样时间点的采集时刻,y值表示采样时间点处的内存占用量;通过以下公式确定第一时间段内的内存增长斜率:
上述公式中,a表示最小二乘法确定的直线在y轴上的截距,b表示第一时间段内的内存增长斜率,x表示采样时间点的采集时刻,y表示采样时间点处的内存占用量,表示采集时刻的x的平均值,/>表示内存占用量的y的平均值,/>表示x与y乘积的平均值,/>表示x的二次幂的平均值。
在上述第一方面的一种可能的实现中,基于第一增长量和第二增长量确定内存增长量,包括:内存增长量为第一增长量和第二增长量的最小值,内存增长量可以通过以下公式确定:
Δ(MemIncrease)=min((FinalMem-InitMen),slopeIncrease)
上述公式中,Δ(MemIncrease)表示内存增长量;FinalMem表示第一时间段内最后一个采样时间点处的内存占用量;InitMen表示第一时间段内第一个采样时间点处的内存占用量;slopeIncrease表示第一时间段内的内存增长斜率与总采样时间的乘积。
在上述第一方面的一种可能的实现中,内存增长量满足第一条件,包括:内存增长量大于目标阈值。
即在本申请实施例中,这里的目标阈值可以是内存增长量的阈值,即内存增长量的最大值。若内存增长量大于目标阈值,则说明存在内存泄漏的风险。
在上述第一方面的一种可能的实现中,确定在各采样时间点处,在第一时间段内的单次内存释放能力,包括:获取各个采样时间点第一区间内的前序内存波峰值和后序内存波谷值,其中,所述第一区间为各个采样时间点对应的前后时间段;计算各采样时间点的单次内存释放能力,单次内存释放能力为各采样时间点的前序内存波峰值和后序内存波谷值的差值,单次内存释放能力可以通过以下公式确定:
SingleFC(i)=EarlyPeakMem(i)-LaterTroughMem(i)
其中,SingleFC表示单次内存释放能力,EarlyPeakMem表示前序内存波峰值;LaterTroughMem表示后序内存波谷值。
即在本申请实施例中,某采样时间点对应的前序内存波峰值(前序内存占用量波峰值)减去该计算时刻所对应的后序内存占用量波谷值(后序内存波谷值)为这段时间内的内存最大释放量,用于表示单次内存释放能力。
在上述第一方面的一种可能的实现中,获取各个采样时间点的前序内存波峰值和后序内存波谷值,包括:获取各个采样时间点对应的第一区间中在采样时间点的采集时刻之前的m个内存波峰值和之后的m个内存波谷值,其中,m为大于0小于或等于10的自然数;将m个内存波峰值的最大值确定为前序内存波峰值,将m个内存波谷值的最小值确定为后序内存波谷值。
即在本申请实施例中,如图8b所示,点M对应的内存占用量为前序内存波峰值,即m个内存波峰值的最大值;点N对应的内存占用量为后序内存波谷值,即m个内存波谷值的最小值。
在上述第一方面的一种可能的实现中,各个采样时间点对应的第一区间中前面的m个内存波峰值和后面的m个内存波谷值可以通过以下公式确定:
其中,EarlyPeakMem表示前序内存波峰值,LaterTroughMem表示前序内存波谷值,MemFootprint表示内存占用量,max(MemFootprint)表示最大内存占用量,min(MemFootprint)表示最小内存占用量,Δ(MemIncress)表示内存增长量。
即在本申请实施例中,可以通过上述公式对波峰与波谷进行限定,过滤一些差距较小的波峰与波谷,以提高内存检测方法的精确度。
在上述第一方面的一种可能的实现中,基于各采样时间点的单次内存释放能力,确定程序运行过程中,在第一时间段内的内存释放能力,包括:基于各采样时间点的单次内存释放能力和权重确定第一时间段内的内存释放能力,内存释放能力用于表示第一时间段内的内存最大释放量,权重通过时刻间距离关系确定。
即在本申请实施例中,这里的权重表示时间间隔加权,即,权值,它根据计算单次释放能力时的真实释放时刻,即内存波谷值对应的时刻,距离当前采样时间点的采集时刻的远近得到。
在上述第一方面的一种可能的实现中,权重的确定包括:通过以下公式计算各采样时间点的采集时刻与其后序内存波谷值对应的时刻的时间间隔:
TimeDiff(i)=TimeCal(i)-TimeTrough(i)
上述公式中,TimeDiff表示各采样时间点的采集时刻与其后序内存波谷值对应的时刻的时间间隔;TimeCal表示各采样时间点的采集时刻;TimeTrough表示各采样时间点的后序内存波谷值对应的时刻;通过以下公式确定所述权重:
上述公式中,TimeWeight表示权重;TimeDiff表示各采集时刻与其后序内存波谷值对应的时刻的时间间隔。
在上述第一方面的一种可能的实现中,内存释放能力为各采集时刻的单次内存释放能力的加权平均数,内存释放能力可以通过如下公式确定:
上述公式中,FreeCapality表示内存释放能力,TimeWeight表示权重,SingleFC表示单次内存释放能力。
在上述第一方面的一种可能的实现中,基于程序在第一时间段内的内存增长量和内存释放能力,确定在第一时间段内的内存泄漏检测结果,包括:若内存释放能力小于内存增长量,确认为发生内存泄漏;若内存释放能力大于或等于内存增长量,确认为未发生内存泄漏。
在上述第一方面的一种可能的实现中,n为大于0的自然数,i为大于0、小于或等于n的自然数。
本申请的第二方面提供了一种可读介质,可读介质上存储有指令,该指令在电子设备上执行时使电子设备执行上述第一方面和第二方面中的任意一种内存泄漏检测方法。
本申请的第三方面提供了一种电子设备,包括存储器,用于存储由电子设备的一个或多个处理器执行的指令,以及处理器,是电子设备的处理器之一,用于执行上述第一方面和第二方面中的任意一种内存泄漏检测方法。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1根据本申请的实施例示出了一种程序运行过程中内存占用量变化示意图;
图2根据本申请的实施例示出了一种内存泄漏的场景示意图;
图3根据本申请的实施例示出了一种利用最小二乘法拟合内存增长直线斜率的示意图;
图4根据本申请的实施例示出了一种ion内存场景下内存占用量随时间变化的波形示意图;
图5根据本申请的实施例示出了一种内存泄漏检测方法的实施流程示意图;
图6根据本申请的实施例示出了一种因为内存泄漏误判产生的工单中问题分布示意图;
图7根据本申请的实施例示出了另一种内存泄漏检测方法的实施流程示意图;
图8a根据本申请的实施例示出了一种内存占用量随时间变化的波形示意图;
图8b根据本申请的实施例示出了另一种内存占用量随时间变化的波形示意图;
图9根据本申请实施例示出了一种电子设备的软件架构示意图;
图10根据本申请实施例示出了另一种电子设备的软件架构示意图;
图11根据本申请实施例示出了一种电子设备100的硬件结构示意图。
具体实施方式
本申请的说明性实施例包括但不限于一种内存泄漏检测方法、可读介质和电子设备。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施例中的技术方案进行清楚、详尽的描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;文本中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为暗示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多该特征,在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在本申请中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本申请所描述的实施例可以与其它实施例结合。
在介绍本申请实施例涉及的技术方案之前,先对部分本申请实施例中的包含的术语进行解释。
(1)内存占用量
内存占用量,是指系统运行程序时已分配的内存空间大小。
示例性地,参考图1,图1根据本申请的实施例示出了一种程序运行过程中内存占用量变化示意图。如图1所示,曲线k表示程序运行过程中内存占用量的变化,曲线k上的每个点的横坐标对应为某一时刻,纵坐标对应为该时刻下程序运行时的内存占用量,即被分配的内存空间大小。例如,a点坐标为(81,400),表示在程序运行第81s时的内存占用量为400KB。
(2)内存增长量
内存增长量,是指系统运行程序经过的一个时间段内,系统分配的内存空间大小,即该时间段内程序运行时内存占用量的变化幅度。
示例性地,参考图1,a点坐标为(81,400),表示在程序运行第81s时的内存占用量为400KB;b点坐标为(113,480),表示在程序运行第113s时的内存占用量为480KB。a点到b点的时间段内的内存增长量可以是b点对应时刻的内存占用量与a点对应时刻的内存占用量的差值。
(3)内存释放能力
内存释放,就是将驻留在内存中的数据从内存中释放出来,以提高系统内存资源的利用率,进而提升系统性能。内存释放能力,是指程序运行过程中,某一时刻可以释放的内存大小。
示例性地,参考图1,b点坐标为(113,480),表示在程序运行第113s时的内存占用量为480KB;c点坐标为(121,340),表示在程序运行第121s时的内存占用量为340KB。可以看出,b点和c点为b点到c点时间段内的内存占用量最大值(波峰值)和内存占用量最小值(波谷值)。q点为b点到c点内任意一点,q点对应时刻的内存释放能力可以用b点与c点对应时刻的内存占用量差值来表示,即通过该时间段内的最大内存释放量来表示该时间段内某一时刻的内存释放能力。
(4)内存泄漏
内存泄漏(Memory Leak),是指对应于程序已分配的内存,在程序执行完毕后,未能释放或无法释放,造成系统内存的浪费,导致系统运行速度减慢甚至系统崩溃等严重后果。
示例性地,参考图2,图2根据本申请的实施例示出了一种电子设备的内存泄漏的场景示意图。如图2所示,区域A、区域B和区域C可以表示电子设备的内存,区域A与区域B共同组成了“Unused Objects”(未使用对象),区域C为“Used Objects”(已使用对象);而区域B与区域C共同组成了“Referenced Objects”(已定义对象),区域A为“UnreferencedObjects”(未定义对象)。可以理解区域B为“已被定义未使用的对象”,即当前程序并未使用被分配的内存空间,但由于未释放该已分配的内存空间,导致系统无法回收并继续分配该部分内存空间。
(5)ion
“ion”是一种内存分配管理机制,主要是通过在硬件设备和用户空间之间分配和共享内存。ion内存分配管理机应用于电子设备的多媒体程序,ion可以实现共享内存,即,可提供驱动之间、用户程序之间、内核空间和用户空间之间的共享内存。
(6)最小二乘法
最小二乘法,又称最小平方法,用于通过最小化误差的平方确定数据的最佳函数匹配。
示例性地,已知一组数据为(x1,y1),(x2,y2)……(xn,yn),n为自然数。利用最小二乘法拟合出上述数据对应的直线的过程可以参考如下公式1至公式3:
1.设拟合直线为y=a+bx (公式1)
2.通过最小二乘法和
其中,a是拟合出的直线在y轴上的截距,b是拟合出的直线的斜率,x是采样时间点的采集时刻,y是采样时间点处的内存占用量,是所有数据的x值的平均值,/>是所有数据的y值的平均值,/>是所有数据的x与y乘积的平均值,/>是所有数据的x值的二次幂的平均值。
相较于判断程序占用内存的时间和/或大小是否超过预设阈值的内存泄漏检测方法,图3根据本申请的实施例示出了一种利用最小二乘法进行内存泄漏检测的示意图,如图3所示,图中横坐标为时间,纵坐标为内存占用量,在电子设备的系统运行程序时,分别获取A点、B点、C点、D点四个内存采样时间点处的程序运行时的内存占用量,示例性地,假设A点表示第10秒采集到的内存占用量为100MB,B点表示第20秒采集到的内存占用量为130MB,C点表示第30秒采集到的内存占用量为120MB,D点表示第40秒采集到的内存占用量为150MB,即采集值A(x1,y1),B(x2,y2),C(x3,y3),D(x4,y4)为(10,100),(20,130),(30,120),(40,150),根据上述公式1至公式3:
1.计算得到
2.将x,y,代入公式2和公式3,得到
a=125–25b;
可以得到斜率b为1.4MB/s,即内存增长速率为1.4MB/s,也就是,根据A点、B点、C点、D点四个内存采样时间点处的数据拟合出的直线L的斜率为1.4MB/s,即,从A点至D点的时间段内,内存增长速率为1.4MB/s。
可以得到斜率b为1.4MB/s,即电子设备的系统运行程序时的内存增长速率为1.4MB/s,也就是,根据A点、B点、C点、D点四个内存采样时间点处的数据拟合出的直线L的斜率为1.4MB/s,即,从A点至D点的时间段内(可以称为采集时间段或者第一时间段),内存增长速率为1.4MB/s。若电子设备的系统运行程序的内存增长速率大于预设阈值,则确定出现内存泄漏。
示例性地,基于利用最小二乘法拟合出电子设备运行程序经过的第一时间段(采集时间段)内的内存增长速率的方法,本申请实施例提供了一种内存泄漏检测的方法,可以获取第一时间段内多个内存采样时间点间的内存增长速率以及多个内存增长速率的平均值,比较该平均值与第一阈值,若该平均值大于第一阈值则判定程序运行时出现内存泄漏;反之继续比较内存增长速率与第二阈值,若多个内存增长速率都大于第二阈值则判定出现内存泄漏;反之利用最小二乘法拟合第一时间段内的内存增长速率(即,第一时间段内的各个内存采样时间点处的数据拟合成的直线的斜率)乘以总采样时间得到内存增长量,比较该内存增长量与第三阈值,若内存增长量大于第三阈值则判定出现内存泄漏,反之判定为未泄漏。
对于上述ion内存泄漏检测来说,ion具有:大块内存和波动性大等特征。其中,大块内存是指电子设备分配给程序的内存的容量通常较大,从XMB至XXXXMB;波动性较大主要是由共享内存的特性导致的表现为第一时间段内相邻的内存采样时间点之间的内存增长量过大。
因此,对于ion内存场景下,通过最小二乘法计算内存增长速率,再乘以总采集时间得到内存增长量的方法很容易出错。例如,在系统休眠时间无法采集内存占用量,这样会导致计算的时间间隔很长,而ion又存在大块内存的特性,计算得到的内存增长量误差较大。再例如,针对波动性较大的内存,最小二乘法计算得到的内存增长量可能会很大,容易导致误判。示例性地,参考图4,图4根据本申请的实施例示出了一种ion内存场景下内存占用量随时间变化的波形示意图。如图4所示,ion内存场景下,内存占用量在0~1200000KB之间波动,存在大块内存和波动性大的特征。例如,计算第1秒至第5秒的内存累计占用量大于200MB,通过最小二乘法拟合内存增长量的方法会判断当前发生内存泄漏,但实际并未发生内存泄漏,会造成误判,而内存泄漏的误判会降低用户对电子设备100的使用体验感。
有鉴于此,本申请实施例还提出了一种内存泄漏检测的方法,该方法包括:选择电子设备的系统运行程序所经过的第一时间段,获取第一时间段内各采样时间点处的内存占用量,得到时间段的内存增长量,这里的内存增长量表示从第一时间段开始至结束,程序对应的内存占用量的增长幅度,在内存增长量超过目标阈值时,分别计算该第一时间段内各内存采样时间点的单次内存释放能力,单次内存释放能力用于表示程序经过的第一时间段内各内存采样时间点对应的内存最大释放量,内存最大释放量可以通过单个内存采样时间点对应的前后时间段内的内存占用量的变化确定;根据各个内存采样时间点的单次内存释放能力得到第一时间段的总体内存释放能力。通过比较内存增长量与总体内存释放能力来判定是否发生内存泄漏。在总体内存释放能力小于内存增长量时,判定出现内存泄漏,反之则判定为未发生泄漏。通过该方法可以动态地根据程序运行过程中的内存增长量和内存释放能力进行内存泄漏的判定,而不是依赖于单一固定阈值,提升了内存泄漏检测的准确性,降低了内存泄漏检测的误报率,从而提升用户体验感。
综上所述,对于不包含ion内存场景来说,例如native内存场景中内存泄漏检测,可以采用上述最小二乘法拟合内存增长速率和内存增长量的方法进行内存泄漏的检测;针对存在ion内存的场景,可以结合上述最小二乘法拟合内存增长速率的方法及上述根据内存增长量和内存释放能力判断的方法进行内存泄漏检测。
本申请实施例提供的内存泄漏检测方法可以应用于诸如手机、智慧大屏、平板电脑、笔记本电脑、上网本、个人数字助理(personal digital assistant,PDA)等电子设备上,本申请实施例对电子设备的具体类型不做任何限制。
为了更好地理解本申请实施例的技术方案,下面以图2所示场景为例,对本申请的一些技术方案进行详细介绍。
图5根据本申请的实施例示出了一种内存泄漏检测方法的实施流程示意图。可以理解,图5所示流程的各步骤执行主体均为电子设备100。为了简化描述,以下在介绍图5所示流程各步骤时将不再重复描述各步骤的执行主体。如图5所示,该流程包括但不限于以下步骤:
S501:在第一时间段内采集内存占用量数据。
电子设备在第一时间段内定时采集当前程序运行时的内存占用量数据,例如可以是每隔5秒采集一次内存占用量数据。其中,第一时间段是指电子设备100运行程序经过的一个时间段。
可以理解,在一些实施例中,也可以是每隔10毫秒采集一次内存占用量数据;在另一些实施例中,还可以是每隔10秒采集一次内存占用量数据,本申请对此不做限制。
S502:判断采样时间点是否小于n。若判断结果为是,说明采集的内存占用量数据较少,不足以判断是否泄漏,则执行步骤S503,返回数据不足;若判断结果为否,说明采集的数据足以进行下一步计算,则执行步骤S504,判断采样时间点与采集时间是否匹配。
在一些实施例中,若采样时间点的数量小于n,则返回数据不足,例如所执行程序可以返回参数值2。其中,n为自然数,例如n可以是5。在另一些实施例中,n也可以为8;在其他可替代的实施例中,n也可以为10。
示例性地,若采样时间点的数量小于5,则电子设备100返回数据不足。
S503:返回数据不足。
在一些实施例中,返回数据不足例如可以是所执行程序返回参数值2。
在其他可替代的实施例中,当返回数据不足后,可以继续进行数据采集,即继续执行步骤S501。
S504:判断采样时间点与采集时间是否匹配。若判断结果为是,说明采样时间点的数量,即,内存采集次数,与采集时间的时间点的数量是一致的,可以计算平均斜率,则执行步骤S505,计算平均斜率;若判断结果为否,说明采样时间点的数量与采集时间的时间点的数量不一致,无法进行平均斜率的计算,则执行步骤S503,返回数据不足。
S505:计算平均斜率。
电子设备100使用总采集数据集合中的全部或部分采集数据计算平均斜率。其中,计算平均斜率时最多使用3*6=18次的采集值进行计算。可以理解,采集值为各个采集时刻所对应的内存占用量。
示例性地,在一些实施例中,平均斜率的计算例如可以是先分别计算六组采集数据的斜率,再求六次计算得到的斜率的平均值得到平均斜率。其中,每组中有两个采集数据。
在另一些实施例中,平均斜率的计算也可以是利用最小二乘法先分别计算四组采集数据的斜率,再求四次计算得到的斜率的平均值得到平均斜率。其中,每组中有三个采集数据。关于最小二乘法拟合直线斜率的相关描述可以参考上述公式1至公式3的相关描述,此处不再赘述。本申请对计算平均斜率的方法不做具体限定。
S506:判断平均斜率是否大于第一阈值。若判断结果为是,说明内存增长速率过快,认为发生泄漏,则执行步骤S509,返回发生泄漏;若判断结果为否,说明内存增长速率正常,需要进行进一步的判断,则执行步骤S507,判断已计算斜率次数是否小于m。
可以理解,上述第一阈值为预先设置的平均斜率最大值,例如可以是500KB/s,若计算得到的平均斜率超过该第一阈值,则认为发生了内存泄漏,返回发生泄漏。
示例性地,若计算的斜率分别为:300KB/s、500KB/s、715KB/s、645KB/s、800KB/s,当前计算的平均斜率为592KB/s,即计算得到的平均斜率大于500KB/s,所以内存增长量较大,可以判断为内存泄漏。
反之,若计算的斜率分别为:100KB/s、200KB/s、125KB/s、145KB/s、255KB/s,当前计算的平均斜率为165KB/s,即计算得到的平均斜率小于500KB/s,则需要进一步判断来确定是否发生了内存泄漏。
S507:判断已计算斜率次数是否小于m。若判断结果为是,说明已计算斜率次数较少,误差较大,不足以以此判断是否发生内存泄漏,则执行步骤S503,返回数据不足;若判断结果为否,说明计算斜率的次数足够,需要进行进一步判断,则执行步骤S508,判断最后的连续m次斜率是否都大于第二阈值。
可以理解,在一些实施例中,若已计算斜率次数小于m,则返回数据不足,例如所执行程序可以返回参数值2。其中,m为自然数,m<n,例如m可以是4。在另一些实施例中,m也可以为5。
示例性地,若已计算斜率次数小于4次,例如是3次,仅以3次斜率及其平均斜率来判断内存泄漏误差较大,容易引发误判,所以数据不足以判断是否发生内存泄漏,返回数据不足。反之,若已计算斜率次数大于4次,例如是6次,则以6次斜率及其平均斜率判断是否发生内存泄露的准确度较高,可以进行下一步判断。
S508:判断最后的连续m次斜率是否都大于第二阈值。若判断结果为是,说明虽然计算的平均斜率都小于第一阈值,但最后的连续m次斜率都大于第二阈值,即内存增长量较大,认为发生泄漏,则执行步骤S509,返回发生泄漏;若判断结果为否,说明计算的平均斜率小于第一阈值的同时,最后的m次斜率存在小于第二阈值的斜率,需要进行进一步的判断,则执行步骤S510,从最后一个斜率值开始,若其小于第二阈值,判断第一时间段内存累计占用量是否超过第三阈值。
可以理解,上述第二阈值为预先设置的最小斜率阈值,即单次斜率最小值,例如可以是30KB/s。若计算得到的平均斜率小于第一阈值,且斜率计算达到m次及以上,且最后的连续m次斜率都大于第二阈值,即内存增长量较大,则认为发生泄漏。
示例性地,若计算的斜率分别为:100KB/s、200KB/s、125KB/s、145KB/s、255KB/s,当前计算的平均斜率为165KB/s,即计算得到的平均斜率小于500KB/s,但最后4次斜率分别为:200KB/s、125KB/s、145KB/s、255KB/s,即最后4次斜率都大于30KB/s,所以内存增长量较大,可以判断为内存泄漏。反之,若最后4次中存在小于30KB/s的斜率,例如最后一次斜率为25KB/s,则需要进一步判断来确定是否发生了内存泄漏。
S509:返回发生泄漏。
在一些实施例中,当电子设备100检测到内存泄漏时,返回发生泄漏,例如可以表现为所执行程序返回参数值1。
可以理解,在其他可替代的实施例中,当检测到发生内存泄漏后,电子设备发出内存泄漏提示信息。
S510:从最后一个斜率值开始,若其小于第二阈值,判断第一时间段内存累计占用量是否大于第三阈值。若判断结果为是,说明虽然计算的平均斜率小于第一阈值,且最后的连续m次斜率中存在小于第二阈值的斜率,但第一时间段的内存累计占用量大于第三阈值,即内存占用量较大,认为发生泄漏,则执行步骤S509,返回发生泄漏;若判断结果为否,说明计算的平均斜率小于第一阈值和最后连续m次斜率中存在小于第二阈值的斜率的同时,在第一时间段内存累计占用量小于或等于第三阈值,即内存增长率较低、内存占用量也较少,表明无异常,则执行步骤S511,返回无泄漏异常。
可以理解,上述第三阈值为预先设置的内存累计占用量阈值,即最大内存累计占用量,例如可以是200MB。若计算得到的平均斜率小于第一阈值,且斜率计算达到m次及以上,从最后一个斜率开始,若其小于第二阈值,且第一时间段内存累计占用量大于第三阈值,则认为发生内存泄漏。
反之,若最后连续的m次斜率中,从最后一个斜率值开始,若其小于第二阈值,且第一时间段的内存累计占用量没有超过第三阈值,则认为无泄漏异常。
在一些实施例中,内存累计占用量的计算方法可以是先通过最小二乘法计算内存增长斜率,然后以该斜率乘以总采集时间。其中,通过最小二乘法计算内存增长斜率计算累计内存占用量的方法如下。
参考图8a,假设A点表示第5秒采集到的内存占用量为150MB,B点表示第10秒采集到的内存占用量为50MB,C点表示第15秒采集到的内存占用量为200MB,D点表示第20秒采集到的内存占用量为30MB,E点表示第25秒采集到的内存占用量为170MB,F点表示第30秒采集到的内存占用量为400MB,即,A点至F点的采集值分别用A(x1,y1),B(x2,y2),C(x3,y3),D(x4,y4),E(x5,y5),F(x6,y6)表示,其中,x是采样时间点的采集时刻,y是采样时间点处的内存占用量,A点至F点的采集值分别为(5,150),(10,50),(15,200),(20,30),(25,170),(30,400),根据上述公式1至公式3,可以拟合得到内存增长速率约为8.24MB/s,将拟合得到的内存增长速率乘以总采集时间25s可以得到累计内存占用量约为206MB。
示例性地,若计算的斜率分别为:50KB/s、100KB/s、125KB/s、115KB/s、25KB/s,第一时间段的内存累计占用量为150MB。当前计算的平均斜率为83KB/s,即计算得到的平均斜率小于500KB/s,但最后4次斜率分别为:100KB/s、125KB/s、115KB/s、25KB/s,即最后4次斜率存在小于30KB/s的斜率值,则从最后一次斜率值开始判断,最后一次斜率值为25KB/s,第一时间段的内存累计占用量为150MB,小于200MB,则认为无内存泄漏异常。反之,若第一时间段的内存累计占用量为300MB,大于200MB,即内存累计占用量较大,则认为发生内存泄漏。
S511:返回无泄漏异常。
在一些实施例中,当电子设备100检测到无内存泄漏的异常时,返回无泄漏异常,例如可以表现为所执行程序返回参数值0。
可以理解,在另一些实施例中,根据实际需求,上述图5所示的各步骤可以组合、删除或者替换为其他利于实现本申请目的的步骤等,例如可以将上述步骤S502与步骤S504组合为一个步骤,本申请在此不做限制。
可以看出,通过图5所示的内存泄漏检测方法,可以根据拟合得到程序运行过程中的内存增长速率和内存增长量,多维度进行内存泄漏的判定,提升了内存泄漏检测的准确性,降低了内存泄漏检测的误报率,从而提升用户体验感。
然而,由于ion内存存在大块内存和波动性大的特点,参考图6,图6根据本申请的实施例示出了一种因为内存泄漏误判产生的工单中问题分布示意图。如图6所示,因为内存泄漏误判产生的工单中存在应用稳定性问题、OS稳定性问题、性能问题、应用问题、三方应用问题等等各种问题,可以看出,内存泄漏误判导致的问题影响了用户的使用体验。
针对存在ion内存的场景,图7根据本申请的实施例示出了一种内存泄漏检测方法的实施流程示意图。可以理解,图7所示流程的各步骤执行主体均为电子设备100。为了简化描述,以下在介绍图7所示流程各步骤时将不再重复描述各步骤的执行主体。如图7所示,该流程包括但不限于以下步骤:
S701:在第一时间段内采集内存占用量数据。
电子设备100定时采集当前程序运行时的内存占用量数据,例如可以是每隔4秒采集一次内存占用量数据。其中,第一时间段是指电子设备100运行程序经过的一个时间段。
可以理解,在一些实施例中,也可以是每隔10毫秒采集一次内存占用量数据;在另一些实施例中,还可以是每隔5秒采集一次内存占用量数据,本申请对此不做限制。
S702:判断采样时间点的数量是否小于n。若判断结果为是,说明采集的内存占用量数据较少,不足以判断是否泄漏,则执行步骤S704,返回数据不足;若判断结果为否,说明采集的数据足以进行下一步计算,则执行步骤S703,判断采样时间点与采集时间是否匹配。
在一些实施例中,若采样时间点的数量小于n,则返回数据不足,例如所执行程序可以返回参数值2。其中,n为自然数,例如n可以是5。在另一些实施例中,n也可以为8;在其他可替代的实施例中,n也可以为10。
示例性地,若采样时间点小于5,则电子设备100返回数据不足。
S703:判断采样时间点与采集时间是否匹配。若判断结果为是,说明采样时间点的数量与采集时间的时间点的数量是一致的,可以进行内存泄漏的判断,则执行步骤S705,计算内存增长量;若判断结果为否,说明采样时间点的数量与采集时间的时间点的数量不一致,无法进行内存泄漏的判断,则执行步骤S704,返回数据不足。
S704:返回数据不足。
在一些实施例中,返回数据不足例如可以是所执行程序返回参数值2。
在其他可替代的实施例中,当返回数据不足后,可以继续进行数据采集,即继续执行步骤S701。
S705:计算内存增长量。
在电子设备获取到一定数量的采集数据(例如n次采集)且采样时间点的数量与采集时间的时间点的数量匹配,计算内存增长量。
在一些实施例中,内存增长量为内存绝对增长量与内存拟合增长量二者中的最小值。其中,绝对增长量为第一时间段内最终内存值与初始内存值的差值,拟合增长量为第一时间段内的内存增长斜率与总采集时间的乘积。示例性地,如公式4所示:
Δ(MemIncrease)=min((FinalMem-InitMen),slopeIncrease) (公式4)
其中,Δ(MemIncrease)表示内存增长量;FinalMem表示最终内存值,即第一时间段内最后一个采样时间点处的内存占用量;InitMen表示初始内存值,即第一时间段内第一个采样时间点处的内存占用量;slopeIncrease表示内存拟合增长量;FinalMem与InitMen的差值表示内存绝对增长量。
可以理解,利用第一时间段内的最终内存占用量减去初始内存占用量来直接计算内存绝对增长量更直接直观,也更符合实际情况。
在一些实施例中,拟合增长量可以是通过最小二乘法拟合第一时间段内的内存增长斜率,再乘以总采集时间得到的。最小二乘法拟合第一时间段内的内存增长斜率的方法具体可以参参考上述公式1至公式3的相关描述,此处不做赘述。
S706:判断内存增长量是否大于目标阈值。若判断结果为是,说明内存增长量较大,可能发生泄漏,需要进行下一步判断,则执行步骤S707,计算单次内存释放能力及其对应的权重;若判断结果为否,说明内存增长量还在合理范围内,暂无泄漏异常,则执行步骤S710,返回无泄漏异常。
可以理解,上述目标阈值为预先设定的内存增长量的阈值,即内存增长量的最大值,例如可以是200MB,本申请对目标阈值的具体数值不做限制。
示例性地,当内存增长量超过200MB时,说明存在内存泄漏的风险,进一步计算单次内存释放能力及其对应的权重。
S707:计算单次内存释放能力及其对应的权重。
当电子设备100检测到内存增长量超过目标阈值时,计算单次内存释放能力及其对应的权重。
在一些实施例中,单次内存释放能力(SingleFC)为当前的内存采样时间点的前序内存波峰值与后序内存波谷值的差值。示例性地,如公式5所示:
SingleFC(i)=EarlyPeakMem(i)-LaterTroughMem(i) (公式5)
其中,SingleFC表示单次内存释放能力;EarlyPeakMem表示前序内存波峰值;LaterTroughMem表示后序内存波谷值;i为小于n的自然数,表示采集次数,即当前计算的单次内存释放能力为第几次采集时刻对应的内存释放能力;n为第一时间段内总采集次数。需要说明的是,在本申请提供的具体实施方式中,如无特别说明,以下“计算时刻”与“采集时刻”可以理解为同一时刻,均表示某次内存释放能力的计算时刻。
可以理解,某一次内存释放能力计算时刻所对应的前序内存波峰值(前序内存占用量波峰值)减去该计算时刻所对应的后序内存占用量波谷值(后序内存波谷值)为这段时间内的内存最大释放量,用于表示单次内存释放能力。
在一些实施例中,可以对波峰与波谷进行限定,过滤一些差距较小的波峰与波谷,以提高内存检测方法的精确度。示例性地,可以参考如下推演过程:
1.设定波谷限定阈值为x,波峰限定阈值为y,Δ(MemIncrease)为z(累计内存增长值),最大内存为max,最小内存为min,最大最小内存差值为h。
2.为了达到x,y能最大限度过滤干扰的目的,得出条件当(y-x)>=z时,得到的波峰、波谷值为求解的目标值。
可以理解,如果(y-x)<z,可能会得出很多无用值(释放能力小于z,说明释放能力不足以释放增长的内存)。但是如果(y-x)>z,可能会造成限定条件过于严格,而忽略了有用值。所以,当(y-x)=z时,能够最精确地过滤过多波峰波谷的干扰。
3.存在隐含条件h为内存释放能力的最大值,因此,x,y的取值应该是在min和max之间。
4.再次设定x=min+i*h,y=min+j*h。可以理解,可以通过求解i和j的值来达到求解x和y的值的目的。
5.由y-x=z可以得到,j-i=z/h,又因为存在隐含条件i+j=1,由此可以得出i=1/2-z/2h,j=1/2+z/2h。
6.带入步骤1中的设定值,可以得到x=(max+min-Δ(MemIncress))/2,y=(max+min+Δ(MemIncress))/2。
也就是说,可以得到过滤波峰与波谷的公式,示例性地,如公式6与公式7所示:
其中,EarlyPeakMem表示前序内存波峰值,MemFootprint表示内存占用量,max(MemFootprint)表示最大内存,min(MemFootprint)表示最小内存,Δ(MemIncress)表示累计内存增长值。
其中,LaterTroughMem表示后序内存波谷值,MemFootprint表示内存占用量,max(MemFootprint)表示最大内存,min(MemFootprint)表示最小内存,Δ(MemIncress)表示累计内存增长值。
需要说明的是,本申请实施例中,采集时刻前序的波峰值和后序的波谷值的数量可以为多个,且最多为10个。示例性地,若采集时刻前序的波峰值和后序的波谷值的数量未超过10个,则取其中的最大值为前序内存波峰值(EarlyPeakMem)、最小值为后序内存波谷值(LaterTroughMem);若采集时刻前序的波峰值和后序的波谷值的数量多于10个,则分别取最大的10个波峰值和最小的10个波谷值,再取其中的最大值为前序内存波峰值(EarlyPeakMem)、最小值为后序内存波谷值(LaterTroughMem)。
示例性地,继续参考图8a,假设A点表示第5秒采集到的内存占用量为150MB,B点表示第10秒采集到的内存占用量为50MB,C点表示第15秒采集到的内存占用量为200MB,D点表示第20秒采集到的内存占用量为30MB,E点表示第25秒采集到的内存占用量为170MB,F点表示第30秒采集到的内存占用量为400MB,A点至F点的采集值分别为A(5,150),B(10,50),C(15,200),D(20,30),E(25,170),F(30,400)。
根据上述公式1至公式3,可以拟合得到内存增长速率约为8.24MB/s,将拟合得到的内存增长速率乘以总采集时间25s可以得到拟合内存增长量(slopeIncrease)约为206MB;
根据上述公式4得出Δ(MemIncress)值为min((400-150),206)=206MB;
根据上述公式6得出
根据上述公式7得出
则对于C点采集时刻的单次内存释放能力(SingleFC)的计算可以是:
判断C点前序的波峰值和后序的波谷值中满足条件最大值和最小值得到EarlyPeakMem=420MB,即如图8b所示M点对应的内存占用量,LaterTroughMem=1MB,即如图8b所示N点对应的内存占用量;
根据公式5得出C点采集时刻的单次内存释放能力(SingleFC)为:
SingleFC=EarlyPeakMem-LaterTroughMem=420-1=419(MB)
即C点采集时刻的单次内存释放能力为419MB。以此类推,可以得到第一时间段内各采集时刻对应的单次内存释放能力,在此不做赘述。
在一些实施例中,权重(TimeWeight)表示时间间隔加权,即,权值,它根据计算单次释放能力时的真实释放时刻,即内存波谷值对应的时刻,距离当前计算时刻(采集时刻)的远近得到。
首先,计算各采样时间点的采集时刻与其后序内存波谷值对应的时刻的时间间隔(TimeDiff),即计算单次释放能力时的真实释放时刻(内存波谷值对应的时刻)与当前计算时刻(采集时刻)的距离。示例性地,如公式8所示:
TimeDiff(i)=TimeCal(i)-TimeTrough(i) (公式8)
其中,TimeDiff表示各采样时间点的采集时刻与其后序内存波谷值对应的时刻的时间间隔;TimeCal表示单次内存释放能力的计算时刻(泄漏计算时刻);TimeTrough表示当前计算时刻(采集时刻)的后序内存波谷值对应的时刻(波谷内存时刻);i为小于n的自然数,表示采集次数,即当前计算的单次内存释放能力为第几次采集时刻对应的内存释放能力;n为第一时间段内总采集次数。
其次,计算权重(TimeWeight)。示例性地,如公式9所示:
其中,TimeWeight表示时间间隔加权;TimeDiff表示时间间隔,即计算单次释放能力时的真实释放时刻(内存波谷值对应的时刻)与当前计算时刻(采集时刻)的距离;i为小于n的自然数,表示采集次数,即当前计算的单次内存释放能力为第几次采集时刻对应的内存释放能力;n为第一时间段内总采集次数。
S708:计算内存释放能力。
可以理解,内存释放能力(FreeCapability)表示第一时间段内的总体内存释放能力。
在一些实施例中,内存释放能力(FreeCapability)的计算,需要综合第一时间段内的各时刻单次内存释放能力计算。在一些实施例中,内存释放能力的计算方式为第一时间段内的各时刻单次内存释放能力的加权平均。示例性地,如公式10所示:
其中,FreeCapality表示内存释放能力,即第一时间段内的总体内存释放能力;TimeWeight表示时间间隔加权;SingleFC表示单次内存释放能力;i为小于n的自然数,表示采集次数,即当前计算的单次内存释放能力为第几次采集时刻对应的内存释放能力;n为第一时间段内总采集次数。
S709:判断内存释放能力是否小于内存增长量。若判断结果为是,说明第一时间段内被分配的内存不能够全部被释放,发生了内存泄漏,则执行步骤S711,返回发生泄漏;若判断结果为否,说明第一时间段内被分配的内存能够被全部释放,暂无内存泄漏风险,则执行步骤S710,返回无泄漏异常。
S710:返回无泄漏异常。
在一些实施例中,当电子设备100检测到无内存泄漏的异常时,返回无泄漏异常,例如可以表现为所执行程序返回参数值0。
S711:返回发生泄漏。
在一些实施例中,当电子设备100检测到内存泄漏时,返回发生泄漏,例如可以表现为所执行程序返回参数值1。
可以理解,在其他可替代的实施例中,当检测到发生内存泄露后,电子设备发出内存泄漏提示信息。
可以理解,在另一些实施例中,根据实际需求,上述图7所示的各步骤可以组合、删除或者替换为其他利于实现本申请目的的步骤等,例如可以将上述步骤S707与步骤S708组合为一个步骤,本申请在此不做限制。
本申请实施例提出的一种内存泄漏检测方法中,通过选择电子设备的系统运行程序所经过的第一时间段,获取第一时间段内各采样时间点处的内存占用量,得到第一时间段的内存增长量,这里的内存增长量表示从第一时间段的开始至结束,程序对应的内存占用量的增长幅度,在内存增长量超过目标阈值时,分别计算该第一时间段内各内存采样时间点的单次内存释放能力,单次内存释放能力用于表示程序经过的第一时间段内各内存采样时间点对应的内存最大释放量,内存最大释放量可以通过内存采样时间点对应的前后时间段内的内存占用量的变化确定;根据各个内存采样时间点的单次内存释放能力得到第一时间段的总体内存释放能力。通过比较内存增长量与总体内存释放能力来判定是否发生内存泄漏。在总体内存释放能力小于内存增长量时,判定出现内存泄漏,反之则判定为未发生泄漏。通过该方法可以动态地根据程序运行过程中的内存增长量和内存释放能力进行内存泄漏的判定,而不是依赖于单一固定阈值,提升了内存泄漏检测的准确性,降低了内存泄漏检测的误报率,从而提升用户体验感。
为了更好地理解本申请实施例的技术方案,下面结合附图介绍本申请涉及的电子设备的软件架构进行介绍。
示例性地,图9根据本申请的实施例示出了一种电子设备的软件架构示意图。
电子设备的软件架构可以为分层架构,事件驱动架构,微核架构,微服务架构,或云架构。示例性地,电子设备100的软件系统包括但不限于 或者其它操作系统。本申请实施例以分层架构的安卓/>系统为例,示例性说明电子设备的软件系统。
请参考图9,图9根据本申请实施例示出了一种电子设备的软件架构示意图。如图9所示,分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,服务层,以及内核层。
其中,应用程序层可以包括一系列应用程序包。
如图9所示,应用程序包可以包括智能检测应用,还可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,短信息等应用程序。
智能检测应用提供电子设备100的故障检测功能。在一些实施例中,参考图10,智能检测应用支持电子设备100进行NFF故障检测并将故障检测结果发送给日志数据库。
应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。
窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。
内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。该数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。
视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
电话管理器用于提供电子设备100的通信功能。例如通话状态的管理(包括接通,挂断等)。
资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。
通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
系统服务层可包括各类服务,例如系统服务(System Service)、查看服务(HiviewService)、硬件抽象(Hardware Abstraction Layer,HAL)层等。不限于此,系统服务层还可包括系统设置等模块。其中,系统服务(System Service)用于管理电子设备100的以下信息:设备信息、系统配置信息。
其中,设备信息是指电子设备100的软硬件情况,例如可包括设备类型、设备型号、软件系统类型、软件系统版本号等等。设备类型和设备型号通常不会更改,软件系统类型和软件系统版本号可能随着电子设备100的更新而更改。
系统配置信息也可称为系统状态,例如可包括安装的软件系统类型、软件系统版本号、内存大小、ROM空间大小以及其他配置项等等。系统配置信息可以随着电子设备100的运行情况而更改或更新。
此外,系统服务(System Service)还可用于管理电子设备100所在的区域,例如国家和地区等。
查看服务(Hiview Service)用于管理电子设备100的运行日志数据库(logdatabase,LogDB)。LogDB用于采集、存储、查询日志数据。日志数据是电子设备100在运作过程中产生的事件记录,记载着日期、时间、使用者及动作等相关操作的描述。
在一些实施例中,查看服务(Hiview Service)还用于系统内存的监控,内存泄漏的配置以及内存泄漏的判决。参考图10,查看服务(Hiview Service)还包括内存泄漏配置模块,系统内存监控模块,日志生成、上报模块和内存泄漏判决模块,用于进行内存泄漏配置和系统内存的监控,并根据获取到的内存数据对内存泄漏进行判决,将生成的日志发送到日至数据库。查看服务(Hiview Service)还用于将内存数据以及判决信息等通过接口管理模块的接口发送至内核层中的内存检测模块。
HAL层可用于和电子设备100的硬件交互,可获取到相关的硬件运行数据。硬件运行数据包括电子设备100的各个硬件的运行情况,例如音频设备的收发声情况、通信模块的信号收发情况、显示屏的显示情况、摄像头的图像采集情况等等。硬件运行数据随着电子设备100的实际情况而不断变化。
安卓运行时(Android Runtime,ART)包括核心库和虚拟机。Android Runtime负责安卓系统的调度和管理。在一些实施例中,参考图10,安卓运行时(Android Runtime,ART)还包括分配转储模块,用于接收内核层中内存检测模块发送的内存信息,并进行内存分配以及将部分内存中的内容保存至外存文件系统存储。
核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。在一些实施例中,参考图10,核心库还包含泄漏检测工具,用于接收内核层中内存检测模块发送的内存数据,并进行泄漏检测。
应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。在一些实施例中,参考图10,内核层还包含内存检测(MemCheck)模块和页面跟踪(PageTrace)模块。其中,内存检测(MemCheck)模块包括一些接口:内存信息查询接口、维测命令接口、KILL监控接口、栈读取接口、栈保存接口和OOM监控接口等等,用于接收服务层的查看服务发送的内存数据以及判决信息等。内存检测模块还用于将接收到的内存数据以及判决信息等发送至页面跟踪模块、服务层的安卓运行时和核心库。页面跟踪(PageTrace)模块包括java、native内存、ion内存、内存分配函数、slub分配器、伙伴算法、lslub、skb解析、内存压缩、计算机辅助软件等,用于接收内存检测模块发送的内存数据以及泄漏判决信息等。
示例性地,图11根据本申请实施例示出了一种电子设备100的硬件结构示意图。
如图11所示,电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
I2C接口是一种双向同步串行总线,包括一根串行数据线(serial data line,SDA)和一根串行时钟线(derail clock line,SCL)。在一些实施例中,处理110可以包含多组I2C总线。处理器110可以通过不同的I2C总线接口分别耦合触摸传感器180K,充电器,闪光灯,摄像头193等。例如:处理器110可以通过I2C接口耦合触摸传感器180K,使处理器110与触摸传感器180K通过I2C总线接口通信,实现电子设备100的触摸功能。
I2S接口可以用于音频通信。在一些实施例中,处理器110可以包含多组I2S总线。处理器110可以通过I2S总线与音频模块170耦合,实现处理器110与音频模块170之间的通信。在一些实施例中,音频模块170可以通过I2S接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。
PCM接口也可以用于音频通信,将模拟信号抽样,量化和编码。在一些实施例中,音频模块170与无线通信模块160可以通过PCM总线接口耦合。在一些实施例中,音频模块170也可以通过PCM接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。所述I2S接口和所述PCM接口都可以用于音频通信。
UART接口是一种通用串行数据总线,用于异步通信。该总线可以为双向通信总线。它将要传输的数据在串行通信与并行通信之间转换。在一些实施例中,UART接口通常被用于连接处理器110与无线通信模块160。例如:处理器110通过UART接口与无线通信模块160中的蓝牙模块通信,实现蓝牙功能。在一些实施例中,音频模块170可以通过UART接口向无线通信模块160传递音频信号,实现通过蓝牙耳机播放音乐的功能。
MIPI接口可以被用于连接处理器110与显示屏194,摄像头193等外围器件。MIPI接口包括摄像头串行接口(camera serial interface,CSI),显示屏串行接口(displayserial interface,DSI)等。在一些实施例中,处理器110和摄像头193通过CSI接口通信,实现电子设备100的拍摄功能。处理器110和显示屏194通过DSI接口通信,实现电子设备100的显示功能。
GPIO接口可以通过软件配置。GPIO接口可以被配置为控制信号,也可被配置为数据信号。在一些实施例中,GPIO接口可以用于连接处理器110与摄像头193,显示屏194,无线通信模块160,音频模块170,传感器模块180等。GPIO接口还可以被配置为I2C接口,I2S接口,UART接口,MIPI接口等。
USB接口130是符合USB标准规范的接口,具体可以是Mini USB接口,Micro USB接口,USB Type C接口等。USB接口130可以用于连接充电器为电子设备100充电,也可以用于电子设备100与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。该接口还可以用于连接其他电子设备,例如AR设备等。
可以理解的是,本申请实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本申请另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过USB接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过电子设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,显示屏194,摄像头193,和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。电子设备100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
移动通信模块150可以提供应用在电子设备100上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170A,受话器170B等)输出声音信号,或通过显示屏194显示图像或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器110,与移动通信模块150或其他功能模块设置在同一个器件中。
无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
在一些实施例中,电子设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。所述无线通信技术可以包括全球移动通讯系统(global system for mobile communications,GSM),通用分组无线服务(general packet radio service,GPRS),码分多址接入(codedivision multiple access,CDMA),宽带码分多址(wideband code division multipleaccess,WCDMA),时分码分多址(time-division code division multiple access,TDSCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC,FM,和/或IR技术等。所述GNSS可以包括全球卫星定位系统(global positioning system,GPS),全球导航卫星系统(global navigation satellite system,GLONASS),北斗卫星导航系统(beidounavigation satellite system,BDS),准天顶卫星系统(quasi-zenith satellitesystem,QZSS)和/或星基增强系统(satellite based augmentation systems,SBAS)。
电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emittingdiode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrixorganic light emitting diode的,AMOLED),柔性发光二极管(flex light-emittingdiode,FLED),Mini-Led,Micro-Led,Micro-oLed,量子点发光二极管(quantum dot lightemitting diodes,QLED)等。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。
电子设备100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
ISP用于处理摄像头193反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头感光元件上,光信号转换为电信号,摄像头感光元件将所述电信号传递给ISP处理,转化为肉眼可见的图像。ISP还可以对图像的噪点,亮度,肤色进行算法优化。ISP还可以对拍摄场景的曝光,色温等参数优化。在一些实施例中,ISP可以设置在摄像头193中。
摄像头193用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(charge coupled device,CCD)或互补金属氧化物半导体(complementary metal-oxide-semiconductor,CMOS)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给ISP转换成数字图像信号。ISP将数字图像信号输出到DSP加工处理。DSP将数字图像信号转换成标准的RGB,YUV等格式的图像信号。在一些实施例中,电子设备100可以包括1个或N个摄像头193,N为大于1的正整数。
数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当电子设备100在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。
视频编解码器用于对数字视频压缩或解压缩。电子设备100可以支持一种或多种视频编解码器。这样,电子设备100可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,MPEG)1,MPEG2,MPEG3,MPEG4等。
NPU为神经网络(neural-network,NN)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。通过NPU可以实现电子设备100的智能认知等应用,例如:图像识别,人脸识别,语音识别,文本理解等。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。处理器110通过运行存储在内部存储器121的指令,和/或存储在设置于处理器中的存储器的指令,执行电子设备100的各种功能应用以及数据处理。
电子设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。在一些实施例中,音频模块170可以设置于处理器110中,或将音频模块170的部分功能模块设置于处理器110中。
扬声器170A,也称“喇叭”,用于将音频电信号转换为声音信号。电子设备100可以通过扬声器170A收听音乐,或收听免提通话。
受话器170B,也称“听筒”,用于将音频电信号转换成声音信号。当电子设备100接听电话或语音信息时,可以通过将受话器170B靠近人耳接听语音。
麦克风170C,也称“话筒”,“传声器”,用于将声音信号转换为电信号。当拨打电话或发送语音信息时,用户可以通过人嘴靠近麦克风170C发声,将声音信号输入到麦克风170C。电子设备100可以设置至少一个麦克风170C。在另一些实施例中,电子设备100可以设置两个麦克风170C,除了采集声音信号,还可以实现降噪功能。在另一些实施例中,电子设备100还可以设置三个,四个或更多麦克风170C,实现采集声音信号,降噪,还可以识别声音来源,实现定向录音功能等。
耳机接口170D用于连接有线耳机。耳机接口170D可以是USB接口130,也可以是3.5mm的开放移动电子设备平台(open mobile terminal platform,OMTP)标准接口,美国蜂窝电信工业协会(cellular telecommunications industry association of the USA,CTIA)标准接口。
压力传感器180A用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器180A可以设置于显示屏194。压力传感器180A的种类很多,如电阻式压力传感器,电感式压力传感器,电容式压力传感器等。电容式压力传感器可以是包括至少两个具有导电材料的平行板。当有力作用于压力传感器180A,电极之间的电容改变。电子设备100根据电容的变化确定压力的强度。当有触摸操作作用于显示屏194,电子设备100根据压力传感器180A检测所述触摸操作强度。电子设备100也可以根据压力传感器180A的检测信号计算触摸的位置。在一些实施例中,作用于相同触摸位置,但不同触摸操作强度的触摸操作,可以对应不同的操作指令。例如:当有触摸操作强度小于第一压力阈值的触摸操作作用于短消息应用图标时,执行查看短消息的指令。当有触摸操作强度大于或等于第一压力阈值的触摸操作作用于短消息应用图标时,执行新建短消息的指令。
陀螺仪传感器180B可以用于确定电子设备100的运动姿态。在一些实施例中,可以通过陀螺仪传感器180B确定电子设备100围绕三个轴(即,x,y和z轴)的角速度。陀螺仪传感器180B可以用于拍摄防抖。示例性的,当按下快门,陀螺仪传感器180B检测电子设备100抖动的角度,根据角度计算出镜头模组需要补偿的距离,让镜头通过反向运动抵消电子设备100的抖动,实现防抖。陀螺仪传感器180B还可以用于导航,体感游戏场景。
气压传感器180C用于测量气压。在一些实施例中,电子设备100通过气压传感器180C测得的气压值计算海拔高度,辅助定位和导航。
磁传感器180D包括霍尔传感器。电子设备100可以利用磁传感器180D检测翻盖皮套的开合。在一些实施例中,当电子设备100是翻盖机时,电子设备100可以根据磁传感器180D检测翻盖的开合。进而根据检测到的皮套的开合状态或翻盖的开合状态,设置翻盖自动解锁等特性。
加速度传感器180E可检测电子设备100在各个方向上(一般为三轴)加速度的大小。当电子设备100静止时可检测出重力的大小及方向。还可以用于识别电子设备姿态,应用于横竖屏切换,计步器等应用。
距离传感器180F,用于测量距离。电子设备100可以通过红外或激光测量距离。在一些实施例中,拍摄场景,电子设备100可以利用距离传感器180F测距以实现快速对焦。
接近光传感器180G可以包括例如发光二极管(LED)和光检测器,例如光电二极管。发光二极管可以是红外发光二极管。电子设备100通过发光二极管向外发射红外光。电子设备100使用光电二极管检测来自附近物体的红外反射光。当检测到充分的反射光时,可以确定电子设备100附近有物体。当检测到不充分的反射光时,电子设备100可以确定电子设备100附近没有物体。电子设备100可以利用接近光传感器180G检测用户手持电子设备100贴近耳朵通话,以便自动熄灭屏幕达到省电的目的。接近光传感器180G也可用于皮套模式,口袋模式自动解锁与锁屏。
环境光传感器180L用于感知环境光亮度。电子设备100可以根据感知的环境光亮度自适应调节显示屏194亮度。环境光传感器180L也可用于拍照时自动调节白平衡。环境光传感器180L还可以与接近光传感器180G配合,检测电子设备100是否在口袋里,以防误触。
指纹传感器180H用于采集指纹。电子设备100可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。
温度传感器180J用于检测温度。在一些实施例中,电子设备100利用温度传感器180J检测的温度,执行温度处理策略。例如,当温度传感器180J上报的温度超过阈值,电子设备100执行降低位于温度传感器180J附近的处理器的性能,以便降低功耗实施热保护。在另一些实施例中,当温度低于另一阈值时,电子设备100对电池142加热,以避免低温导致电子设备100异常关机。在其他一些实施例中,当温度低于又一阈值时,电子设备100对电池142的输出电压执行升压,以避免低温导致的异常关机。
触摸传感器180K,也称“触控器件”。触摸传感器180K可以设置于显示屏194,由触摸传感器180K与显示屏194组成触摸屏,也称“触控屏”。触摸传感器180K用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏194提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180K也可以设置于电子设备100的表面,与显示屏194所处的位置不同。
骨传导传感器180M可以获取振动信号。在一些实施例中,骨传导传感器180M可以获取人体声部振动骨块的振动信号。骨传导传感器180M也可以接触人体脉搏,接收血压跳动信号。在一些实施例中,骨传导传感器180M也可以设置于耳机中,结合成骨传导耳机。音频模块170可以基于所述骨传导传感器180M获取的声部振动骨块的振动信号,解析出语音信号,实现语音功能。应用处理器可以基于所述骨传导传感器180M获取的血压跳动信号解析心率信息,实现心率检测功能。
按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。
马达191可以产生振动提示。马达191可以用于来电振动提示,也可以用于触摸振动反馈。例如,作用于不同应用(例如拍照,音频播放等)的触摸操作,可以对应不同的振动反馈效果。作用于显示屏194不同区域的触摸操作,马达191也可对应不同的振动反馈效果。不同的应用场景(例如:时间提醒,接收信息,闹钟,游戏等)也可以对应不同的振动反馈效果。触摸振动反馈效果还可以支持自定义。
指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。
SIM卡接口195用于连接SIM卡。SIM卡可以通过插入SIM卡接口195,或从SIM卡接口195拔出,实现和电子设备100的接触和分离。电子设备100可以支持1个或N个SIM卡接口,N为大于1的正整数。SIM卡接口195可以支持Nano SIM卡,Micro SIM卡,SIM卡等。同一个SIM卡接口195可以同时插入多张卡。所述多张卡的类型可以相同,也可以不同。SIM卡接口195也可以兼容不同类型的SIM卡。SIM卡接口195也可以兼容外部存储卡。电子设备100通过SIM卡和网络交互,实现通话以及数据通信等功能。在一些实施例中,电子设备100采用eSIM,即:嵌入式SIM卡。eSIM卡可以嵌在电子设备100中,不能和电子设备100分离。
本申请公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本申请的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码应用于输入指令,以执行本申请描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(Digital Signal Processor,DSP)、微控制器、专用集成电路(Application Specific Integrated Circuit,ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本申请中描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言或解释语言。
在一些情况下,所公开的实施例可以以硬件、固件、软件或其任何组合来实现。所公开的实施例还可以被实现为由一个或多个暂时或非暂时性机器可读(例如,计算机可读)存储介质承载或存储在其上的指令,其可以由一个或多个处理器读取和执行。例如,指令可以通过网络或通过其他计算机可读介质分发。因此,机器可读介质可以包括用于以机器(例如,计算机)可读的形式存储或传输信息的任何机制,包括但不限于,软盘、光盘、光碟、只读存储器(CD-ROMs)、磁光盘、只读存储器(Read Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、可擦除可编程只读存储器(Erasable Programmable Read OnlyMemory,EPROM)、电可擦除可编程只读存储器(Electrically Erasable ProgrammableRead-Only Memory,EEPROM)、磁卡或光卡、闪存、或用于利用因特网以电、光、声或其他形式的传播信号来传输信息(例如,载波、红外信号数字信号等)的有形的机器可读存储器。因此,机器可读介质包括适合于以机器(例如计算机)可读的形式存储或传输电子指令或信息的任何类型的机器可读介质。
在附图中,可以以特定布置和/或顺序示出一些结构或方法特征。然而,应该理解,可能不需要这样的特定布置和/或排序。而是,在一些实施例中,这些特征可以以不同于说明性附图中所示的方式和/或顺序来布置。另外,在特定图中包括结构或方法特征并不意味着暗示在所有实施例中都需要这样的特征,并且在一些实施例中,可以不包括这些特征或者可以与其他特征组合。
需要说明的是,本申请各设备实施例中提到的各单元/模块都是逻辑单元/模块,在物理上,一个逻辑单元/模块可以是一个物理单元/模块,也可以是一个物理单元/模块的一部分,还可以以多个物理单元/模块的组合实现,这些逻辑单元/模块本身的物理实现方式并不是最重要的,这些逻辑单元/模块所实现的功能的组合才是解决本申请所提出的技术问题的关键。此外,为了突出本申请的创新部分,本申请上述各设备实施例并没有将与解决本申请所提出的技术问题关系不太密切的单元/模块引入,这并不表明上述设备实施例并不存在其它的单元/模块。
需要说明的是,在本专利的示例和说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
虽然通过参照本申请的某些优选实施例,已经对本申请进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本申请的精神和范围。
Claims (15)
1.一种内存泄漏检测方法,应用于电子设备,其特征在于,该方法包括:
获取在程序运行过程中,所述程序在第一时间段内的多个采样时间点处的内存占用量;
基于在所述多个采样时间点处的内存占用量,确定程序在第一时间段内的使用内存的内存增长量;
对应于所述内存增长量满足第一条件,确定在各所述采样时间点处,在所述第一时间段内的单次内存释放能力;
基于各所述采样时间点的单次内存释放能力,确定程序运行过程中,在所述第一时间段内的内存释放能力;
基于程序在所述第一时间段内的所述内存增长量和所述内存释放能力,确定在所述第一时间段内的内存泄漏检测结果。
2.根据权利要求1所述的方法,其特征在于,基于在所述多个采样时间点处的内存占用量,确定程序在第一时间段内的使用内存的内存增长量,包括:
获取第一增长量,所述第一增长量为所述第一时间段内最后一个采样时间点处的内存占用量与第一个采样时间点处的内存占用量的差值;
获取第二增长量,所述第二增长量为根据最小二乘法确定所述第一时间段内的内存增长斜率与所述第一时间段对应的总采样时间的乘积;
基于所述第一增长量和所述第二增长量确定所述内存增长量。
3.根据权利要求2所述的方法,其特征在于,根据最小二乘法确定所述第一时间段内的内存增长斜率,包括:
获取所述第一时间段内的n个采样时间点的数据:(x1,y1),(x2,y2)……(xn,yn),其中,x值表示采样时间点的采集时刻,y值表示采样时间点处的内存占用量;
通过以下公式确定所述第一时间段内的内存增长斜率:
上述公式中,a表示最小二乘法确定的直线在y轴上的截距,b表示所述第一时间段内的内存增长斜率,x表示所述采样时间点的采集时刻,y表示所述采样时间点处的内存占用量,表示所述采集时刻的x的平均值,/>表示所述内存占用量的y的平均值,/>表示x与y乘积的平均值,/>表示x的二次幂的平均值。
4.根据权利要求3所述的方法,其特征在于,基于所述第一增长量和所述第二增长量确定所述内存增长量,包括:
所述内存增长量为所述第一增长量和所述第二增长量的最小值,所述内存增长量可以通过以下公式确定:
Δ(MemIncrease)=min((FinalMem-InitMen),slopeIncrease)
上述公式中,Δ(MemIncrease)表示所述内存增长量;FinalMem表示所述第一时间段内最后一个采样时间点处的内存占用量;InitMen表示表示所述第一时间段内第一个采样时间点处的内存占用量;slopeIncrease表示所述第一时间段内的所述内存增长斜率与所述总采样时间的乘积。
5.根据权利要求1所述的方法,其特征在于,所述内存增长量满足第一条件,包括:所述内存增长量大于目标阈值。
6.根据权利要求5所述的方法,其特征在于,确定在各所述采样时间点处,在所述第一时间段内的单次内存释放能力,包括:
获取所述各个采样时间点第一区间内的前序内存波峰值和后序内存波谷值,其中,所述第一区间为所述各个采样时间点对应的前后时间段;
计算所述各采样时间点的单次内存释放能力,所述单次内存释放能力为所述各采样时间点的前序内存波峰值和后序内存波谷值的差值,所述单次内存释放能力可以通过以下公式确定:
SingleFC(i)=EarlyPeakMem(i)-LaterTroughMem(i)
其中,SingleFC表示所述单次内存释放能力,EarlyPeakMem表示所述前序内存波峰值;LaterTroughMem表示所述后序内存波谷值。
7.根据权利要求6所述的方法,其特征在于,所述获取所述各个采样时间点的前序内存波峰值和后序内存波谷值,包括:
获取所述各个采样时间点对应的所述第一区间中在所述采样时间点的采集时刻之前的m个内存波峰值和之后的m个内存波谷值,其中,m为大于0小于或等于10的自然数;
将所述m个内存波峰值的最大值确定为所述前序内存波峰值为,将所述m个内存波谷值的最小值确定为所述后序内存波谷值。
8.根据权利要求7所述的方法,其特征在于,
所述各个采样时间点对应的所述第一区间中前面的m个内存波峰值和后面的m个内存波谷值可以通过以下公式确定:
其中,EarlyPeakMem表示所述前序内存波峰值,LaterTroughMem表示所述前序内存波谷值,MemFootprint表示所述内存占用量,max(MemFootprint)表示最大内存占用量,min(MemFootprint)表示最小内存占用量,Δ(MemIncress)表示所述内存增长量。
9.根据权利要求1所述的方法,其特征在于,基于各所述采样时间点的单次内存释放能力,确定程序运行过程中,在所述第一时间段内的内存释放能力,包括:
基于各所述采样时间点的单次内存释放能力和权重确定所述第一时间段内的内存释放能力,所述内存释放能力用于表示所述第一时间段内的内存最大释放量,所述权重通过时刻间距离关系确定。
10.根据权利要求9所述的方法,其特征在于,
所述权重的确定包括:
通过以下公式计算所述各采样时间点的采集时刻与其后序内存波谷值对应的时刻的时间间隔:
TimeDiff(i)=TimeCal(i)-TimeTrough(i)
上述公式中,TimeDiff表示所述各采样时间点的采集时刻与其后序内存波谷值对应的时刻的时间间隔;TimeCal表示各采样时间点的采集时刻;TimeTrough表示各采样时间点的后序内存波谷值对应的时刻;
通过以下公式确定所述权重:
上述公式中,TimeWeight表示所述权重;TimeDiff表示所述各采集时刻与其后序内存波谷值对应的时刻的时间间隔。
11.根据权利要求10所述的方法,其特征在于,
所述内存释放能力为所述各采集时刻的单次内存释放能力的加权平均数,所述内存释放能力可以通过如下公式确定:
上述公式中,FreeCapality表示所述内存释放能力,TimeWeight表示所述权重,SingleFC表示所述单次内存释放能力。
12.根据权利要求1所述的方法,其特征在于,基于程序在所述第一时间段内的所述内存增长量和所述内存释放能力,确定在所述第一时间段内的内存泄漏检测结果,包括:
若所述内存释放能力小于所述内存增长量,确认为发生内存泄漏;
若所述内存释放能力大于或等于所述内存增长量,确认为未发生内存泄漏。
13.根据权利要求1-12所述的方法,其特征在于,n为大于0的自然数,i为大于0、小于或等于n的自然数。
14.一种可读介质,其特征在于,所述可读介质上存储有指令,该指令在电子设备上执行时使电子设备执行权利要求1-13中任一项所述的内存泄漏检测方法。
15.一种电子设备,其特征在于,包括:
存储器,用于存储由电子设备的一个或多个处理器执行的指令,以及
处理器,是电子设备的处理器之一,用于执行权利要求1-13中任一项所述的内存泄漏检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211238100.9A CN116680161A (zh) | 2022-10-10 | 2022-10-10 | 内存泄漏检测方法、可读介质和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211238100.9A CN116680161A (zh) | 2022-10-10 | 2022-10-10 | 内存泄漏检测方法、可读介质和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116680161A true CN116680161A (zh) | 2023-09-01 |
Family
ID=87786009
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211238100.9A Pending CN116680161A (zh) | 2022-10-10 | 2022-10-10 | 内存泄漏检测方法、可读介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116680161A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110704217A (zh) * | 2019-08-27 | 2020-01-17 | 努比亚技术有限公司 | 一种内存泄露检测方法、终端及计算机可读存储介质 |
CN111240954A (zh) * | 2018-11-29 | 2020-06-05 | 华为技术有限公司 | 一种内存泄漏检测方法、装置及设备 |
CN112416733A (zh) * | 2019-08-20 | 2021-02-26 | 深圳市优必选科技股份有限公司 | 一种内存检测方法、内存检测装置及智能设备 |
CN113835992A (zh) * | 2020-06-23 | 2021-12-24 | 北京字节跳动网络技术有限公司 | 内存泄露的处理方法、装置、电子设备及计算机存储介质 |
-
2022
- 2022-10-10 CN CN202211238100.9A patent/CN116680161A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111240954A (zh) * | 2018-11-29 | 2020-06-05 | 华为技术有限公司 | 一种内存泄漏检测方法、装置及设备 |
CN112416733A (zh) * | 2019-08-20 | 2021-02-26 | 深圳市优必选科技股份有限公司 | 一种内存检测方法、内存检测装置及智能设备 |
CN110704217A (zh) * | 2019-08-27 | 2020-01-17 | 努比亚技术有限公司 | 一种内存泄露检测方法、终端及计算机可读存储介质 |
CN113835992A (zh) * | 2020-06-23 | 2021-12-24 | 北京字节跳动网络技术有限公司 | 内存泄露的处理方法、装置、电子设备及计算机存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112789651B (zh) | 一种应用于终端的频率调整方法、装置及电子设备 | |
CN113254409B (zh) | 文件共享方法、系统及相关设备 | |
CN115757193B (zh) | 一种内存的管理方法及电子设备 | |
CN116070035B (zh) | 数据处理方法和电子设备 | |
CN115333941B (zh) | 获取应用运行情况的方法及相关设备 | |
CN113448482A (zh) | 触控屏的滑动响应控制方法及装置、电子设备 | |
CN117234398B (zh) | 一种屏幕亮度调节方法及电子设备 | |
CN110970959B (zh) | 充电管理方法、图形用户界面及相关装置 | |
CN114968543A (zh) | 文件页的处理方法及相关装置 | |
CN116055859B (zh) | 图像处理方法和电子设备 | |
CN115022807B (zh) | 快递信息提醒方法和电子设备 | |
CN113224804B (zh) | 一种充电控制方法及电子设备 | |
CN116680161A (zh) | 内存泄漏检测方法、可读介质和电子设备 | |
CN114116610A (zh) | 获取存储信息的方法、装置、电子设备和介质 | |
CN115665841B (zh) | 发射功率确定方法、芯片、终端设备和可读存储介质 | |
CN116048772B (zh) | 中央处理单元频率的调整方法、装置和终端设备 | |
CN116719376B (zh) | 电压控制方法、装置、设备和存储介质 | |
CN116048831B (zh) | 一种目标信号处理方法和电子设备 | |
CN116048769B (zh) | 内存回收方法、装置和终端设备 | |
CN116775419B (zh) | 文件系统的监视方法和装置 | |
CN113050864B (zh) | 一种截屏方法及相关设备 | |
CN115993592B (zh) | 蓝牙测距方法、电子设备及存储介质 | |
CN116321265B (zh) | 网络质量评估方法、电子设备以及存储介质 | |
CN114942741B (zh) | 数据传输方法及电子设备 | |
CN117041413A (zh) | 充电控制方法、装置、电子设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |