CN112463626A - 内存泄漏定位方法、装置、计算机设备及存储介质 - Google Patents
内存泄漏定位方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN112463626A CN112463626A CN202011436123.1A CN202011436123A CN112463626A CN 112463626 A CN112463626 A CN 112463626A CN 202011436123 A CN202011436123 A CN 202011436123A CN 112463626 A CN112463626 A CN 112463626A
- Authority
- CN
- China
- Prior art keywords
- calculation
- objects
- collection
- interface
- preset threshold
- 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.)
- Granted
Links
Images
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/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- 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/3636—Software debugging by tracing the execution of the program
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例公开一种内存泄漏定位方法、装置、计算机设备及存储介质。系统存在内存泄漏,调用对象计算接口对系统垃圾回收器跟踪的对象集中未执行归集计算的对象执行归集计算;若未执行归集计算的对象被执行归集计算的数量达到第一预设阈值,则停止执行归集计算,直至归集计算的停止时间达到第二预设阈值;若归集计算的停止时间达到第二预设阈值,则对未执行归集计算的对象执行归集计算,直至未执行归集计算的对象被执行归集计算的数量达到第一预设阈值;当确定对象集包括的对象已全部被执行归集计算,复制提供对象引用图的父进程生成对应的子进程;利用子进程调用关系获取接口,根据归集计算的结果生成内存泄漏源对应的第一对象的对象引用图。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种内存泄漏定位方法、装置、计算机设备及存储介质。
背景技术
Python是一种跨平台的计算机程序设计语言,最初用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,Python被广泛应用于独立的大型项目的开发,例如,游戏服务器的开发等。在利用Python开发的服务器运行过程中,可能会因为管理内存的引用计数产生的循环引用问题导致内存泄漏的情况,即程序中已分配的内存由于某种原因未被释放或无法被释放,造成服务器内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。在这种情况下,当开发人员通过调试内存等方法确定可能的内存泄漏源处的对象后,进一步调用相应的接口遍历Python内置的垃圾回收器跟踪的对象,获取以内存泄漏源处的对象为终点的对象引用图,从而使得开发人员根据对象引用图中展示的对象引用关系,确定引用内存泄漏源处对象的目标对象,以目标对象引用内存泄漏源处对象的依据定位发生内存泄漏的程序。
在对现有技术的研究和实践过程中,本发明的发明人发现,内存调试工具objgraph提供的所有接口的计算都是同步阻塞的,也就是说,处理接口计算并获取对象引用图的线程不能处理其他计算。而且当服务器出现内存泄漏时,垃圾回收器跟踪的对象也会较多,从而导致内存调试工具objgraph提供的接口的计算时间过长,服务器在长时间内无法响应其他请求,运行效率低下。
发明内容
本申请实施例提供一种内存泄漏定位方法、装置、计算机设备及存储介质,以在定位内存泄漏时系统可以正常工作,提升了系统的运行效率。
本申请实施例提供一种内存泄漏定位方法,包括:
当检测到系统存在内存泄漏时,调用对象计算接口对系统垃圾回收器跟踪的对象集中未执行归集计算的对象执行所述归集计算;
若未执行所述归集计算的对象被执行所述归集计算的数量达到第一预设阈值,则停止执行所述归集计算,直至所述归集计算的停止时间达到第二预设阈值;
若所述归集计算的停止时间达到所述第二预设阈值,则对未执行所述归集计算的对象执行所述归集计算,直至未执行所述归集计算的对象被执行所述归集计算的数量达到所述第一预设阈值;
当确定所述对象集包括的对象已全部被执行所述归集计算,复制提供对象引用图的父进程生成对应的子进程;
利用所述子进程调用关系获取接口,根据所述归集计算的结果生成内存泄漏源对应的第一对象的对象引用图。
相应的,本申请实施例还提供一种内存泄漏定位装置,包括:
第一计算单元,用于当检测到系统存在内存泄漏时,调用对象计算接口对系统垃圾回收器跟踪的对象集中未执行归集计算的对象执行所述归集计算;
停止单元,用于若未执行所述归集计算的对象被执行所述归集计算的数量达到第一预设阈值,则停止执行所述归集计算,直至所述归集计算的停止时间达到第二预设阈值;
第二计算单元,用于若所述归集计算的停止时间达到所述第二预设阈值,则对未执行所述归集计算的对象执行所述归集计算,直至未执行所述归集计算的对象被执行所述归集计算的数量达到所述第一预设阈值;
进程生成单元,用于当确定所述对象集包括的对象已全部被执行所述归集计算,复制提供对象引用图的父进程生成对应的子进程;
引用图生成单元,用于利用所述子进程调用关系获取接口,根据所述归集计算的结果生成内存泄漏源对应的第一对象的对象引用图。
可选的,所述对象计算接口包括对象个数计算接口、对象获取接口和对象类型排列接口。
可选的,所述第一计算单元还用于调用所述对象个数计算接口,计算所述对象集中未执行所述归集计算的对象所属的系统类型包括的对象个数;
调用所述对象类型排列接口,根据包括的对象个数排列所述系统类型,生成系统类型列表;
调用所述对象获取接口,根据所述系统类型列表确定目标系统类型,获取所述目标系统类型包括的对象信息。
可选的,所述引用图生成单元还用于接收用户根据所述目标系统类型包括的对象信息设置的所述内存泄漏源对应的所述第一对象;
利用所述子进程调用所述关系获取接口,遍历所述系统垃圾回收器跟踪的所述对象集,确定引用所述第一对象的目标对象;
根据所述目标对象和所述第一对象的引用关系生成所述对象引用图。
可选的,所述目标对象包括第一目标对象和第二目标对象,所述第一目标对象直接引用所述第一对象,所述第二目标对象引用所述第一目标对象。
可选的,所述对象引用图包括起始对象和终止对象,所述起始对象为至少一所述第二目标对象,所述终止对象为所述第一对象。
可选的,所述装置还用于根据所述对象引用图获取引用所述第一对象的目标对象和所述目标对象引用所述第一对象的途径;
根据所述目标对象引用所述第一对象的途径定位存在所述内存泄漏的系统代码。
可选的,所述第一计算单元还用于调用所述对象个数计算接口,获取所述对象集中未执行所述归集计算的对象信息;
根据所述对象集中未执行所述归集计算的对象信息确定所述系统类型;
计算所述系统类型包括的对象个数。
可选的,所述第一计算单元还用于在所述系统类型列表中,确定所述对象个数超过第三预设阈值的系统类型为所述目标系统类型。
同样的,本申请实施例还提供一种计算机设备,包括:
存储器,用于存储计算机程序;
处理器,用于在执行所述内存泄漏定位方法任一项的步骤。
此外,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现内存泄漏定位方法任一项的步骤。
本申请实施例提供一种内存泄漏定位方法、装置、计算机设备及存储介质,当检测到系统内存在内存泄漏时,一方面,调用对象计算接口分批对系统垃圾回收器跟踪的对象集执行归集计算,即,在对象集里的未执行归集计算的对象中,每次选取数量为第一预设阈值的对象执行归集计算,接着在第二预设阈值的时间内停止归集计算,使得对象计算接口可以在停止的时间内执行其他计算,避免其他计算请求等待时间过长;另一方面,复制提供对象引用图的父进程生成对应的子进程,利用子进程调用关系获取接口生成对象引用图,在此期间,父进程处理其他计算请求。本申请实施例在两个方面改善系统处理其他计算请求的等待时间,避免系统垃圾回收器跟踪的对象数量较多而延长系统响应时间,使得系统定位内存泄漏时可以正常工作,提升了系统的运行效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的内存泄漏定位装置的系统示意图;
图2是本申请实施例提供的内存泄漏定位方法的流程示意图;
图3是本申请实施例提供的内存泄漏定位方法的另一流程示意图;
图4是本申请实施例提供的内存泄漏定位装置的结构示意图;
图5是本申请实施例提供的计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请实施例提供一种内存泄漏定位方法、装置、计算机设备及存储介质。具体地,本申请实施例的内存泄漏定位方法可以由计算机设备执行,其中,该计算机设备可以为终端或者服务器等设备。该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机(Personal Computer,PC)、个人数字助理(Personal Digital Assistant,PDA)等终端设备,终端还可以包括客户端,该客户端可以是游戏应用客户端、携带有游戏程序的浏览器客户端或即时通信客户端等。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络服务、以及大数据和人工智能平台等基础云计算服务的云服务器。
请参阅图1,图1为本申请实施例提供的内存泄漏定位装置的系统示意图。该系统可以包括至少一个游戏服务器,该游戏服务器由python语言开发。当检测到游戏服务器系统存在内存泄漏时,调用对象计算接口对系统垃圾回收器跟踪的对象集中未执行归集计算的对象执行所述归集计算;若未执行归集计算的对象被执行归集计算的数量达到第一预设阈值,则停止执行归集计算,直至归集计算的停止时间达到第二预设阈值;若归集计算的停止时间达到第二预设阈值,则对未执行归集计算的对象执行归集计算,直至未执行归集计算的对象被执行归集计算的数量达到第一预设阈值;当确定对象集包括的对象已全部被执行归集计算,复制提供对象引用图的父进程生成对应的子进程;利用子进程调用关系获取接口,根据归集计算的结果生成内存泄漏源对应的第一对象的对象引用图。
以下分别进行详细说明。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
本实施例将从内存泄漏定位装置的角度进行描述,该内存泄漏定位装置具体可以集成在终端中,该终端可以包括智能手机、笔记本电脑、平板电脑以及个人计算机等设备。
本申请实施例提供的一种内存泄漏定位方法,该方法可以由终端的处理器执行,如图2所示,该内存泄漏定位方法的具体流程可以如下:
步骤201、当检测到系统存在内存泄漏时,调用对象计算接口对系统垃圾回收器跟踪的对象集中未执行归集计算的对象执行归集计算。
在一种实施方式中,若终端出现运行速度缓慢或者系统发生崩溃等现象时,可以检测系统是否存在内存泄漏,若检测到系统程序中已经分配的内存由于引用计数带来的循环引用等原因未被释放或者无法被释放,则表明终端系统出现内存泄漏。
在一种实施方式中,引用计数是计算机编程语言中的一种内存管理技术,是指将资源的被引用次数保存起来,该资源可以是对象、内存或磁盘空间等等,当资源的被引用次数变为零时就将该资源占据的内存释放的过程。也就是说,当对象A被引用时,对象A的引用次数加一,当引用对象A的对象销毁时,对象A的引用次数减一,若对象A的引用次数为零,则释放对象A占据的内存。其中,引用计数带来的循环引用指两个对象相互引用,具体而言,对象A引用对象B一次,记对象B的引用次数为1,对象B引用对象A一次,将对象A的引用次数也记为1,若要销毁对象A,从而释放对象A占据的内存,则需要对象B销毁,使得对象A的引用次数为零,但对象B销毁的前提是对象A销毁,使得对象B的引用次数为零,因此,对象A和对象B相互等待,出现循环引用而无法释放内存。
在一些实施例中,利用python开发的终端系统包括很多对象,每个对象都属于一个类型,每个类型都具有一个名称属性,即类名。每个系统类型包括至少一个对象。
在本申请的一个或多个实施例中,上述步骤201中“调用对象计算接口,对系统垃圾回收器跟踪的对象集中未执行归集计算的对象执行归集计算”可通过如下步骤S2011至步骤S2013实现:
步骤S2011:调用对象个数计算接口,计算对象集中未执行归集计算的对象所属的系统类型包括的对象个数。
在本申请实施例中,对象个数计算接口是由内存调试工具objgraph提供的一种接口或函数,用于计算终端的每个系统类型所包括的对象个数。因此,当开启内存调试工具objgraph后,可以通过调用对象个数计算接口,从而计算对象集中未执行归集计算的对象所属的系统类型包括的对象个数。为了计算机程序的可读性,在本申请实施例中,对象个数计算接口通常使用count(P11,P21,…,Pn1)命名,其中,P11,P21,…,Pn1为参数。
步骤S2012:调用对象类型排列接口,根据包括的对象个数排列系统类型,生成系统类型列表。
在本申请实施例中,对象类型排列接口由内存调试工具objgraph提供的一种接口或函数,用于根据相应的排序规则排列终端的每个系统类型,并将排列得到的系统类型序列生成系统类型列表,该系统类型列表可以利用系统类名来标识每个系统类型。为了计算机程序的可读性,在本申请实施例中,对象类型排列接口通常使用most_common_types(P21,P22,…,P2m)命名,其中,P21,P22,…,P2m为参数。
在本申请实施例中,上述系统类型的排序规则不受限制,可以根据实际情况灵活设置,该排序规则可以是根据每个系统类型包括的对象个数从大到小排列,可以是根据每个系统类型包括的对象个数从小到大排列,也可以是根据每个系统类型的重要程度排列等等。
步骤S2013:调用对象获取接口,根据系统类型列表确定目标系统类型,获取目标系统类型包括的对象信息。
在本申请实施例中,对象获取接口由内存调试工具objgraph提供的一种接口或函数,用于获取终端的每个系统类型包括的各个对象的对象信息,其中,对象信息可以包括对象标识、对象名称、和/或该对象与其他对象的引用关系等等,为了计算机程序的可读性,在本申请实施例中,对象获取接口通常用by_type(P31,P32,…,P3t)命名,其中,P31,P32,…,P3t为参数。
在一种实施方式中,上述步骤S2011中“调用对象个数计算接口,计算对象集中未执行归集计算的对象所属的系统类型包括的对象个数”可通过如下步骤S20111至步骤S20113实现:
步骤S20111:调用对象个数计算接口,获取对象集中未执行归集计算的对象信息;
在本申请实施例中,上述步骤S20111中的“对象信息”可以是对象标识、对象名称、和/或该对象所属的系统类型等等。
步骤S20112:根据对象集中未执行归集计算的对象信息确定系统类型;
步骤S20113:计算系统类型包括的对象个数。
在本申请的一种实施方式中,上述步骤S2013中“根据系统类型列表确定目标系统类型”,可以是:
在系统类型列表中,确定对象个数超过第三预设阈值的系统类型为目标系统类型。
其中,第三预设阈值的设置不受限制,可以根据实际情况灵活设置。当系统类型包括的对象个数超过第三预设阈值时,表明该系统类型包括的对象存在内存泄漏的可能。
例如,当检测到系统中存在较多已经分配的内存无法释放的情况时,终端首先调用内存调试工具objgraph提供的对象个数计算接口获取系统垃圾回收器跟踪的所有对象中未执行归集计算的对象信息,根据获取的对象信息确定未执行归集计算的对象所属的系统类型,计算每个系统类型包括的对象个数,其中,未执行归集计算的对象即为未经过系统调用的对象计算接口处理的对象;然后,终端调用内存调试工具objgraph提供的对象类型排列接口获取对象个数计算接口返回的每个系统类型包括的对象个数,按照包括的对象个数从大到小的顺序排列对应的系统类型,生成系统类型列表,在该系统类型列表中,利用系统类型对应的类名来标识不同的系统类型;接着,终端调用内存调试工具objgraph提供的对象获取接口获取对象类型排列接口返回的系统类型列表,确定该系统类型列表按照包括的对象个数从大到小的顺序排列系统类型,对象获取接口在系统类型列表中,从前往后比较系统类型包括的对象个数与第三预设阈值的大小,获取包括的对象个数超过第三预设阈值的系统类型作为目标系统类型,进一步获取目标系统类型包括的对象信息。
在本申请的实施例中,上述步骤S20111中“获取对象集中未执行归集计算的对象信息”,可以是:
从未执行归集计算的对象中获取数量为第一预设阈值的对象信息;或
获取对象集中全部未执行归集计算的对象信息。
例如,终端调用对象个数计算接口,确定对象集中未执行归集计算的对象后,可以从中选择数量为第一预设阈值的对象获取其对象信息,从而根据获取的对象信息确定系统类型,下一次执行归集计算时,再一次从未执行归集计算的对象中选择数量为第一预设阈值的对象获取其对象信息,直至所有的对象信息获取完毕;也可以获取全部的未执行归集计算的对象信息,然后,根据从中选择的数量为第一预设阈值的对象信息确定系统类型,下一次执行归集计算时,再一次选择数量为第一预设阈值的对象信息确定系统类型,直至根据所有的对象信息确定了所有的系统类型。
在一种实施方式中,系统垃圾回收器是python内置的垃圾回收器,用于解决引用计数带来的循环引用问题,从而使得系统中已分配的内存可以被释放。
步骤202、若未执行归集计算的对象被执行归集计算的数量达到第一预设阈值,则停止执行归集计算,直至归集计算的停止时间达到第二预设阈值。
在一些实施例中,确定归集计算的停止时间包括但不限于以下的方式:
(1)用计时器等计时装置记录归集计算的停止时间;
(2)记录终端停止归集计算的帧数,结合计算确定的帧率或系统默认的帧率,计算帧数和帧率的乘积,或者,计算帧数与帧长的乘积,得出终端停止归集计算的停止时间。
在一种实施方式中,第一预设阈值和第二预设阈值的设定不受限制,可以根据实际情况灵活设置。
具体的,当系统调用对象计算接口对未执行归集计算的对象执行归集计算时,终端启动计数器等计数装置,每当对象计算接口对一个未执行归集计算的对象执行完归集计算后,终端控制该计数装置记录已执行归集计算的对象个数加一,当计数装置启动后,记录未执行归集计算的对象被执行归集计算的数量达到第一预设阈值时,终端停止对未执行归集计算的对象执行归集计算,并且关闭计数装置。此时,终端启动计时器等计时装置,利用计时装置记录停止执行归集计算的停止时间,当终端停止执行归集计算的停止时间达到第二预设阈值时,关闭计时装置,执行步骤203,重新开始调用对象计算接口对剩余未执行归集计算的对象执行归集计算。
在一种实施方式中,当终端停止执行归集计算后,终端可以调用对象计算接口处理其他计算请求,避免其他计算请求等待时间过长,使得系统在执行归集计算期间,还可以工作。
步骤203、若归集计算的停止时间达到第二预设阈值,则对未执行归集计算的对象执行归集计算,直至未执行归集计算的对象被执行归集计算的数量达到第一预设阈值。
具体的,当终端停止执行归集计算的停止时间达到第二预设阈值时,重新开始调用对象计算接口对剩余未执行归集计算的对象执行归集计算,此时,终端重新启动计数器等计数装置,记录未执行归集计算的对象被执行归集计算的数量达到第一预设阈值时,返回执行步骤202,停止对未执行归集计算的对象执行归集计算。
在一些实施例中,终端每次利用计数装置记录未执行归集计算的对象被执行归集计算的数量达到的第一预设阈值可以是一个固定值,也可以是一个变化的值,若第一预设阈值是一个变化的值,则第一预设阈值的变化可以是有规律的,例如,当前记录的第一预设阈值比上一次记录的第一预设阈值减少一个定量等等,第一预设阈值的变化也可以是无规律的,例如,当前记录的第一预设阈值可以和上一次记录的第一预设阈值相同,也可以和上一次记录的第一预设阈值不同等等。
同样的,终端每次停止执行归集计算的停止时间达到的第二预设阈值可以是一个固定值,也可以是一个变化的值,若第二预设阈值是一个变化的值,则第二预设阈值的变化可以是有规律的,也可以是无规律的。
步骤204、当确定对象集包括的对象已全部被执行归集计算,复制提供对象引用图的父进程生成对应的子进程。
在一些实施例中,利用fork函数复制提供对象引用图的父进程,生成对应的子进程,父进程和生成的子进程共享父进程的数据空间、堆、和栈等资源,子进程和对应的父进程同时运行,两个进程都将执行系统调用fork函数之后的下一条指令,子进程和父进程使用相同的pc(Program Counter,程序计数器),相同的CPU(Central Processing Unit,中央处理器)寄存器,和父进程打开相同的文件。其中,fork函数又称复刻函数、派生函数、或分支函数,是UNIX操作系统或类UNIX操作系统中的分叉函数。
例如,当终端确定垃圾回收器跟踪的对象集包括的对象全部被执行归集计算后,终端创建提供对象引用图的进程,将该进程作为父进程,调用fork函数复制父进程生成相应的子进程。
步骤205、利用子进程调用关系获取接口,根据归集计算的结果生成内存泄漏源对应的第一对象的对象引用图。
在一种实施方式中,关系获取接口是由内存调试工具objgraph提供的一种接口或函数,用于根据用户输入的指定对象,确定系统垃圾回收器跟踪的对象集中直接或间接引用该指定对象的对象,并且画出该指定对象的对象引用图,为了计算机程序的可读性,在本申请实施例中,关系获取接口通常用show_backrefs(P1,P2,…,Pn)命名,其中,P1,P2,…,Pn为参数。
在一些实施例中,上述步骤205中“利用子进程调用关系获取接口,根据归集计算的结果生成内存泄漏源对应的第一对象的对象引用图”可通过如下步骤S2051至步骤S2053实现:
步骤S2051:接收用户根据目标系统类型包括的对象信息设置的内存泄漏源对应的第一对象。
在本申请实施例中,用户获取对象获取接口返回的目标系统类型包括的对象信息之后,经过分析,指定目标系统类型包括的一个或多个对象作为内存泄漏源处对应的第一对象,终端获取该第一对象。
步骤S2052:利用子进程调用关系获取接口,遍历系统垃圾回收器跟踪的对象集,确定引用第一对象的目标对象。
在一种实施方式中,上述引用第一对象的目标对象包括以下两种形式:
(1)第一目标对象
第一目标对象直接引用第一对象,与第一对象具有直接引用关系,在对象引用图中与第一对象相邻。
(2)第二目标对象
第二目标对象间接引用第一对象,与第一对象具有间接引用关系,在对象引用图中与第一目标对象相邻。
在本申请实施例中,终端利用fork函数生成的子进程调用关系获取接口,遍历系统垃圾回收器跟踪的对象集,确定直接引用第一对象的第一目标对象,然后重新遍历系统垃圾回收器跟踪的对象集,确定直接引用第一目标对象的部分第二目标对象,以此类推,直至确定所有直接或间接引用第一目标对象的第二目标对象。
步骤S2053:根据目标对象和第一对象的引用关系生成对象引用图。
在一种实施方式中,上述对象引用图包括至少一个起始对象和至少一个终止对象,起始对象是至少一个第二目标对象,终止对象是第一对象。
在一种实施方式中,上述内存泄漏定位方法还包括:根据对象引用图获取引用第一对象的目标对象和目标对象引用第一对象的途径;根据目标对象引用第一对象的途径定位存在内存泄漏的系统代码。例如,用户获取终端显示的对象引用图,确定第一对象为对象A,对象B通过属性名attr1引用对象A,从而可以获取实现对象B引用对象A的系统代码,通过分析该系统代码,定位存在内存泄漏的系统代码。
本申请实施例提供的内存泄漏定位方法,利用终端检测到系统内存在内存泄漏时,一方面,调用对象计算接口分批对系统垃圾回收器跟踪的对象集执行归集计算,即,在对象集里的未执行归集计算的对象中,每次选取数量为第一预设阈值的对象执行归集计算,接着在第二预设阈值的时间内停止归集计算,使得对象计算接口可以在停止的时间内执行其他计算,避免其他计算请求等待时间过长;另一方面,复制提供对象引用图的父进程生成对应的子进程,利用子进程调用关系获取接口生成对象引用图,在此期间,父进程处理其他计算请求。本申请实施例在两个方面改善系统处理其他计算请求的等待时间,避免系统垃圾回收器跟踪的对象数量较多而延长系统响应时间,使得系统定位内存泄漏时可以正常工作,提升了系统的运行效率。
请参阅图3,图3为本申请实施例提供的内存泄漏定位方法的另一流程示意图。该方法的具体流程可以如下:
步骤301、检测到系统存在内存泄漏,调用对象个数计算接口,获取系统垃圾回收器跟踪的对象集中未执行归集计算的对象信息。
例如,终端确定系统存在内存泄漏,调用对象个数计算接口,获取系统垃圾回收器跟踪的对象集中未执行归集计算的所有对象的对象信息。
步骤302、计算对象集中未执行归集计算的对象所属的系统类型包括的对象个数。
例如,对象个数计算接口根据获取的对象集中未执行归集计算的对象信息确定系统类型,然后计算每个系统类型包括的对象个数。
步骤303、调用对象类型排列接口,根据包括的对象个数排列系统类型,生成系统类型列表。
例如,调用对象类型排列接口获取对象个数计算接口返回的每个系统类型包括的对象个数,按照包括的对象个数从大到小的顺序排列对应的系统类型,生成系统类型列表。
步骤304、调用对象获取接口,根据系统类型列表确定目标系统类型,获取目标系统类型包括的对象信息。
例如,终端调用内存调试工具objgraph提供的对象获取接口获取对象类型排列接口返回的系统类型列表,对象获取接口在系统类型列表中,获取包括的对象个数超过第三预设阈值的系统类型作为目标系统类型,进一步获取目标系统类型包括的对象信息。
步骤305、执行归集计算的对象数量是否达到第一预设阈值。
例如,终端利用计数装置确定一次执行归集计算的对象数量达到第一预设阈值时,执行步骤306。若确定一次执行归集计算的对象数量未达到第一预设阈值时,执行步骤302。
步骤306、停止执行归集计算。
步骤307、归集计算的停止时间是否达到第二预设阈值。
例如,终端利用计时装置确定归集计算的停止时间达到第二预设阈值时,执行步骤308。若确定归集计算的停止时间未达到第二预设阈值,执行步骤306。
步骤308、确定对象集包括的对象是否全部被执行归集计算。
例如,若终端确定对象集包括的对象全部被执行归集计算,执行步骤309。若对象集包括的对象未全部被执行归集计算,执行步骤302。
步骤309、复制提供对象引用图的父进程生成对应的子进程。
步骤310、利用子进程调用关系获取接口,生成内存泄漏源对应的第一对象的对象引用图。
例如,利用子进程调用关系获取接口,确定直接或间接引用第一对象的第一目标对象和第二目标对象,根据第一目标对象和第二目标对象对第一对象的引用关系,生成对象引用图。
本申请实施例提供的内存泄漏定位方法,利用终端检测到系统内存在内存泄漏时,一方面,调用对象计算接口分批对系统垃圾回收器跟踪的对象集执行归集计算,即,在对象集里的未执行归集计算的对象中,每次选取数量为第一预设阈值的对象执行归集计算,接着在第二预设阈值的时间内停止归集计算,使得对象计算接口可以在停止的时间内执行其他计算,避免其他计算请求等待时间过长;另一方面,复制提供对象引用图的父进程生成对应的子进程,利用子进程调用关系获取接口生成对象引用图,在此期间,父进程处理其他计算请求。本申请实施例在两个方面改善系统处理其他计算请求的等待时间,避免系统垃圾回收器跟踪的对象数量较多而延长系统响应时间,使得系统定位内存泄漏时可以正常工作,提升了系统的运行效率。
为便于更好的实施本申请实施例的内存泄漏定位方法,本申请实施例还提供一种内存泄漏定位装置。请参阅图4,图4为本申请实施例提供的内存泄漏定位装置的结构示意图。该内存泄漏定位装置可以包括第一计算单元401、停止单元402、第二计算单元403、进程生成单元404和引用图生成单元405。
其中,第一计算单元401,用于当检测到系统存在内存泄漏时,调用对象计算接口对系统垃圾回收器跟踪的对象集中未执行归集计算的对象执行所述归集计算;
停止单元402,用于若未执行所述归集计算的对象被执行所述归集计算的数量达到第一预设阈值,则停止执行所述归集计算,直至所述归集计算的停止时间达到第二预设阈值;
第二计算单元403,用于若所述归集计算的停止时间达到所述第二预设阈值,则对未执行所述归集计算的对象执行所述归集计算,直至未执行所述归集计算的对象被执行所述归集计算的数量达到所述第一预设阈值;
进程生成单元404,用于当确定所述对象集包括的对象已全部被执行所述归集计算,复制提供对象引用图的父进程生成对应的子进程;
引用图生成单元405,用于利用所述子进程调用关系获取接口,根据所述归集计算的结果生成内存泄漏源对应的第一对象的对象引用图。
可选的,所述对象计算接口包括对象个数计算接口、对象获取接口和对象类型排列接口。
可选的,所述第一计算单元401还用于调用所述对象个数计算接口,计算所述对象集中未执行所述归集计算的对象所属的系统类型包括的对象个数;
调用所述对象类型排列接口,根据包括的对象个数排列所述系统类型,生成系统类型列表;
调用所述对象获取接口,根据所述系统类型列表确定目标系统类型,获取所述目标系统类型包括的对象信息。
可选的,所述引用图生成单元405还用于接收用户根据所述目标系统类型包括的对象信息设置的所述内存泄漏源对应的所述第一对象;
利用所述子进程调用所述关系获取接口,遍历所述系统垃圾回收器跟踪的所述对象集,确定引用所述第一对象的目标对象;
根据所述目标对象和所述第一对象的引用关系生成所述对象引用图。
可选的,所述目标对象包括第一目标对象和第二目标对象,所述第一目标对象直接引用所述第一对象,所述第二目标对象引用所述第一目标对象。
可选的,所述对象引用图包括起始对象和终止对象,所述起始对象为至少一所述第二目标对象,所述终止对象为所述第一对象。
可选的,所述装置还用于根据所述对象引用图获取引用所述第一对象的目标对象和所述目标对象引用所述第一对象的途径;
根据所述目标对象引用所述第一对象的途径定位存在所述内存泄漏的系统代码。
可选的,所述第一计算单元401还用于调用所述对象个数计算接口,获取所述对象集中未执行所述归集计算的对象信息;
根据所述对象集中未执行所述归集计算的对象信息确定所述系统类型;
计算所述系统类型包括的对象个数。
可选的,所述第一计算单元401还用于在所述系统类型列表中,确定所述对象个数超过第三预设阈值的系统类型为所述目标系统类型。
本申请实施例提供的内存泄漏定位装置,当检测到系统内存在内存泄漏时,一方面,通过第一计算单元401调用对象计算接口分批对系统垃圾回收器跟踪的对象集执行归集计算,然后,通过停止单元402和第二计算单元403在对象集里的未执行归集计算的对象中,每次选取数量为第一预设阈值的对象执行归集计算,接着在第二预设阈值的时间内停止归集计算,使得对象计算接口可以在停止的时间内执行其他计算,避免其他计算请求等待时间过长;另一方面,通过进程生成单元404复制提供对象引用图的父进程生成对应的子进程,通过引用图生成单元405利用子进程调用关系获取接口生成对象引用图,在此期间,父进程处理其他计算请求。本申请实施例在两个方面改善系统处理其他计算请求的等待时间,避免系统垃圾回收器跟踪的对象数量较多而延长系统响应时间,使得系统定位内存泄漏时可以正常工作,提升了系统的运行效率。
相应的,本申请实施例还提供一种计算机设备,该计算机设备可以为终端,该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机、个人数字助理等终端设备。如图5所示,图5为本申请实施例提供的计算机设备的结构示意图。该计算机设备600包括有一个或者一个以上处理核心的处理器601、有一个或一个以上计算机可读存储介质的存储器602及存储在存储器602上并可在处理器上运行的计算机程序。其中,处理器601与存储器602电性连接。本领域技术人员可以理解,图中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
处理器601是计算机设备600的控制中心,利用各种接口和线路连接整个计算机设备600的各个部分,通过运行或加载存储在存储器602内的软件程序和/或模块,以及调用存储在存储器602内的数据,执行计算机设备600的各种功能和处理数据,从而对计算机设备600进行整体监控。
在本申请实施例中,计算机设备600中的处理器601会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器602中,并由处理器601来运行存储在存储器602中的应用程序,从而实现各种功能:
当检测到系统存在内存泄漏时,调用对象计算接口对系统垃圾回收器跟踪的对象集中未执行归集计算的对象执行归集计算;
若未执行归集计算的对象被执行归集计算的数量达到第一预设阈值,则停止执行归集计算,直至归集计算的停止时间达到第二预设阈值;
若归集计算的停止时间达到第二预设阈值,则对未执行归集计算的对象执行归集计算,直至未执行归集计算的对象被执行归集计算的数量达到第一预设阈值;
当确定对象集包括的对象已全部被执行归集计算,复制提供对象引用图的父进程生成对应的子进程;
利用所述子进程调用关系获取接口,根据归集计算的结果生成内存泄漏源对应的第一对象的对象引用图。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
可选的,如图5所示,计算机设备600还包括:触控显示屏603、射频电路604、音频电路605、输入单元606以及电源607。其中,处理器601分别与触控显示屏603、射频电路604、音频电路605、输入单元606以及电源607电性连接。本领域技术人员可以理解,图5中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
触控显示屏603可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏603可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及计算机设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器601,并能接收处理器601发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器601以确定触摸事件的类型,随后处理器601根据触摸事件的类型在显示面板上提供相应的视觉输出。在本申请实施例中,可以将触控面板与显示面板集成到触控显示屏603而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏603也可以作为输入单元606的一部分实现输入功能。
在本申请实施例中,通过处理器601执行直播应用程序在触控显示屏603上生成直播用户界面,直播用户界面上的虚拟场景中包含直播的实时画面、至少一个内嵌游戏的启动标志性图标、至少一个互动商品的标志性图标和内嵌游戏客户端的页面等,内嵌游戏客户端的页面中包含执行内嵌游戏应用程序在触控显示屏603上生成的游戏用户界面,游戏用户界面中的虚拟场景中包含至少一个技能控制区域,技能控制区域中包含至少一个技能控件。该触控显示屏603用于呈现直播用户界面、游戏用户界面以及接收用户作用于直播用户界面和游戏用户界面产生的操作指令。
射频电路604可用于收发射频信号,以通过无线通信与网络设备或其他计算机设备建立无线通讯,与网络设备或其他计算机设备之间收发信号。
音频电路605可以用于通过扬声器、传声器提供用户与计算机设备之间的音频接口。音频电路605可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路605接收后转换为音频数据,再将音频数据输出处理器601处理后,经射频电路604以发送给比如另一计算机设备,或者将音频数据输出至存储器602以便进一步处理。音频电路605还可能包括耳塞插孔,以提供外设耳机与计算机设备的通信。
输入单元606可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
电源607用于给计算机设备1000的各个部件供电。可选的,电源607可以通过电源管理系统与处理器601逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源607还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管图5中未示出,计算机设备600还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
由上可知,本实施例提供的计算机设备,当检测到系统存在内存泄露时,分批对系统垃圾回收器跟踪的所有对象执行轨迹计算,归集计算的过程为首先调用内存调试工具objgraph提供的对象个数计算接口获取系统垃圾回收器跟踪的所有对象中未执行归集计算的对象信息,根据获取的对象信息确定未执行归集计算的对象所属的系统类型,计算每个系统类型包括的对象个数;然后,调用内存调试工具objgraph提供的对象类型排列接口获取对象个数计算接口返回的每个系统类型包括的对象个数,按照包括的对象个数从大到小的顺序排列对应的系统类型,生成系统类型列表;接着,终端调用内存调试工具objgraph提供的对象获取接口获取对象类型排列接口返回的系统类型列表,获取包括的对象个数超过第三预设阈值的系统类型作为目标系统类型,进一步获取目标系统类型包括的对象信息。然后终端创建提供对象引用图的进程,将该进程作为父进程,调用fork函数复制父进程生成相应的子进程,利用子进程调用关系获取接口,根据归集计算的结果生成内存泄漏源对应的第一对象的对象引用图。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种直播云游戏商品互动方法中的步骤。例如,该计算机程序可以执行如下步骤:
当检测到系统存在内存泄漏时,调用对象计算接口对系统垃圾回收器跟踪的对象集中未执行归集计算的对象执行归集计算;
若未执行归集计算的对象被执行归集计算的数量达到第一预设阈值,则停止执行归集计算,直至归集计算的停止时间达到第二预设阈值;
若归集计算的停止时间达到第二预设阈值,则对未执行归集计算的对象执行归集计算,直至未执行归集计算的对象被执行归集计算的数量达到第一预设阈值;
当确定对象集包括的对象已全部被执行归集计算,复制提供对象引用图的父进程生成对应的子进程;
利用所述子进程调用关系获取接口,根据归集计算的结果生成内存泄漏源对应的第一对象的对象引用图。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(Read Only Memory,ROM)、随机存取记忆体(Random Access Memory,RAM)、磁盘或光盘等。
由于该存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种直播云游戏商品互动方法中的步骤,因此,可以实现本申请实施例所提供的任一种直播云游戏商品互动方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
以上对本申请实施例所提供的一种内存泄漏定位方法、装置、计算机设备及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想;本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例的技术方案的范围。
Claims (12)
1.一种内存泄漏定位方法,其特征在于,包括:
当检测到系统存在内存泄漏时,调用对象计算接口对系统垃圾回收器跟踪的对象集中未执行归集计算的对象执行所述归集计算;
若未执行所述归集计算的对象被执行所述归集计算的数量达到第一预设阈值,则停止执行所述归集计算,直至所述归集计算的停止时间达到第二预设阈值;
若所述归集计算的停止时间达到所述第二预设阈值,则对未执行所述归集计算的对象执行所述归集计算,直至未执行所述归集计算的对象被执行所述归集计算的数量达到所述第一预设阈值;
当确定所述对象集包括的对象已全部被执行所述归集计算,复制提供对象引用图的父进程生成对应的子进程;
利用所述子进程调用关系获取接口,根据所述归集计算的结果生成内存泄漏源对应的第一对象的对象引用图。
2.根据权利要求1所述的方法,其特征在于,所述对象计算接口包括对象个数计算接口、对象获取接口和对象类型排列接口。
3.根据权利要求2所述的方法,其特征在于,所述调用对象计算接口,对系统垃圾回收器跟踪的对象集中未执行归集计算的对象执行所述归集计算,包括:
调用所述对象个数计算接口,计算所述对象集中未执行所述归集计算的对象所属的系统类型包括的对象个数;
调用所述对象类型排列接口,根据包括的对象个数排列所述系统类型,生成系统类型列表;
调用所述对象获取接口,根据所述系统类型列表确定目标系统类型,获取所述目标系统类型包括的对象信息。
4.根据权利要求3所述的方法,其特征在于,所述利用所述子进程调用关系获取接口,根据所述归集计算的结果生成内存泄漏源对应的第一对象的对象引用图,包括:
接收用户根据所述目标系统类型包括的对象信息设置的所述内存泄漏源对应的所述第一对象;
利用所述子进程调用所述关系获取接口,遍历所述系统垃圾回收器跟踪的所述对象集,确定引用所述第一对象的目标对象;
根据所述目标对象和所述第一对象的引用关系生成所述对象引用图。
5.根据权利要求4所述的方法,其特征在于,所述目标对象包括第一目标对象和第二目标对象,所述第一目标对象直接引用所述第一对象,所述第二目标对象引用所述第一目标对象。
6.根据权利要求5所述的方法,其特征在于,所述对象引用图包括起始对象和终止对象,所述起始对象为至少一所述第二目标对象,所述终止对象为所述第一对象。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据所述对象引用图获取引用所述第一对象的目标对象和所述目标对象引用所述第一对象的途径;
根据所述目标对象引用所述第一对象的途径定位存在所述内存泄漏的系统代码。
8.根据权利要求3所述的方法,其特征在于,所述调用所述对象个数计算接口,计算所述对象集中未执行所述归集计算的对象所属的系统类型包括的对象个数,包括:
调用所述对象个数计算接口,获取所述对象集中未执行所述归集计算的对象信息;
根据所述对象集中未执行所述归集计算的对象信息确定所述系统类型;
计算所述系统类型包括的对象个数。
9.根据权利要求3所述的方法,其特征在于,所述根据所述系统类型列表确定目标系统类型,包括:
在所述系统类型列表中,确定所述对象个数超过第三预设阈值的系统类型为所述目标系统类型。
10.一种内存泄漏定位装置,其特征在于,包括:
第一计算单元,用于当检测到系统存在内存泄漏时,调用对象计算接口对系统垃圾回收器跟踪的对象集中未执行归集计算的对象执行所述归集计算;
停止单元,用于若未执行所述归集计算的对象被执行所述归集计算的数量达到第一预设阈值,则停止执行所述归集计算,直至所述归集计算的停止时间达到第二预设阈值;
第二计算单元,用于若所述归集计算的停止时间达到所述第二预设阈值,则对未执行所述归集计算的对象执行所述归集计算,直至未执行所述归集计算的对象被执行所述归集计算的数量达到所述第一预设阈值;
进程生成单元,用于当确定所述对象集包括的对象已全部被执行所述归集计算,复制提供对象引用图的父进程生成对应的子进程;
引用图生成单元,用于利用所述子进程调用关系获取接口,根据所述归集计算的结果生成内存泄漏源对应的第一对象的对象引用图。
11.一种计算机设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于在执行所述计算机程序时实现如权利要求1至9任一项所述内存泄漏定位方法中的步骤。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至9任一项所述内存泄漏定位方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011436123.1A CN112463626B (zh) | 2020-12-10 | 2020-12-10 | 内存泄漏定位方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011436123.1A CN112463626B (zh) | 2020-12-10 | 2020-12-10 | 内存泄漏定位方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112463626A true CN112463626A (zh) | 2021-03-09 |
CN112463626B CN112463626B (zh) | 2023-07-11 |
Family
ID=74801266
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011436123.1A Active CN112463626B (zh) | 2020-12-10 | 2020-12-10 | 内存泄漏定位方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112463626B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113419893A (zh) * | 2021-07-19 | 2021-09-21 | 网易(杭州)网络有限公司 | 内存泄漏查证方法、装置、电子设备和存储介质 |
Citations (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1990004829A2 (en) * | 1988-10-24 | 1990-05-03 | Eastman Kodak Company | Object-oriented, logic, and database programming tool |
WO1999000730A1 (en) * | 1997-06-26 | 1999-01-07 | Sun Microsystems, Inc. | Bounded-pause time garbage collection system and method including write barrier associated with a source instance of a partially relocated object |
US6622226B1 (en) * | 2000-07-31 | 2003-09-16 | Microsoft Corporation | Method and system for using a mark-list for garbage collection |
US6851114B1 (en) * | 2000-11-06 | 2005-02-01 | Sun Microsystems, Inc. | Method for improving the performance of safe language multitasking |
US20070136403A1 (en) * | 2005-12-12 | 2007-06-14 | Atsushi Kasuya | System and method for thread creation and memory management in an object-oriented programming environment |
US20070203960A1 (en) * | 2006-02-26 | 2007-08-30 | Mingnan Guo | System and method for computer automatic memory management |
US20080098054A1 (en) * | 2006-10-23 | 2008-04-24 | Research In Motion Limited | Methods and apparatus for concurrently executing a garbage collection process during execution of a primary application program |
CN101221535A (zh) * | 2008-01-25 | 2008-07-16 | 中兴通讯股份有限公司 | Java虚拟机的垃圾回收移动通信终端及回收方法 |
US7617264B1 (en) * | 2004-04-15 | 2009-11-10 | Sun Microsystems, Inc. | Parallel remembered-set processing respecting popular-object detection |
CN101615143A (zh) * | 2008-06-27 | 2009-12-30 | 国际商业机器公司 | 用于内存泄漏诊断的方法和装置 |
US20090327374A1 (en) * | 2008-06-30 | 2009-12-31 | Sun Microsystems, Inc. | Method and apparatus for performing concurrent garbage collection |
US20120246433A1 (en) * | 2011-03-23 | 2012-09-27 | Microsoft Corporation | Techniques to manage a collection of objects in heterogeneous environments |
US8892610B1 (en) * | 2011-07-29 | 2014-11-18 | Google Inc. | System and method for garbage collection pause reduction |
CN106201904A (zh) * | 2016-06-30 | 2016-12-07 | 网易(杭州)网络有限公司 | 用于内存垃圾回收的方法及装置 |
US9600204B1 (en) * | 2015-12-08 | 2017-03-21 | International Business Machines Corporation | Efficiently using memory for Java collection objects |
CN107145447A (zh) * | 2017-05-09 | 2017-09-08 | 网易(杭州)网络有限公司 | 检测内存泄漏的方法、装置及电子设备 |
CN108845864A (zh) * | 2018-06-27 | 2018-11-20 | 北京京东尚科信息技术有限公司 | 一种基于spring框架的JVM垃圾回收方法和装置 |
CN109408383A (zh) * | 2018-10-12 | 2019-03-01 | 北京宝兰德软件股份有限公司 | 一种Java内存泄漏分析方法及装置 |
CN109669759A (zh) * | 2018-09-25 | 2019-04-23 | 深圳壹账通智能科技有限公司 | Java虚拟机的垃圾回收方法、装置、设备和存储介质 |
CN109783006A (zh) * | 2017-11-14 | 2019-05-21 | 三星电子株式会社 | 计算系统及操作计算系统的方法 |
CN110045809A (zh) * | 2018-01-12 | 2019-07-23 | 广东欧珀移动通信有限公司 | 信息处理方法、装置、计算机设备和计算机可读存储介质 |
CN111143100A (zh) * | 2019-12-09 | 2020-05-12 | 北京小米移动软件有限公司 | 内存泄露检测方法、装置、设备及存储介质 |
CN111258926A (zh) * | 2020-02-26 | 2020-06-09 | 腾讯科技(深圳)有限公司 | 内存回收方法、装置、存储介质和计算机设备 |
CN111522645A (zh) * | 2020-04-29 | 2020-08-11 | 北京字节跳动网络技术有限公司 | 对象的处理方法、装置、电子设备及计算机可读存储介质 |
CN111736980A (zh) * | 2019-03-25 | 2020-10-02 | 华为技术有限公司 | 一种内存管理方法及装置 |
-
2020
- 2020-12-10 CN CN202011436123.1A patent/CN112463626B/zh active Active
Patent Citations (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1990004829A2 (en) * | 1988-10-24 | 1990-05-03 | Eastman Kodak Company | Object-oriented, logic, and database programming tool |
WO1999000730A1 (en) * | 1997-06-26 | 1999-01-07 | Sun Microsystems, Inc. | Bounded-pause time garbage collection system and method including write barrier associated with a source instance of a partially relocated object |
US6622226B1 (en) * | 2000-07-31 | 2003-09-16 | Microsoft Corporation | Method and system for using a mark-list for garbage collection |
US6851114B1 (en) * | 2000-11-06 | 2005-02-01 | Sun Microsystems, Inc. | Method for improving the performance of safe language multitasking |
US7617264B1 (en) * | 2004-04-15 | 2009-11-10 | Sun Microsystems, Inc. | Parallel remembered-set processing respecting popular-object detection |
US20070136403A1 (en) * | 2005-12-12 | 2007-06-14 | Atsushi Kasuya | System and method for thread creation and memory management in an object-oriented programming environment |
US20070203960A1 (en) * | 2006-02-26 | 2007-08-30 | Mingnan Guo | System and method for computer automatic memory management |
US20080098054A1 (en) * | 2006-10-23 | 2008-04-24 | Research In Motion Limited | Methods and apparatus for concurrently executing a garbage collection process during execution of a primary application program |
CN101221535A (zh) * | 2008-01-25 | 2008-07-16 | 中兴通讯股份有限公司 | Java虚拟机的垃圾回收移动通信终端及回收方法 |
CN101615143A (zh) * | 2008-06-27 | 2009-12-30 | 国际商业机器公司 | 用于内存泄漏诊断的方法和装置 |
US20090327374A1 (en) * | 2008-06-30 | 2009-12-31 | Sun Microsystems, Inc. | Method and apparatus for performing concurrent garbage collection |
US20120246433A1 (en) * | 2011-03-23 | 2012-09-27 | Microsoft Corporation | Techniques to manage a collection of objects in heterogeneous environments |
US8892610B1 (en) * | 2011-07-29 | 2014-11-18 | Google Inc. | System and method for garbage collection pause reduction |
US9600204B1 (en) * | 2015-12-08 | 2017-03-21 | International Business Machines Corporation | Efficiently using memory for Java collection objects |
CN106201904A (zh) * | 2016-06-30 | 2016-12-07 | 网易(杭州)网络有限公司 | 用于内存垃圾回收的方法及装置 |
CN107145447A (zh) * | 2017-05-09 | 2017-09-08 | 网易(杭州)网络有限公司 | 检测内存泄漏的方法、装置及电子设备 |
CN109783006A (zh) * | 2017-11-14 | 2019-05-21 | 三星电子株式会社 | 计算系统及操作计算系统的方法 |
CN110045809A (zh) * | 2018-01-12 | 2019-07-23 | 广东欧珀移动通信有限公司 | 信息处理方法、装置、计算机设备和计算机可读存储介质 |
CN108845864A (zh) * | 2018-06-27 | 2018-11-20 | 北京京东尚科信息技术有限公司 | 一种基于spring框架的JVM垃圾回收方法和装置 |
CN109669759A (zh) * | 2018-09-25 | 2019-04-23 | 深圳壹账通智能科技有限公司 | Java虚拟机的垃圾回收方法、装置、设备和存储介质 |
CN109408383A (zh) * | 2018-10-12 | 2019-03-01 | 北京宝兰德软件股份有限公司 | 一种Java内存泄漏分析方法及装置 |
CN111736980A (zh) * | 2019-03-25 | 2020-10-02 | 华为技术有限公司 | 一种内存管理方法及装置 |
CN111143100A (zh) * | 2019-12-09 | 2020-05-12 | 北京小米移动软件有限公司 | 内存泄露检测方法、装置、设备及存储介质 |
CN111258926A (zh) * | 2020-02-26 | 2020-06-09 | 腾讯科技(深圳)有限公司 | 内存回收方法、装置、存储介质和计算机设备 |
CN111522645A (zh) * | 2020-04-29 | 2020-08-11 | 北京字节跳动网络技术有限公司 | 对象的处理方法、装置、电子设备及计算机可读存储介质 |
Non-Patent Citations (5)
Title |
---|
JAVA技术江湖: "再谈GC1:GC简介,分代与回收算法", 《HTTPS://BLOG.CSDN.NET/A724888/ARTICLE/DETAILS/81114916》 * |
周寻;: "并发垃圾收集器及其调度方法的研究", 计算机应用与软件, no. 09 * |
王伟;杨克峤;周寻;曹志伟;杨珉;: "一种高效的垃圾收集器CCone", 小型微型计算机系统, no. 02 * |
白江涛;钟勇;朱颢东;: "基于实时性的Java虚拟机垃圾收集算法", 计算机应用研究, no. 09 * |
郭芬;刘明;: "Python垃圾收集器原理研究及应用", 信息技术, no. 07 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113419893A (zh) * | 2021-07-19 | 2021-09-21 | 网易(杭州)网络有限公司 | 内存泄漏查证方法、装置、电子设备和存储介质 |
CN113419893B (zh) * | 2021-07-19 | 2022-07-12 | 网易(杭州)网络有限公司 | 内存泄漏查证方法、装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112463626B (zh) | 2023-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113110941B (zh) | 使用应用容器管理代码和依赖性数据的传递 | |
US20210208935A1 (en) | Method for Scheduling Multi-Core Processor, Terminal, and Storage Medium | |
KR101790190B1 (ko) | 애플리케이션 시나리오 식별 방법, 전력 소비 관리 방법, 장치 및 단말기 장치 | |
US9529692B2 (en) | Memory management tools | |
CN111416756B (zh) | 协议测试方法、装置、计算机设备及存储介质 | |
CN107608609B (zh) | 一种事件对象发送方法与装置 | |
CN113238815B (zh) | 一种接口访问控制方法、装置、设备及存储介质 | |
CN105094811B (zh) | 一种事件处理的方法和装置 | |
WO2019019818A1 (zh) | 加快黑屏手势处理的方法、装置、存储介质及移动终端 | |
CN114237743B (zh) | 界面加载方法、装置、电子设备和存储介质 | |
US20240152439A1 (en) | Detection Method and Electronic Device | |
CN112463626B (zh) | 内存泄漏定位方法、装置、计算机设备及存储介质 | |
CN114327087A (zh) | 输入事件处理方法、装置、电子设备和存储介质 | |
CN111240678B (zh) | 弹出窗口的设置方法及装置、电子设备、存储介质 | |
CN110750346B (zh) | 任务运行优化方法、装置、终端及存储介质 | |
CN108809763B (zh) | 一种网络性能参数采集方法、终端装置及存储介质 | |
CN111459547B (zh) | 一种函数调用链路的展示方法和装置 | |
CN114201449A (zh) | 一种日志监控方法、装置、计算机设备及存储介质 | |
US9497253B2 (en) | Authorization review system | |
CN108958929B (zh) | 应用算法库的方法、装置、存储介质及电子设备 | |
CN112232027A (zh) | 一种符号翻译方法、装置、设备和计算机可读存储介质 | |
CN107621903B (zh) | 一种双触摸屏设备及其响应控制方法 | |
CN113419795B (zh) | 调用关系的展示方法、装置、计算机设备及存储介质 | |
JP3339708B2 (ja) | イベント記録方式 | |
CN113961585A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |