CN110083525A - 内存泄露的定位方法、装置、计算机设备及存储介质 - Google Patents
内存泄露的定位方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN110083525A CN110083525A CN201910199036.XA CN201910199036A CN110083525A CN 110083525 A CN110083525 A CN 110083525A CN 201910199036 A CN201910199036 A CN 201910199036A CN 110083525 A CN110083525 A CN 110083525A
- Authority
- CN
- China
- Prior art keywords
- information
- memory
- creation
- ram leakage
- target object
- 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
- 238000000034 method Methods 0.000 title claims abstract description 65
- 230000004807 localization Effects 0.000 title claims abstract description 23
- 238000003860 storage Methods 0.000 title claims abstract description 15
- 238000012545 processing Methods 0.000 claims description 20
- 238000007599 discharging Methods 0.000 claims description 7
- 238000013507 mapping Methods 0.000 claims description 6
- 230000000007 visual effect Effects 0.000 abstract description 6
- 238000012550 audit Methods 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 16
- 238000007630 basic procedure Methods 0.000 description 10
- 230000006854 communication Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 9
- 241000406668 Loxodonta cyclotis Species 0.000 description 3
- 238000000151 deposition Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012163 sequencing technique Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007175 bidirectional communication Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000008034 disappearance Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000008140 language development Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000001960 triggered 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/30—Monitoring
- G06F11/32—Monitoring with visual or acoustical indication of the functioning of the machine
- G06F11/324—Display of status information
-
- 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/362—Software debugging
- G06F11/366—Software debugging using diagnostics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Storage Device Security (AREA)
Abstract
本发明实施例公开了一种内存泄露的定位方法、装置、计算机设备及存储介质,包括下述步骤:获取被监控的对象的内存信息,其中,所述内存信息包括多个对象的内存的创建信息;判断所述多个对象的创建信息是否都具有对应的释放信息;当存在没有对应的释放信息的目标对象时,确定所述目标对象为内存泄露的对象。通过获取目标对象的内存信息,并在内存信息中判断是否存在与目标内存的创建记录对应的释放记录,当不存在时,即可确认该目标对象内存没有被释放掉,为内存泄露对象,该方法只需要记录内存的创建记录和释放记录即可查询,方法简单,通过对内存信息进行可视化设置还可以直观的查询内存的占用情况。
Description
技术领域
本发明实施例涉及计算机领域,尤其是一种内存泄露的定位方法、装置、计算机设备及存储介质。
背景技术
在计算机科学中,内存泄露是指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。其并非是指物理上的消失,而是应用程序分配某段内存后,由于涉及错误,失去了对该段内存的控制,造成的内存的浪费情况。一般情况下,内存泄露只能由程序源代码的程序员才可以分析出来。
通常在检测内存泄露时会使用专门的工具,例如boundschecker、VisualleakDetector等工具进行专门的代码检测。但是,上述工具需要单独安装,当变成语言开发工具启动时候可以自动嵌入该变成软件的工具栏中。该方法的缺点是占用的资源多,且检测过程繁琐、复杂,并且不能直观的查看内存占用信息。
发明内容
本发明实施例提供一种内存泄露的定位方法、装置、计算机设备及存储介质。
为解决上述技术问题,本发明创造的实施例采用的一个技术方案是:提供一种内存泄露的定位方法,包括下述步骤:
获取被监控的对象的内存信息,其中,所述内存信息包括多个对象的内存的创建信息;
判断所述多个对象的创建信息是否都具有对应的释放信息;
当存在没有对应的释放信息的目标对象时,确定所述目标对象为内存泄露的对象。
可选地,所述获取被监控的对象的内存信息之前,还包括:
对所述对象进行监控;
获取所述对象的内存创建指令;
根据所述内存创建指令在预设的内存信息列表中记录所述对象的创建信息。
可选地,所述内存信息为记录有多个对象的创建信息和释放信息的内存信息列表;所述判断所述多个对象的创建信息是否都具有对应的释放信息,包括:
从所述内存信息列表中提取对象的识别码;
根据所述识别码判断所述内存信息列表中是否存在与所述识别码具有映射关系的释放信息。
可选地,所述对象包括:第一对象和第二对象,其中,第二对象与第一对象嵌套;内存信息中第一对象和第二对象的创建信息呈树状排列;所述判断所述多个对象的创建信息是否都具有对应的释放信息,包括:
获取所述第一对象的信息;
根据所述第一对象的信息从所述内存信息中获取与所述第一对象嵌套的所有的第二对象的信息;
判断所述第二对象中是否存在没有释放信息的对象。
可选地,所述确定所述目标对象为内存泄露的对象,包括:
获取所述目标对象的识别码;
判断所述目标对象是否为单例对象;
当所述目标对象不是单例对象时,确定所述目标对象为内存泄露,的对象。
可选地,所述判断所述目标对象是否为单例对象,包括:
根据所述识别码在所述内存信息中查找所述目标对象的对象信息;
判断所述对象信息中是否具有单例标记。
为解决上述技术问题,本发明实施例还提供一种内存泄露的定位装置,包括:
获取模块,用于获取被监控的对象的内存信息,其中,所述内存信息包括多个对象的内存的创建信息;
处理模块,用于判断所述多个对象的创建信息是否都具有对应的释放信息;
执行模块,用于当存在没有对应的释放信息的目标对象时,确定所述目标对象为内存泄露的对象。
可选地,还包括:
第一处理子模块,用于对所述对象进行监控;
第一获取子模块,用于获取所述对象的内存创建指令;
根据所述内存创建指令在预设的内存信息列表中记录所述对象的创建信息。
可选地,所述内存信息为记录有多个对象的创建信息和释放信息的内存信息列表;所述处理模块包括:
第二获取子模块,用于从所述内存信息列表中提取对象的识别码;
第二处理子模块,用于根据所述识别码判断所述内存信息列表中是否存在与所述识别码具有映射关系的释放信息。
可选地,所述对象包括:第一对象和第二对象,其中,第二对象与第一对象嵌套;内存信息中第一对象和第二对象的创建信息呈树状排列;所述处理模块包括:
第三获取子模块,用于获取所述第一对象的信息;
第三处理子模块,用于根据所述第一对象的信息从所述内存信息中获取与所述第一对象嵌套的所有的第二对象的信息;
第四处理子模块,用于判断所述第二对象中是否存在没有释放信息的对象。
可选地,所述执行模块包括:
第三获取子模块,用于获取所述目标对象的识别码;
第四处理子模块,用于判断所述目标对象是否为单例对象;
第一执行子模块,用于当所述目标对象不是单例对象时,确定所述目标对象为内存泄露的对象。
可选地,所述第四处理子模块包括:
第五处理子模块,用于根据所述识别码在所述内存信息中查找所述目标对象的对象信息;
第六处理子模块,用于判断所述对象信息中是否具有单例标记。
为解决上述技术问题,本发明实施例还提供一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行上述所述内存泄露的定位方法的步骤。
为解决上述技术问题,本发明实施例还提供一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述所述内存泄露的定位方法的步骤。
本发明实施例的有益效果是:通过获取目标对象的内存信息,并在内存信息中判断是否存在与目标内存的创建记录对应的释放记录,当不存在时,即可确认该目标对象内存没有被释放掉,为内存泄露对象,该方法只需要记录内存的创建记录和释放记录即可查询,方法简单,通过对内存信息进行可视化设置还可以直观的查询内存的占用情况。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种内存泄露的定位方法的基本流程示意图;
图2为本发明实施例提供的一种内存信息的生成方法的基本流程示意图;
图3为本发明实施例提供的一种判断多个对象的创建信息是否都具有对应的释放信息的方法的基本流程示意图;
图4为本发明实施例提供的另一种判断多个对象的创建信息是否都具有对应的释放信息的方法的基本流程示意图;
图5为本发明实施例提供的一种确定目标对象为内存泄露对象的方法的基本流程示意图;
图6为本发明实施例提供的一种内存泄露的定位装置基本结构框图;
图7为本发明实施例提供的计算机设备基本结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
在本发明的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如101、102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例
本技术领域技术人员可以理解,这里所使用的“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,执行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;PCS(Personal Communications Service,个人通信***),其可以组合语音、数据处理、传真和/或数据通信能力;PDA(Personal Digital Assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或GPS(Global Positioning System,全球定位***)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
本实施方式中的客户终端即为上述的终端。
具体地,请参阅图1,图1为本实施例内存泄露的定位方法的基本流程示意图。
如图1所示,内存泄露的定位方法包括下述步骤:
S1100、获取被监控对象的内存信息,其中,内存信息包括多个对象的内存创建信息;
对象是编程术语,是指内存上的一段区域,称为一个对象。在本实施例中,为了定位内存的泄露对象,需要对该对象进行监控,其中,监控的作用是能实时的获得对象创建内存的创建指令和释放已创建的内存的释放指令。
在实际应用中,由于对象一般以嵌套的方式关联,因此,被监控的对象可以为多个对象。例如,对第一对象XX网页进行监控,其中,XX网页为被监控的对象,当用户单击了XX网页的第一链接时,进入第二对象XX1网页,终端或服务器创建了XX1网页的内存。其中,第二对象XX1网页与第一对象XX网页嵌套。
内存信息用于表示被监控对象以及直接或间接与被监控对象嵌套的多个对象的内存创建或释放记录的信息,其中,内存信息包括:所有已创建过内存的各个对象的创建信息以及释放已创建的内存的释放信息。需要说明的是,创建信息和释放信息是在终端或服务器接收到创建指令或释放指令后生成的。例如,用户打开XX网页时,终端接收创建指令,根据创建指令生成创建信息并存储于内存信息中,当用户关闭XX网页时,终端接收释放指令,并将生成的释放信息存储到内存信息中。
需要解释的是,内存信息可以采用图表的方式直接查看对象是否都包含创建信息和释放信息。其中,内存信息中每个对象、每个对象的创建信息和释放信息相互对应。
S1200、判断多个对象的创建信息是否都具有对应的释放信息;
在实际应用中,经常会出现只有创建信息,没有释放信息的对象,该类对象没有释放内存,一般情况下认为是内存被泄露的对象。
在一些实施方式中,内存信息中包括每个对象的识别码,创建信息或释放信息也均包含对象的识别码,终端或服务器在判断时可以从内存信息中提取识别码,根据识别码判断是否包含有相同识别码的释放信息,当不包含时,即可确定该对象为目标对象。
在一些实施方式中,为了快速判断,通过单行节点的来进行查询。例如,多个第二对象与第一目标对象嵌套,则判断时,以第一对象为节点,判断与之嵌套的多个第二对象是否都具有释放信息,以此类推。该方法可以选取多个单行节点,同时并行的对多个对象进行判断,提高了效率。
S1300、当存在没有对应的释放信息的目标对象时,确定目标对象为内存泄露的对象。
本实施例中,目标对象为只有创建信息没有释放信息的对象。在实际应用中,由于终端程序的设计问题或者其它原因,对象的内存没有及时的释放掉会占用终端的运行内存,导致内存被泄露,通过上述方法确定目标对象后,开发人员可以对目标对象的内存进行手动释放,以解决泄露的问题。
上述内存泄露的定位方法,通过获取目标对象的内存信息,并在内存信息中判断是否存在与目标内存的创建记录对应的释放记录,当不存在时,即可确认该目标对象内存没有被释放掉,为内存泄露对象,该方法只需要记录内存的创建记录和释放记录即可查询,方法简单,通过对内存信息进行可视化设置还可以直观的查询内存的占用情况。
在一些实施方式中,内存信息可以采用可视化的列表来记录每个对象的创建信息或者释放信息,例如可以采用内存信息列表。本发明实施例提供一种内存信息的生成方法,如图2所示,图2为本发明实施例提供的一种内存信息的生成方法的基本流程示意图。
具体地,如图2所示,步骤S1100之前,还包括下述步骤:
S1110、对对象进行监控;
本实施例中,可以对待监控的对象设置程序指令来监控该对象或该对象的子对象的内存的创建或释放,例如,可以采用如下代码:
data(){return{bet:{pokerState:53,pokerHistory:'local'}}},
watch:{bet:{handler(newValue,oldValue){console.log(newValue)},d eep:true}}
S1120、获取对象的内存创建指令;
创建指令用于创建对象内存,例如,在打开网页时,触发打开网页的指令为创建指令,其中,创建指令可以为认为触发,也可以由终端内部程序的设计触发。
S1130、根据内存创建指令在预设的内存信息列表中记录对象的创建信息。
内存信息列表用于记录对象信息,例如,对象的识别码、对象内存的创建信息和对象内存的释放信息,其中,对象信息与创建信息和释放信息一一对应。需要说明的是,当对象内存没有被释放时,该对象没有释放信息。
在实际应用中,在存储创建信息的过程中,终端在接收到创建指令后,自动生成或者获取该对象的识别码,并将识别码和包含识别码的创建信息添加到内存信息列表中,其中,识别码和创建信息一一对应。对应的,当接收到内存释放指令后获取识别码并加入到释放信息中,以及将释放信息按照上述的方法添加到内存信息列表中。
本发明实施例提供一种判断多个对象的创建信息是否都具有对应的释放信息的方法,如图3所示,图3为本发明实施例提供的一种判断多个对象的创建信息是否都具有对应的释放信息的方法的基本流程示意图。
具体地,如图3所示,步骤S1200包括下述步骤:
S1211、从内存信息列表中提取对象的识别码;
本发明实施例中,内存信息可以用内存信息列表的方式进行表示。识别码用于唯一识别被监控的所有的对象,其中,识别码可以采用数字、字母或者字符,在此不作限定。
需要说明的是,内存信息列表中存储的对象的识别码可以按照嵌套的方式进行排列,也可以按照创建的时间顺序进行排列。在提取识别码时,可以按照顺序进行分别提取。
S1212、根据识别码判断内存信息列表中是否存在与识别码具有映射关系的释放信息。
终端或者服务器根据识别码在内存信息列表中查询是否存在与识别码具有映射关系的释放信息。
在一些实施方式中,终端还可以从内存信息列表的释放信息中提取识别码,以及提取内存信息中的全部对象的识别码,从全部的识别码中除去释放信息中提取的识别码后得到的剩余识别码,即为没有释放信息的识别码。即,终端在判断时,可以判断剩余的识别码是否为0,当为0时,内存信息中的所有对象都具有释放信息,当有剩余的识别码时,内存信息中的对象具有没有释放内存的对象。
在实际应用中,被监控的多个对象为嵌套关系,例如,被监控的对象包括:第一对象和第二对象,其中,第二对象与第一对象嵌套。内存信息以内存信息列表的方式进行显示,且内存信息列表中第一对象和第二对象的识别码和创建信息呈树状排列。为了可以快速查找没有释放信息的目标对象,本发明实施例提供另一种判断多个对象的创建信息是否都具有对应的释放信息的方法,如图4所示,图4为本发明实施例提供的另一种判断多个对象的创建信息是否都具有对应的释放信息的方法的基本流程示意图。
具体地,如图4所示,步骤S1200包括下述步骤:
S1221、从内存信息中获取第一对象的信息;
本发明实施例中,终端按照内存信息列表中树形排列的信息提取第一对象的信息,例如,提取第一对象的识别码。在实际应用中,为了方便,可以先提取树形顶端的对象,例如,一个A对象与多个B对象嵌套,每个B对象又分别于多个C对象嵌套,依次类推。在提取时,为了确保全面,不发生遗漏可以先提取A对象的识别码。
需要说明的是,第一对象仅仅用来表示嵌套关系,在实际应用中,第一对象还可以是B对象或C对象。
S1222、根据第一对象的信息从内存信息中获取与第一对象嵌套的所有的第二对象的信息;
S1223、判断第二对象中是否存在没有释放信息的对象。
本发明实施例中,由于内存信息列表中的信息按照嵌套关系成树状排列,因此,当确定第一对象后,即可以确定与第一对象嵌套的第二对象,在内存信息中提取多个第二对象的识别码,并分别判断每个第二对象中是否都具有释放信息。
例如,当确定A对象为第一对象后,即可确定B对象为第二对象,并分别查找每个B对象中是否都包含释放信息。同理,本实施例中,第二对象为实例性的,当第一对象为A对象时,第二对象为B对象,当第一对象为B对象时,第二对象为C对象。
在实际应用中,所有的对象中还包括单例对象(singleton),其中,单例对象可以作为程序中的存放配置信息的载体,它可以确保其它对象读到一致的信息。例如,在某个服务器中,配置信息可能存放在数据库或文件中,由某个单例对象统一读取,在创建对象的时候只需要直接访问单例对象即可,不需要额外的创建内存。因此,单例对象内存可以长期存在,即单例对象可以只有创建信息,也就是说,当其没有释放信息时,并不属于内存泄露的状况。因此,本发明实施例还提供一种确定目标对象为内存泄露的对象的方法,如图5所示,图5为本发明实施例提供的一种确定目标对象为内存泄露对象的方法的基本流程示意图。
具体地,如图5所示,步骤S1300包括下述步骤:
S1310、获取目标对象的识别码;
本发明实施例中,终端或者服务器可以从内存信息列表中提取目标对象的识别码。具体方法可以参照图2所示的实施例,在此不再赘述。
S1320、判断目标对象是否为单例对象;
终端或者服务器根据识别码在内存信息中查找目标对象的对象信息;判断对象信息中是否具有单例标记。
其中,对象信息用于表示关于目标对象的内存的相关信息,可以为创建信息,也可以为包括创建信息、识别码在内的信息。单例标记用于表示对象为单例对象。在实际应用中,当对象为单例对象时,内存信息列表中预先在该对象记录创建信息时,在创建信息中添加单例标记,其中,单例标记可以为字母、数字、字符中的一组或者多种的组合。
本发明实施例中,终端或服务器在在查询时,可以根据识别码在内存信息中查询具有相同识别码的创建信息,再从创建信息中查找单例标记。当查询到单例标记时,确定目标对象为单例对象。本发明实施例中,当创建信息中有单例信息时,可以确定目标对象为单例对象,即,该目标对象不是内存泄露的对象。
S1330、当目标对象不是单例对象时,确定目标对象为内存泄露的对象。
当查询不到单例标记时,确定目标对象不是单例对象,即,该目标对象为内存泄露的对象。
为解决上述技术问题本发明实施例还提供一种内存泄露的定位装置。具体请参阅图6,图6为本实施例内存泄露的定位装置基本结构框图。
如图6所示,一种内存泄露的定位装置,包括:获取模块2100、处理模块2200和执行模块2300。其中,获取模块2100,用于获取被监控的对象的内存信息,其中,所述内存信息包括多个对象的内存的创建信息;处理模块2200,用于判断所述多个对象的创建信息是否都具有对应的释放信息;执行模块2300,用于当存在没有对应的释放信息的目标对象时,确定所述目标对象为内存泄露的对象。
内存泄露的定位装置通过获取目标对象的内存信息,并在内存信息中判断是否存在与目标内存的创建记录对应的释放记录,当不存在时,即可确认该目标对象内存没有被释放掉,为内存泄露对象,该方法只需要记录内存的创建记录和释放记录即可查询,方法简单,通过对内存信息进行可视化设置还可以直观的查询内存的占用情况。
在一些实施方式中,还包括:第一处理子模块,用于对所述对象进行监控;第一获取子模块,用于获取所述对象的内存创建指令;根据所述内存创建指令在预设的内存信息列表中记录所述对象的创建信息。
在一些实施方式中,所述内存信息为记录有多个对象的创建信息和释放信息的内存信息列表;所述处理模块包括:第二获取子模块,用于从所述内存信息列表中提取对象的识别码;第二处理子模块,用于根据所述识别码判断所述内存信息列表中是否存在与所述识别码具有映射关系的释放信息。
在一些实施方式中,所述对象包括:第一对象和第二对象,其中,第二对象与第一对象嵌套;内存信息中第一对象和第二对象的创建信息呈树状排列;所述处理模块包括:第三获取子模块,用于获取所述第一对象的信息;第三处理子模块,用于根据所述第一对象的信息从所述内存信息中获取与所述第一对象嵌套的所有的第二对象的信息;第四处理子模块,用于判断所述第二对象中是否存在没有释放信息的对象。
在一些实施方式中,所述执行模块包括:第三获取子模块,用于获取所述目标对象的识别码;第四处理子模块,用于判断所述目标对象是否为单例对象;第一执行子模块,用于当所述目标对象不是单例对象时,确定所述目标对象为内存泄露的对象。
在一些实施方式中,,所述第四处理子模块包括:第五处理子模块,用于根据所述识别码在所述内存信息中查找所述目标对象的对象信息;第六处理子模块,用于判断所述对象信息中是否具有单例标记。
为解决上述技术问题,本发明实施例还提供计算机设备。具体请参阅图7,图7为本实施例计算机设备基本结构框图。
如图7所示,计算机设备的内部结构示意图。如图7所示,该计算机设备包括通过***总线连接的处理器、非易失性存储介质、存储器和网络接口。其中,该计算机设备的非易失性存储介质存储有操作***、数据库和计算机可读指令,数据库中可存储有控件信息序列,该计算机可读指令被处理器执行时,可使得处理器实现一种内存泄露的定位方法。该计算机设备的处理器用于提供计算和控制能力,支撑整个计算机设备的运行。该计算机设备的存储器中可存储有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器执行一种内存泄露的定位方法。该计算机设备的网络接口用于与终端连接通信。本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本实施方式中处理器用于执行图6中获取模块2100、处理模块2200和执行模块2300的具体内容,存储器存储有执行上述模块所需的程序代码和各类数据。网络接口用于向用户终端或服务器之间的数据传输。本实施方式中的存储器存储有内存泄露的定位方法中执行所有子模块所需的程序代码及数据,服务器能够调用服务器的程序代码及数据执行所有子模块的功能。
计算机设备通过获取目标对象的内存信息,并在内存信息中判断是否存在与目标内存的创建记录对应的释放记录,当不存在时,即可确认该目标对象内存没有被释放掉,为内存泄露对象,该方法只需要记录内存的创建记录和释放记录即可查询,方法简单,通过对内存信息进行可视化设置还可以直观的查询内存的占用情况。
本发明还提供一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述任一实施例所述内存泄露的定位方法的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种内存泄露的定位方法,其特征在于,包括:
获取被监控的对象的内存信息,其中,所述内存信息包括多个对象的内存的创建信息;
判断所述多个对象的创建信息是否都具有对应的释放信息;
当存在没有对应的释放信息的目标对象时,确定所述目标对象为内存泄露的对象。
2.根据权利要求1所述的内存泄露的定位方法,其特征在于,所述获取被监控的对象的内存信息之前,还包括:
对所述对象进行监控;
获取所述对象的内存创建指令;
根据所述内存创建指令在预设的内存信息列表中记录所述对象的创建信息。
3.根据权利要求1所述的内存泄露的定位方法,其特征在于,所述内存信息为记录有多个对象的创建信息和释放信息的内存信息列表;所述判断所述多个对象的创建信息是否都具有对应的释放信息,包括:
从所述内存信息列表中提取对象的识别码;
根据所述识别码判断所述内存信息列表中是否存在与所述识别码具有映射关系的释放信息。
4.根据权利要求1所述的内存泄露的定位方法,其特征在于,所述对象包括:第一对象和第二对象,其中,第二对象与第一对象嵌套;内存信息中第一对象和第二对象的创建信息呈树状排列;所述判断所述多个对象的创建信息是否都具有对应的释放信息,包括:
获取所述第一对象的信息;
根据所述第一对象的信息从所述内存信息中获取与所述第一对象嵌套的所有的第二对象的信息;
判断所述第二对象中是否存在没有释放信息的对象。
5.根据权利要求1所述的内存泄露的定位方法,其特征在于,所述确定所述目标对象为内存泄露的对象,包括:
获取所述目标对象的识别码;
判断所述目标对象是否为单例对象;
当所述目标对象不是单例对象时,确定所述目标对象为内存泄露,的对象。
6.根据权利要求5所述的内存泄露的定位方法,其特征在于,所述判断所述目标对象是否为单例对象,包括:
根据所述识别码在所述内存信息中查找所述目标对象的对象信息;
判断所述对象信息中是否具有单例标记。
7.一种内存泄露的定位装置,其特征在于,包括:
获取模块,用于获取被监控的对象的内存信息,其中,所述内存信息包括多个对象的内存的创建信息;
处理模块,用于判断所述多个对象的创建信息是否都具有对应的释放信息;
执行模块,用于当存在没有对应的释放信息的目标对象时,确定所述目标对象为内存泄露的对象。
8.根据权利要求7所述的内存泄露的定位装置,其特征在于,还包括:
第一处理子模块,用于对所述对象进行监控;
第一获取子模块,用于获取所述对象的内存创建指令;
根据所述内存创建指令在预设的内存信息列表中记录所述对象的创建信息。
9.一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行如权利要求1至6中任一项权利要求所述内存泄露的定位方法的步骤。
10.一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如权利要求1至6中任一项权利要求所述内存泄露的定位方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910199036.XA CN110083525A (zh) | 2019-03-15 | 2019-03-15 | 内存泄露的定位方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910199036.XA CN110083525A (zh) | 2019-03-15 | 2019-03-15 | 内存泄露的定位方法、装置、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110083525A true CN110083525A (zh) | 2019-08-02 |
Family
ID=67412492
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910199036.XA Pending CN110083525A (zh) | 2019-03-15 | 2019-03-15 | 内存泄露的定位方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110083525A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110851281A (zh) * | 2019-11-13 | 2020-02-28 | 北京无限光场科技有限公司 | 检测内存泄漏的方法、服务器、终端、***及存储介质 |
CN111309507A (zh) * | 2020-02-13 | 2020-06-19 | 支付宝(杭州)信息技术有限公司 | 内存泄露的检测方法、装置和机器可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339535A (zh) * | 2008-08-21 | 2009-01-07 | 金蝶软件(中国)有限公司 | 一种对应用程序进行性能监控的方法及装置 |
CN102866947A (zh) * | 2012-08-29 | 2013-01-09 | 深圳市共进电子股份有限公司 | 一种Linux内核内存泄漏的检测方法 |
CN103514026A (zh) * | 2013-09-27 | 2014-01-15 | 摩卡软件(天津)有限公司 | 一种通过javascript直接调用java api的方法 |
CN105701034A (zh) * | 2014-12-14 | 2016-06-22 | 上海兆芯集成电路有限公司 | 基于内存访问类型以分路来分配的快取内存 |
CN106776342A (zh) * | 2017-01-03 | 2017-05-31 | 百度在线网络技术(北京)有限公司 | 一种对移动应用的内存对象进行分析的方法和装置 |
CN107562586A (zh) * | 2017-08-16 | 2018-01-09 | 努比亚技术有限公司 | 一种内存检测方法、设备及计算机存储介质 |
-
2019
- 2019-03-15 CN CN201910199036.XA patent/CN110083525A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339535A (zh) * | 2008-08-21 | 2009-01-07 | 金蝶软件(中国)有限公司 | 一种对应用程序进行性能监控的方法及装置 |
CN102866947A (zh) * | 2012-08-29 | 2013-01-09 | 深圳市共进电子股份有限公司 | 一种Linux内核内存泄漏的检测方法 |
CN103514026A (zh) * | 2013-09-27 | 2014-01-15 | 摩卡软件(天津)有限公司 | 一种通过javascript直接调用java api的方法 |
CN105701034A (zh) * | 2014-12-14 | 2016-06-22 | 上海兆芯集成电路有限公司 | 基于内存访问类型以分路来分配的快取内存 |
CN106776342A (zh) * | 2017-01-03 | 2017-05-31 | 百度在线网络技术(北京)有限公司 | 一种对移动应用的内存对象进行分析的方法和装置 |
CN107562586A (zh) * | 2017-08-16 | 2018-01-09 | 努比亚技术有限公司 | 一种内存检测方法、设备及计算机存储介质 |
Non-Patent Citations (2)
Title |
---|
徐正威;周琼;许珂;韩海;: "浅谈Java与C++中的内存管理", 网络安全技术与应用, no. 03, pages 50 - 51 * |
葛瑶;李晓风;孔德光;: "基于红黑树的堆内存泄漏动态检测技术", 计算机工程, no. 16, pages 165 - 167 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110851281A (zh) * | 2019-11-13 | 2020-02-28 | 北京无限光场科技有限公司 | 检测内存泄漏的方法、服务器、终端、***及存储介质 |
CN111309507A (zh) * | 2020-02-13 | 2020-06-19 | 支付宝(杭州)信息技术有限公司 | 内存泄露的检测方法、装置和机器可读存储介质 |
CN111309507B (zh) * | 2020-02-13 | 2022-05-10 | 支付宝(杭州)信息技术有限公司 | 内存泄露的检测方法、装置和机器可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110096437A (zh) | 微服务架构的测试方法及相关产品 | |
US11636090B2 (en) | Method and system for graph-based problem diagnosis and root cause analysis for IT operation | |
CN103562863A (zh) | 创建定义事件类型之间关系的相关规则 | |
CN109726091B (zh) | 一种日志管理方法及相关装置 | |
CN109542412A (zh) | 接口信息生成方法、装置、计算机设备和存储介质 | |
CN109120794B (zh) | 一种消息显示方法及装置和电子设备 | |
CN108416041A (zh) | 语音日志分析方法和*** | |
CN105243329B (zh) | Android***漏洞挖掘的方法及装置 | |
CN110083525A (zh) | 内存泄露的定位方法、装置、计算机设备及存储介质 | |
CN107911448A (zh) | 一种内容推送方法及装置 | |
CN109885474A (zh) | 测试用例编辑方法及装置、终端和计算机可读存储介质 | |
US20200073738A1 (en) | Error incident fingerprinting with unique static identifiers | |
CN109189668A (zh) | 接口测试方法、装置、计算机设备及存储介质 | |
CN106557300A (zh) | 一种野指针的函数栈信息确定方法、装置及电子设备 | |
CN108958969B (zh) | 数据库灾备方法、装置及灾备*** | |
CN106302107A (zh) | 预览即时通讯消息的方法及装置 | |
CN110532107A (zh) | 接口调用方法、装置、计算机设备及存储介质 | |
CN106682146B (zh) | 一种根据关键词检索景区评价的方法及*** | |
US9069874B2 (en) | Webpage content search method and system | |
CN108959046A (zh) | 一种信息处理方法、设备及装置 | |
CN105573756B (zh) | 一种脚本语言扩展方法及事件总线架构 | |
CN113468613A (zh) | 日志文件处理方法及装置 | |
CN110175276A (zh) | 侵权信息获取方法、装置、计算机设备及存储介质 | |
JP7173619B2 (ja) | 脆弱性情報管理装置、脆弱性情報管理方法、およびプログラム | |
CN112685247A (zh) | 基于Zabbix监控***的告警抑制方法及监控*** |
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 |