CN111356987B - 动态内存的识别方法和装置 - Google Patents
动态内存的识别方法和装置 Download PDFInfo
- Publication number
- CN111356987B CN111356987B CN201780096870.5A CN201780096870A CN111356987B CN 111356987 B CN111356987 B CN 111356987B CN 201780096870 A CN201780096870 A CN 201780096870A CN 111356987 B CN111356987 B CN 111356987B
- Authority
- CN
- China
- Prior art keywords
- memory
- application program
- characteristic curve
- use characteristic
- spaces
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种动态内存的识别方法和装置,该方法包括:检测终端中各应用程序在达到预设运行次数之前,每次运行时所述应用程序在不同内存空间的占用量;根据每次运行时所述应用程序在不同内存空间的占用量和所述应用程序的运行次数之间的关系,生成内存使用特性曲线;根据所述内存使用特性曲线,确定所述应用程序是否存在内存溢出的情况。本发明的整个检测过程效率高,可以同时对应用程序的不同内存空间占用量进行全面分析,精确定位到应用程序中存在内存溢出的内存空间所在的位置。
Description
技术领域
本申请涉及终端技术领域,尤其涉及一种动态内存的识别方法和装置。
背景技术
动态内存是指用动态存储分配函数动态开辟的空间,在使用完后占用的内存会被释放。但是,在应用程序的运行过程中,经常会出现内存泄露的问题,内存泄露是指动态内存在使用完毕后被一直占有的情况。如果内存被占用的数量越多,则会使应用程序出现内存溢出的情况,从而影响应用程序的正常使用。
为了解决内存的溢出问题,现有的方法是:对应用程序进行测试,根据测试结果确定应用程序的最大占用内存,根据测试结果按照最大的上限值分配给应用程序一个固定的内存容量,以防止应用程序的内存溢出。
但是,现有的方法无法准确预测出应用程序是否会存在内存溢出的状况,若分配的内存过大,则存在空间浪费,若分配的内存过小,则容易出现内存溢出的情况,从而导致应用程序无法正常运行。
发明内容
本发明提供了一种动态内存的识别方法和装置,以准确地预测出应用程序的不同内存空间是否会出现内存溢出。
第一方面,本发明提供了一种动态内存的识别方法,包括:
检测终端中各应用程序在达到预设运行次数之前,每次运行时所述应用程序在不同内存空间的占用量;
根据每次运行时所述应用程序在不同内存空间的占用量和所述应用程序的运行次数之间的关系,生成内存使用特性曲线;
根据所述内存使用特性曲线,确定所述应用程序是否存在内存溢出的情况。
可选地,所述检测终端中各应用程序每次运行时所述应用程序在不同内存空间的占用量,包括:
确定待检测的所述应用程序的包名;
根据所述应用程序的包名,获取内存查看命令;
根据所述内存查看命令,对所述应用程序的内存使用情况进行检测;
统计所述应用程序运行时不同内存空间的占用量;其中,所述不同内存空间包括:堆空间、本机堆空间。
可选地,所述根据每次运行时所述应用程序在不同内存空间的占用量和所述应用程序的运行次数之间的关系,生成内存使用特性曲线,包括:
在直角坐标系中生成所述内存使用特性曲线;其中,所述内存使用特性曲线在直角坐标系中的横轴为:应用程序的运行次数,所述内存使用特性曲线在直角坐标系中的纵轴为:应用程序不同内存空间的占用量;所述内存使用特性曲线的数量与内存空间的数量对应。
可选地,所述根据所述内存使用特性曲线,确定所述应用程序是否存在内存溢出的情况,包括:
针对每一内存使用特性曲线,在预设的运行次数内,判断所述内存使用特性曲线的一阶导数是否大于0,若所述内存使用特性曲线的一阶导数大于0,则确定所述内存使用特性曲线为增长状态,所述应用程序在所述内存使用特性曲线对应的内存空间中存在内存溢出的情况;
若所述内存使用特性曲线的一阶导数小于等于0,则表示所述内存使用特性曲线为衰减状态,则所述应用程序在所述内存使用特性曲线对应的内存空间中不会内存溢出。
可选地,当所述内存使用特性曲线的一阶导数大于0时,还包括:
判断所述内存使用特性曲线的二阶导数是否小于等于0,若所述内存使用特性曲线的二阶导数小于等于0,则表示所述内存使用特性曲线增长且增长趋势趋于平缓,所述内存使用特性曲线对应的内存空间中存在内存溢出的情况;若所述内存使用特性曲线的二阶导数大于0,则表示所述内存使用特性曲线增长且增长趋势变大,所述内存使用特性曲线对应的内存空间中存在内存会溢出的情况。
可选地,确定所述应用程序的内存会溢出之后,还包括:
利用内存分析工具MAT,分析所述应用程序的堆空间内分配内存量超过预设阈值的对象,对所述对象的代码进行优化;和/或
分析所述应用程序的本机堆空间产生的coredump文件,根据所述coredump文件中调用堆栈的次数以及每次调用产生的内存数量来定位代码溢出的位置,对所述代码进行优化。
第二方面,本发明提供了一种动态内存的识别装置,包括:
检测模块,用于检测终端中各应用程序在达到预设运行次数之前,每次运行时所述应用程序在不同内存空间的占用量;
曲线生成模块,用于根据每次运行时所述应用程序在不同内存空间的占用量和所述应用程序的运行次数之间的关系,生成内存使用特性曲线;
确定模块,用于根据所述内存使用特性曲线,确定所述应用程序是否存在内存溢出的情况。
可选地,所述检测模块,具体用于:
确定待检测的所述应用程序的包名;
根据所述应用程序的包名,获取内存查看命令;
根据所述内存查看命令,对所述应用程序的内存使用情况进行检测;
统计所述应用程序运行时不同内存空间的占用量;其中,所述不同内存空间包括:堆空间、本机堆空间。
可选地,所述曲线生成模块,具体用于:
在直角坐标系中生成所述内存使用特性曲线;其中,所述内存使用特性曲线在直角坐标系中的横轴为:应用程序的运行次数,所述内存使用特性曲线在直角坐标系中的纵轴为:应用程序不同内存空间的占用量;所述内存使用特性曲线的数量与内存空间的数量对应。
可选地,所述确定模块,具体用于:
针对每一内存使用特性曲线,在预设的运行次数内,判断所述内存使用特性曲线的一阶导数是否大于0,若所述内存使用特性曲线的一阶导数大于0,则确定所述内存使用特性曲线为增长状态,所述应用程序在所述内存使用特性曲线对应的内存空间中存在内存溢出的情况;
若所述内存使用特性曲线的一阶导数小于等于0,则表示所述内存使用特性曲线为衰减状态,则所述应用程序在所述内存使用特性曲线对应的内存空间中不会内存溢出。
可选地,还包括:
判断模块,用于在所述内存使用特性曲线的一阶导数大于0时,判断所述内存使用特性曲线的二阶导数是否小于等于0,若所述内存使用特性曲线的二阶导数小于等于0,则表示所述内存使用特性曲线增长且增长趋势趋于平缓,所述内存使用特性曲线对应的内存空间中存在内存溢出的情况;若所述内存使用特性曲线的二阶导数大于0,则表示所述内存使用特性曲线增长且增长趋势变大,所述内存使用特性曲线对应的内存空间中存在内存会溢出的情况。
可选地,还包括:
分析模块,用于在确定所述应用程序的内存会溢出之后,利用内存分析工具MAT,分析所述应用程序的堆空间内分配内存量超过预设阈值的对象,对所述对象的代码进行优化;和/或
分析所述应用程序的本机堆空间产生的coredump文件,根据所述coredump文件中调用堆栈的次数以及每次调用产生的内存数量来定位代码溢出的位置,对所述代码进行优化。
第三方面,本发明提供了一种动态内存的识别系统,包括:存储器、处理器以及计算机程序,所述计算机程序存储在所述存储器中,所述处理器运行所述计算机程序执行第一方面及第一方面各种可能的设计所述的方法。
第四方面,本发明提供了一种存储介质,包括:可读存储介质和计算机程序,所述计算机程序用于实现第一方面及第一方面各种可能的设计所述的方法。
本发明提供的动态内存的识别方法和装置,通过检测终端中各应用程序在达到预设运行次数之前,每次运行时所述应用程序在不同内存空间的占用量,并根据每次运行时应用程序在不同内存空间的占用量和该应用程序的运行次数之间的关系,生成内存使用特性曲线;利用该内存使用特性曲线分析得到应用程序是否存在内存溢出的情况。本发明的整个检测过程效率高,可以同时对应用程序的不同内存空间占用量进行全面分析,精确定位到应用程序中存在内存溢出的内存空间所在的位置。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的应用场景示意图;
图2为本发明实施例一提供的动态内存的识别方法的流程示意图;
图3为安卓系统手机中某一应用程序的内存使用特性曲线示意图;
图4为本发明实施例二提供的动态内存的识别方法的流程示意图;
图5为本发明实施例一提供的动态内存的识别装置的结构示意图;
图6为本发明实施例二提供的动态内存的识别装置的结构示意图;
图7为本发明实施例三提供的动态内存的识别装置的结构示意图;
图8为本发明实施例一提供的动态内存的识别系统的结构示意图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
下面以具体地实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
以下,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。
1)动态内存,是用动态存储分配函数动态开辟的空间,在使用完后占用的内存会被释放。
2)终端,是一种向用户提供语音和/或数据连通性的设备,例如具有无线和/或有线连接功能的手持设备、车载设备等。常见的终端包括:手机、平板电脑、笔记本电脑、掌上电脑、移动互联网设备、可穿戴设备,例如智能手表、智能手环、计步器等。
3)内存溢出,是指存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。
4)不同内存空间,是指应用程序在运行时,编译器分配的不同内存区域,例如栈区、堆区、全局区、文字常量区、程序代码区等等,每个区用于存储不同的内容。例如堆区,程序员可以对堆区中的空间进行分配释放,以安卓系统中的应用程序为例,应用程序在安卓系统下运行时,其内存使用情况可以分为:Java Heap(堆空间)、Native Heap(本机堆空间)、Graphics(图表)等。
图1为本发明的应用场景示意图,如图1所示,以安卓系统的手机为例,使用adbdumpsys命令查看应用程序的内存使用情况,具体的,在手机的命令行中输入:adb shelldumpsys meminfo<package_name>(以应用程序的包名查看应用程序内存的使用情况)。手机系统接收到adb dumpsys命令后,显示对应包名的应用程序内存的使用情况。记录下应用程序每次运行时,不同内存空间的占用量。当达到预设阈值的运行次数后,以不同内存空间的占用量与应用程序的运行次数之间的关系,生成与不同内存空间数量一致的内存使用特性曲线。需要说明的是,本实施例不限定内存使用情况的检测方法,可选地,还可以采用在集成开发环境(Integrated Development Environment,IDE)中查看Log信息、Eclipse中的Dalvik虚拟机调试监控服务(Dalvik Debug Monitor Service,DDMS)、adb shellprocrank命令等方法检测应用程序的不同内存空间的占用量。
图2为本发明实施例一提供的动态内存的识别方法的流程示意图,图3为安卓系统手机中某一应用程序的内存使用特性曲线示意图;如图2所示,本实施例中的方法可以包括:
S101、检测终端中各应用程序在达到预设运行次数之前,每次运行时应用程序在不同内存空间的占用量。
本实施例中,首先设置应用程序运行的预设次数,例如设置预设运行次数为1000次,则记录应用程序在1000次运行过程中,每次运行时应用程序在不同内存空间的占用量。需要说明的是本实施例以1000次为例进行说明,不限定具体检测次数。
可选地,以使用adb dumpsys命令查看应用程序的内存使用情况为例进行说明,首先确定待检测的应用程序的包名,根据应用程序的包名,获取内存查看命令;根据内存查看命令(adb shell dumpsys meminfo<package_name>),对应用程序的内存使用情况进行检测;统计应用程序运行时不同内存空间的占用量;其中,不同内存空间包括:堆空间、本机堆空间。
S102、根据每次运行时应用程序在不同内存空间的占用量和应用程序的运行次数之间的关系,生成内存使用特性曲线。
本实施例中,每次运行时应用程序在不同内存空间的占用量和应用程序的运行次数之间的关系,生成内存使用特性曲线。具体的,参见图3,在直角坐标系中生成内存使用特性曲线;其中,内存使用特性曲线在直角坐标系中的横轴为:应用程序的运行次数,内存使用特性曲线在直角坐标系中的纵轴为:应用程序不同内存空间的占用量;内存使用特性曲线的数量与内存空间的数量对应。
S103、根据内存使用特性曲线,确定应用程序是否存在内存溢出的情况。
本实施例中,通过分析内存使用特性曲线随着应用程序运行次数的增加是否呈现增长的趋势来判断该应用程序是否存在内存溢出的情况。
可选地,针对每一内存使用特性曲线,在预设的运行次数内,判断内存使用特性曲线的一阶导数是否大于0,若内存使用特性曲线的一阶导数大于0,则确定内存使用特性曲线为增长状态,应用程序在内存使用特性曲线对应的内存空间中存在内存溢出的情况。
可选地,通过分析不同内存空间所对应的内存使用特性曲线,综合得出应用程序是否存在内存溢出的情况。具体的,可以设定出现内存溢出的内存使用特性曲线的数量达到预设的上限值时,确定应用程序存在内存溢出的情况。需要说明的是,本申请中指出的存在内存溢出的情况,可以是预测情况,即当前应用程序虽然还没有内存溢出,但是随着运行次数的继续增长,则会出现内存溢出的情况。
若内存使用特性曲线的一阶导数小于等于0,则表示内存使用特性曲线为衰减状态,则应用程序在内存使用特性曲线对应的内存空间中不会内存溢出。
可选地,当内存使用特性曲线的一阶导数大于0时,还包括:
判断内存使用特性曲线的二阶导数是否小于等于0,若内存使用特性曲线的二阶导数小于等于0,则表示内存使用特性曲线增长且增长趋势趋于平缓,内存使用特性曲线对应的内存空间中存在内存溢出的情况;若内存使用特性曲线的二阶导数大于0,则表示内存使用特性曲线增长且增长趋势变大,内存使用特性曲线对应的内存空间中存在内存会溢出的情况。
本实施例,通过检测终端中各应用程序在达到预设运行次数之前,每次运行时应用程序在不同内存空间的占用量,并根据每次运行时应用程序在不同内存空间的占用量和该应用程序的运行次数之间的关系,生成内存使用特性曲线;利用该内存使用特性曲线分析得到应用程序是否存在内存溢出的情况。本发明的整个检测过程效率高,可以同时对应用程序的不同内存空间占用量进行全面分析,精确定位到应用程序中存在内存溢出的内存空间所在的位置。
图4为本发明实施例二提供的动态内存的识别方法的流程示意图,如图4所示,本实施例中的方法可以包括:
S201、检测终端中各应用程序在达到预设运行次数之前,每次运行时应用程序在不同内存空间的占用量。
S202、根据每次运行时应用程序在不同内存空间的占用量和应用程序的运行次数之间的关系,生成内存使用特性曲线。
S203、根据内存使用特性曲线,确定应用程序存在内存溢出的情况。
本实施例中步骤S201-步骤S203的具体实现过程请参见图2所示的方法中的步骤,此处不再赘述。
S204、定位存在内存溢出的代码位置,并对该代码进行优化。
本实施例中,通过确定存在内存溢出的具体内存空间来确定该内存空间对应的代码,查找到该代码引起内存溢出的原因,并对该代码进行优化。
可选地,可以利用内存分析工具(Memory Analysis Tool,MAT),分析应用程序的堆空间内分配内存量超过预设阈值的对象,对对象的代码进行优化;和/或
分析应用程序的本机堆空间产生的coredump文件,根据coredump文件中调用堆栈的次数以及每次调用产生的内存数量来定位代码溢出的位置,对代码进行优化。
具体的,以安卓系统的手机为例进行说明,若是堆空间Java Heap不断增长,其实是Java内对象的不断增长,可以使用MAT工具进行分析出内存分配过多的对象,并针对该对象,查找源码进行优化,以解决存在的内存溢出问题。若是本机堆空间Native Heap不断增长,则要使用内存溢出产生的coredump文件进行分析,通过统计coredump中调用堆栈的次数以及每次调用产生的内存数量定位代码溢出位置。例如:其中一段代码调用栈被调用100次,每次产生10M内存,且没有释放,那么总共便会产生1000M内存,因此通过对这段代码定位,就可以找到需要优化的代码,以解决存在的内存溢出问题。
本实施例,可以通过对内存使用特性曲线的分析,得到该内存使用特性曲线所对应的内存空间是否存在内存溢出问题,当该内存使用特性曲线所对应的内存空间存在内存溢出问题时,可以通过具体的内存空间定位存在内存溢出的代码位置,从而实现对代码的查验和优化,从根本上解决应用程序的内存溢出问题。
图5为本发明实施例一提供的动态内存的识别装置的结构示意图,如图5所示,本实施例中的装置可以包括:
检测模块10,用于检测终端中各应用程序在达到预设运行次数之前,每次运行时应用程序在不同内存空间的占用量。
可选地,检测模块10,具体用于:
确定待检测的应用程序的包名;
根据应用程序的包名,获取内存查看命令;
根据内存查看命令,对应用程序的内存使用情况进行检测;
统计应用程序运行时不同内存空间的占用量;其中,不同内存空间包括:堆空间、本机堆空间。
曲线生成模块20,用于根据每次运行时应用程序在不同内存空间的占用量和应用程序的运行次数之间的关系,生成内存使用特性曲线。
可选地,曲线生成模块20,具体用于:
在直角坐标系中生成内存使用特性曲线;其中,内存使用特性曲线在直角坐标系中的横轴为:应用程序的运行次数,内存使用特性曲线在直角坐标系中的纵轴为:应用程序不同内存空间的占用量;内存使用特性曲线的数量与内存空间的数量对应。
确定模块30,用于根据内存使用特性曲线,确定应用程序是否存在内存溢出的情况。
可选地,确定模块30,具体用于:
针对每一内存使用特性曲线,在预设的运行次数内,判断内存使用特性曲线的一阶导数是否大于0,若内存使用特性曲线的一阶导数大于0,则确定内存使用特性曲线为增长状态,应用程序在内存使用特性曲线对应的内存空间中存在内存溢出的情况;
若内存使用特性曲线的一阶导数小于等于0,则表示内存使用特性曲线为衰减状态,则应用程序在内存使用特性曲线对应的内存空间中不会内存溢出。
本实施例的装置,可以用于执行图2和图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图6为本发明实施例二提供的动态内存的识别装置的结构示意图,如图6所示,本实施例中的装置在图5所示装置的基础上,还可以包括:
判断模块40,用于在内存使用特性曲线的一阶导数大于0时,判断内存使用特性曲线的二阶导数是否小于等于0,若内存使用特性曲线的二阶导数小于等于0,则表示内存使用特性曲线增长且增长趋势趋于平缓,内存使用特性曲线对应的内存空间中存在内存溢出的情况;若内存使用特性曲线的二阶导数大于0,则表示内存使用特性曲线增长且增长趋势变大,内存使用特性曲线对应的内存空间中存在内存会溢出的情况。
本实施例的装置,可以用于执行图2和图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图7为本发明实施例三提供的动态内存的识别装置的结构示意图,如图7所示,本实施例中的装置在图5所示装置的基础上,还可以包括:
分析模块50,用于在确定应用程序的内存会溢出之后,利用内存分析工具MAT,分析应用程序的堆空间内分配内存量超过预设阈值的对象,对对象的代码进行优化;和/或
分析应用程序的本机堆空间产生的coredump文件,根据coredump文件中调用堆栈的次数以及每次调用产生的内存数量来定位代码溢出的位置,对代码进行优化。
本实施例的装置,可以用于执行图2和图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图8为本发明实施例一提供的动态内存的识别系统的结构示意图,如图8所示,动态内存的识别系统60包括:存储器61、处理器62、总线63以及计算机程序,计算机程序存储在存储器61中,处理器62通过总线63与存储器61进行数据传输,处理器62运行计算机程序执行图2和图4中各种可能的设计的方法。
本实施例的装置,可以用于执行图2和图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
此外,本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当用户设备的至少一个处理器执行该计算机执行指令时,用户设备执行上述各种可能的方法。
其中,计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于应用专用集成电路(ASIC)中。另外,该应用专用集成电路可以位于用户设备中。当然,处理器和存储介质也可以作为分立组件存在于通信设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:只读存储器(ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本发明旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。
Claims (8)
1.一种动态内存的识别方法,其特征在于,包括:
检测终端中各应用程序在达到预设运行次数之前,每次运行时所述应用程序在不同内存空间的占用量;
根据每次运行时所述应用程序在不同内存空间的占用量和所述应用程序的运行次数之间的关系,生成内存使用特性曲线,所述内存使用特性曲线的数量与内存空间的数量对应;
根据所述内存使用特性曲线,确定所述应用程序是否存在内存溢出的情况,包括:
针对每一内存使用特性曲线,在预设的运行次数内,判断所述内存使用特性曲线的一阶导数是否大于0,若所述内存使用特性曲线的一阶导数大于0,则确定所述内存使用特性曲线为增长状态,所述应用程序在所述内存使用特性曲线对应的内存空间中存在内存溢出的情况;若所述内存使用特性曲线的一阶导数小于等于0,则表示所述内存使用特性曲线为衰减状态,则所述应用程序在所述内存使用特性曲线对应的内存空间中不会内存溢出;
当对应应用程序在相应的内存空间存在内存溢出情况的内存使用特性曲线的数量达到预设的第一阈值时,确定所述应用程序存在内存溢出。
2.根据权利要求1所述的方法,其特征在于,所述检测终端中各应用程序每次运行时所述应用程序在不同内存空间的占用量,包括:
确定待检测的所述应用程序的包名;
根据所述应用程序的包名,获取内存查看命令;
根据所述内存查看命令,对所述应用程序的内存使用情况进行检测;
统计所述应用程序运行时不同内存空间的占用量;其中,所述不同内存空间包括:堆空间、本机堆空间。
3.根据权利要求2所述的方法,其特征在于,所述根据每次运行时所述应用程序在不同内存空间的占用量和所述应用程序的运行次数之间的关系,生成内存使用特性曲线,包括:
在直角坐标系中生成所述内存使用特性曲线;其中,所述内存使用特性曲线在直角坐标系中的横轴为:应用程序的运行次数,所述内存使用特性曲线在直角坐标系中的纵轴为:应用程序不同内存空间的占用量。
4.根据权利要求1所述的方法,其特征在于,当所述内存使用特性曲线的一阶导数大于0时,还包括:
判断所述内存使用特性曲线的二阶导数是否小于等于0,若所述内存使用特性曲线的二阶导数小于等于0,则表示所述内存使用特性曲线增长且增长趋势趋于平缓,所述内存使用特性曲线对应的内存空间中存在内存溢出的情况;若所述内存使用特性曲线的二阶导数大于0,则表示所述内存使用特性曲线增长且增长趋势变大,所述内存使用特性曲线对应的内存空间中存在内存会溢出的情况。
5.根据权利要求1-3中任意一项所述的方法,其特征在于,确定所述应用程序的内存会溢出之后,还包括:
利用内存分析工具MAT,分析所述应用程序的堆空间内分配内存量超过预设阈值的对象,对所述对象的代码进行优化;和/或
分析所述应用程序的本机堆空间产生的coredump文件,根据所述coredump文件中调用堆栈的次数以及每次调用产生的内存数量来定位代码溢出的位置,对所述代码进行优化。
6.一种动态内存的识别装置,其特征在于,包括:
检测模块,用于检测终端中各应用程序在达到预设运行次数之前,每次运行时所述应用程序在不同内存空间的占用量;
曲线生成模块,用于根据每次运行时所述应用程序在不同内存空间的占用量和所述应用程序的运行次数之间的关系,生成内存使用特性曲线,所述内存使用特性曲线的数量与内存空间的数量对应;
确定模块,用于根据所述内存使用特性曲线,确定所述应用程序是否存在内存溢出的情况,包括针对每一内存使用特性曲线,在预设的运行次数内,判断所述内存使用特性曲线的一阶导数是否大于0,若所述内存使用特性曲线的一阶导数大于0,则确定所述内存使用特性曲线为增长状态,所述应用程序在所述内存使用特性曲线对应的内存空间中存在内存溢出的情况;若所述内存使用特性曲线的一阶导数小于等于0,则表示所述内存使用特性曲线为衰减状态,则所述应用程序在所述内存使用特性曲线对应的内存空间中不会内存溢出;还用于当对应应用程序在相应的内存空间存在内存溢出情况的内存使用特性曲线的数量达到预设的第一阈值时,确定所述应用程序存在内存溢出。
7.根据权利要求6所述的装置,其特征在于,所述检测模块,具体用于:
确定待检测的所述应用程序的包名;
根据所述应用程序的包名,获取内存查看命令;
根据所述内存查看命令,对所述应用程序的内存使用情况进行检测;
统计所述应用程序运行时不同内存空间的占用量;其中,所述不同内存空间包括:堆空间、本机堆空间。
8.根据权利要求7所述的装置,其特征在于,所述曲线生成模块,具体用于:
在直角坐标系中生成所述内存使用特性曲线;其中,所述内存使用特性曲线在直角坐标系中的横轴为:应用程序的运行次数,所述内存使用特性曲线在直角坐标系中的纵轴为:应用程序不同内存空间的占用量。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2017/101999 WO2019051819A1 (zh) | 2017-09-18 | 2017-09-18 | 动态内存的识别方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111356987A CN111356987A (zh) | 2020-06-30 |
CN111356987B true CN111356987B (zh) | 2021-05-11 |
Family
ID=65722269
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780096870.5A Active CN111356987B (zh) | 2017-09-18 | 2017-09-18 | 动态内存的识别方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN111356987B (zh) |
WO (1) | WO2019051819A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111984401A (zh) * | 2020-07-24 | 2020-11-24 | 五八有限公司 | 一种内存溢出管理方法、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1564098A (zh) * | 2004-04-09 | 2005-01-12 | 南京大学 | 一种防止缓冲区溢出攻击的动态堆栈内存管理方法 |
CN101727355A (zh) * | 2008-10-31 | 2010-06-09 | 国际商业机器公司 | 用于内存访问事件的处理方法和系统 |
CN103500123A (zh) * | 2013-10-12 | 2014-01-08 | 浙江大学 | 异构环境中并行计算调度方法 |
CN105868025A (zh) * | 2016-03-30 | 2016-08-17 | 华中科技大学 | 一种解决大数据处理系统中内存资源激烈竞争的系统 |
CN107066390A (zh) * | 2017-04-24 | 2017-08-18 | 许继集团有限公司 | 一种动态内存泄漏检测方法及系统 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7120775B2 (en) * | 2003-12-29 | 2006-10-10 | Intel Corporation | Inter-procedural allocation of stacked registers for a processor |
US8312243B2 (en) * | 2009-07-16 | 2012-11-13 | Lantiq Deutschland Gmbh | Memory management in network processors |
CN101819549B (zh) * | 2010-04-13 | 2012-10-10 | 东莞宇龙通信科技有限公司 | 一种内存泄露的定位方法及装置 |
CN102681938B (zh) * | 2012-05-15 | 2015-02-18 | 青岛海信移动通信技术股份有限公司 | 一种内存泄漏检测方法及装置 |
CN104516817B (zh) * | 2012-05-15 | 2017-09-29 | 青岛海信移动通信技术股份有限公司 | 一种内存泄漏检测方法及装置 |
CN104991847B (zh) * | 2015-07-03 | 2018-11-23 | 厦门美图移动科技有限公司 | 一种内存泄露自动化检测方法、装置及移动终端 |
CN105204996A (zh) * | 2015-09-24 | 2015-12-30 | 努比亚技术有限公司 | 内存泄露检测装置及方法、终端 |
CN105550041A (zh) * | 2016-03-04 | 2016-05-04 | 珠海市魅族科技有限公司 | 一种移动终端控制方法及控制装置 |
CN105912458A (zh) * | 2016-03-28 | 2016-08-31 | 中国电力科学研究院 | 一种用于动态检测c/c++内存泄露的方法及系统 |
-
2017
- 2017-09-18 WO PCT/CN2017/101999 patent/WO2019051819A1/zh active Application Filing
- 2017-09-18 CN CN201780096870.5A patent/CN111356987B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1564098A (zh) * | 2004-04-09 | 2005-01-12 | 南京大学 | 一种防止缓冲区溢出攻击的动态堆栈内存管理方法 |
CN101727355A (zh) * | 2008-10-31 | 2010-06-09 | 国际商业机器公司 | 用于内存访问事件的处理方法和系统 |
CN103500123A (zh) * | 2013-10-12 | 2014-01-08 | 浙江大学 | 异构环境中并行计算调度方法 |
CN105868025A (zh) * | 2016-03-30 | 2016-08-17 | 华中科技大学 | 一种解决大数据处理系统中内存资源激烈竞争的系统 |
CN107066390A (zh) * | 2017-04-24 | 2017-08-18 | 许继集团有限公司 | 一种动态内存泄漏检测方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2019051819A1 (zh) | 2019-03-21 |
CN111356987A (zh) | 2020-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108415739B (zh) | 一种动态链接库函数的钩挂方法、装置和存储介质 | |
CN107423213B (zh) | 一种文件描述符分配检测方法和装置 | |
EP3355187A1 (en) | Loading method and device for terminal application (app) | |
CN108717374B (zh) | Java虚拟机启动时预热的方法、装置、及计算机设备 | |
CN103631707B (zh) | 一种获取代码覆盖率的方法及装置 | |
CN105607986A (zh) | 用户行为日志数据采集方法及装置 | |
CN102479084A (zh) | 一种Android终端获取日志的方法及装置 | |
CN110908865A (zh) | 内存泄漏监控方法、装置及电子设备 | |
CN113127314B (zh) | 一种检测程序性能瓶颈的方法、装置及计算机设备 | |
JP2014523022A5 (zh) | ||
CN105930058A (zh) | 一种移动终端应用启动方法、装置及移动终端 | |
CN110688168A (zh) | 提高应用程序启动速度方法、装置、设备及存储介质 | |
CN115114071A (zh) | 一种内存分析方法、装置、设备及介质 | |
CN111356987B (zh) | 动态内存的识别方法和装置 | |
CN110688245A (zh) | 信息获取方法、装置、存储介质及设备 | |
CN106682494B (zh) | 一种信息访问方法、装置和设备 | |
CN110750346B (zh) | 任务运行优化方法、装置、终端及存储介质 | |
CN108733478B (zh) | 三维图像处理方法及装置 | |
CN112711624A (zh) | 数据打包控制方法、装置、电子设备和存储介质 | |
CN117009221A (zh) | 产品测试的处理方法、装置、设备、存储介质及程序产品 | |
CN114296986B (zh) | 内存泄漏定位方法、装置、介质和电子设备 | |
CN109976970B (zh) | 一种提高主板芯片使用寿命的方法、系统及存储介质 | |
CN116521414A (zh) | 故障代码定位方法、云端服务器、系统及存储介质 | |
CN111352710A (zh) | 进程管理方法及装置、计算设备、存储介质 | |
JP6747161B2 (ja) | ソフトウェア品質判定方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |