CN109558308A - 应用程序内存泄露检测方法、装置、电子设备及存储介质 - Google Patents
应用程序内存泄露检测方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN109558308A CN109558308A CN201811152539.3A CN201811152539A CN109558308A CN 109558308 A CN109558308 A CN 109558308A CN 201811152539 A CN201811152539 A CN 201811152539A CN 109558308 A CN109558308 A CN 109558308A
- Authority
- CN
- China
- Prior art keywords
- memory
- activity
- application program
- memory overflow
- weak reference
- 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 290
- 230000000694 effects Effects 0.000 claims abstract description 176
- 238000004458 analytical method Methods 0.000 claims abstract description 34
- 238000001514 detection method Methods 0.000 claims abstract description 25
- 230000007246 mechanism Effects 0.000 claims abstract description 23
- 238000005538 encapsulation Methods 0.000 claims abstract description 21
- 238000012544 monitoring process Methods 0.000 claims abstract description 11
- 230000001960 triggered effect Effects 0.000 claims abstract description 7
- 238000000034 method Methods 0.000 claims description 29
- 238000004590 computer program Methods 0.000 claims description 6
- 238000005457 optimization Methods 0.000 abstract description 8
- 238000005516 engineering process Methods 0.000 abstract description 3
- 230000006870 function Effects 0.000 description 18
- 238000004064 recycling Methods 0.000 description 12
- 238000012545 processing Methods 0.000 description 10
- 238000000151 deposition Methods 0.000 description 5
- 230000005611 electricity Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000000739 chaotic effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000009434 installation Methods 0.000 description 3
- 230000004913 activation Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000010365 information processing Effects 0.000 description 2
- 238000012905 input function Methods 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 229910052799 carbon Inorganic materials 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010191 image analysis Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000000926 separation method Methods 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/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- 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]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种应用程序内存泄露检测方法,包括:为每一个应用程序创建一个弱引用监听器;当有应用程序运行时,通过所述弱引用监听器监听对应的应用程序的Activity对象;将Activity对象封装为弱引用对象;检测Activity对象的弱引用是否存在;当确定所述Activity对象的弱引用存在时,触发垃圾回收机制,并对Activity对象进行标记;检测所述Activity对象是否被回收;当检测到Activity对象没有被回收时,获取应用程序的内存快照文件;根据所述内存快照文件进行内存泄漏分析后生成分析报告并进行上报。本发明还提供一种应用程序内存泄露检测装置、电子设备及存储介质。本发明属于安全监控技术领域,能够能够准确、快速地定位应用程序的内存泄漏问题,提高应用程序内存优化的效率和准确度。
Description
技术领域
本发明涉及内存管理技术领域,具体涉及一种应用程序内存泄露检测方法、装置、电子设备及存储介质。
背景技术
随着计算机应用需求的日益增加,应用程序的设计与开发也相应的日趋复杂,电子设备中的应用程序,运行一段时间后,电子设备的内存就会越来越少,这是由于运行程序存在内存泄漏导致的。内存泄漏指的就是那些曾经使用过,现在已经没有用了的资源,但并没有及时释放掉该部分内存,且该部分资源一直在内存中存在,这块区域既不能使用也不会被释放。由于这块内存一直被占用且不能被及时释放掉,所以导致其他情况下需要再次申请内存的时候却申请不到足够的内存空间就会出现系统卡顿,严重时候可能会出现应用崩溃等后果。由此可见内存泄漏给我们带来了非常不好的结果。
发明内容
鉴于以上内容,有必要提出一种应用程序内存泄露检测方法、装置、电子设备及存储介质,能够准确、快速地定位应用程序的内存泄漏问题,提高应用程序内存优化的效率和准确度,减少不必要的内存消耗,提高使用电子设备的体验度。
本发明的第一方面提供一种应用程序内存泄露检测方法,应用于电子设备中,所述方法包括:
为每一个应用程序创建一个弱引用监听器;
当有应用程序运行时,通过所述弱引用监听器监听对应的应用程序的Activity对象;
将所述Activity对象封装为弱引用对象;
检测所述Activity对象的弱引用是否存在;
当确定所述Activity对象的弱引用存在时,触发垃圾回收机制,并对所述Activity对象进行标记;
检测所述Activity对象是否被回收;
当检测到所述Activity对象没有被回收时,获取所述应用程序的内存快照文件;
根据所述内存快照文件进行内存泄漏分析后生成分析报告并进行上报。
根据本发明的一个优选实施例,所述将所述Activity对象封装为弱引用对象包括:
使用关键字WeakReference将所述Activity对象封装为带key值和带引用队列的弱引用对象,其中,所述key值用于定位发生内存泄漏的对象,所述引用队列用于监控弱引用回收。
根据本发明的一个优选实施例,当检测所述Activity对象的弱引用不存在时,所述方法包括:
确定所述Activity对象没有发生内存泄漏。
根据本发明的一个优选实施例,在所述对Activity对象进行标记之后,所述方法还包括:
再检测所述Activity对象的弱引用是否存在;
当确定所述Activity对象的弱引用存在时,触发垃圾回收机制,并对所述Activity对象再进行一次标记。
根据本发明的一个优选实施例,所述内存快照包含了对象引用的所有路径,所述根据所述内存快照文件进行内存泄漏分析包括:
根据所述内存快照文件中的路径找出发生内存泄漏的对象;
判断发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象是否一致;
若发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象不一致时,将发生内存泄漏的对象标识为不重复的内存泄漏对象,并记录于所述内存泄漏堆栈中。
根据本发明的一个优选实施例,若发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象一致时,所述方法还包括:
将发生内存泄漏的对象标识为重复的内存泄漏对象,并进行去重操作。
根据本发明的一个优选实施例,所述判断发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象是否一致包括:
计算所述发生内存泄漏的对象的字符串与所述内存泄漏堆栈中的内存泄漏对象的字符串的相似度;
判断计算的相似度是否大于预设相似度阈值;
当计算的相似度大于或者等于所述相似度阈值时,确定所述发生内存泄漏的对象与所述内存泄漏堆栈中的内存泄漏对象一致;
当计算的相似度小于所述相似度阈值时,确定所述发生内存泄漏的对象与所述内存泄漏堆栈中的内存泄漏对象不一致。
本发明的第二方面提供一种应用程序内存泄露检测装置,运行于电子设备中,所述装置包括:
创建模块,用于为每一个应用程序创建一个弱引用监听器;
监听模块,用于当有应用程序运行时,通过所述弱引用监听器监听对应的应用程序的Activity对象;
封装模块,用于将所述Activity对象封装为弱引用对象;
检测模块,用于检测所述Activity对象的弱引用是否存在;
标记模块,用于当所述检测模块确定所述Activity对象的弱引用存在时,触发垃圾回收机制,并对Activity对象进行标记;
所述检测模块,还用于检测所述Activity对象是否被回收;
获取模块,用于当所述检测模块检测到所述Activity对象没有被回收时,获取内存快照;
分析模块,用于根据所述内存快照进行内存泄漏分析后生成分析报告并进行上报。
本发明的第三方面提供一种电子设备,所述电子设备包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现所述应用程序内存泄露检测方法。
本发明的第四方面提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述应用程序内存泄露检测方法。
本发明所述的应用程序内存泄露检测方法、装置、电子设备及存储介质,使用弱引用使得activity对象之间的联系“变弱”了,因为弱引用关系的使用,使得垃圾回收器能够在相应的时候对资源进行合理的回收,不会出现混乱的引用关系导致无法回收的问题。通过获取内存快照文件,对内存快照文件的分析,找到内存中重复的内存泄漏对象,可以准确、快速地定位应用程序的内存泄漏问题,为应用程序的内存优化,提供了明确的处理目标,提高应用程序内存优化的效率和准确度,减少不必要的内存消耗,提高使用电子设备的体验度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是本发明实施例一提供的应用程序内存泄露检测方法的流程图。
图2是本发明实施例二提供的应用程序内存泄露检测装置的结构图。
图3是本发明实施例三提供的电子设备的示意图。
如下具体实施方式将结合上述附图进一步说明本发明。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施例对本发明进行详细描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
优选地,本发明的应用程序内存泄露检测方法应用在一个或者多个电子设备或者服务器中。所述电子设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述电子设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述电子设备可以与客户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
实施例一
图1是本发明实施例一提供的应用程序内存泄露检测方法的流程图。
在本实施例中,所述应用程序内存泄露检测方法可以应用于具备显示功能的电子设备或者固定电子设备中,所述电子设备并不限定于个人电脑、智能手机、平板电脑、安装有摄像头的台式机或一体机等。
所述应用程序内存泄露检测方法也可以应用于由电子设备和通过网络与所述电子设备进行连接的服务器所构成的硬件环境中。网络包括但不限于:广域网、城域网或局域网。本发明实施例的应用程序内存泄露检测方法可以由服务器来执行,也可以由电子设备来执行,还可以是由服务器和电子设备共同执行。
例如,对于需要进行应用程序内存泄露检测的电子设备,可以直接在电子设备上集成本发明的方法所提供的应用程序内存泄露检测功能,或者安装用于实现本发明的方法的客户端。再如,本发明所提供的方法还可以软件开发工具包(Software DevelopmentKit,SDK)的形式运行在服务器等设备上。
如图1所示,所述应用程序内存泄露检测方法具体包括以下步骤,根据不同的需求,该流程图中步骤的顺序可以改变,某些步骤可以省略。
S11:为每一个应用程序创建一个弱引用监听器。
本实施例中,可以事先创建为每一个应用程序创建一个弱引用监听器,所述弱引用听器用于监听应用程序的运行进程信息。
本实施例中,以android系统为例,可以在应用程序的application类的onDestroy()方法中创建弱引用监听器。
S12:当有应用程序运行时,通过所述弱引用监听器监听对应的应用程序的Activity对象。
当应用程序运行的时候,所述弱引用监听器会自动监听对应的应用程序。
本实施例中,所述弱引用监听器可以通过Activity组件来监听对应的应用程序的Activity对象。
本实施例中,所述Activity组件为应用程序用于在显示屏幕上的组件,Activity组件中所有操作都与用户密切相关,是一个负责与用户交互的组件。在一个android应用中,一个Activity组件通常就是一个单独的屏幕,上面可以显示一些控件,也可以监听并对用户的事件做出响应。Activity组件拥有四种基本状态:活动或运行(Active/Running)状态,暂停(Paused)状态,停止(Stopped)状态,死(Killed)状态。
所述Active/Running状态是指一个新Activity启动入栈后,在屏幕最前端,Activity处于栈的最顶端,此时Activity处于可见并可和用户交互的激活状态。
所述Paused状态是指当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态。此时Activity依然与窗口管理器保持连接,系统继续维护其内部状态,所以Activity仍然可见,但Activity已经失去了焦点故不可与用户交互。
所述Stopped状态是指当Activity被另外一个Activity覆盖、失去焦点并不可见时的状态。
所述Killed状态是指Activity被系统杀死回收或者没有被启动时所处的状态。
S13:将所述Activity对象封装为弱引用对象。
默认情况下,Java语言中的对象之间的关系是强引用关系。
本实施例中,可以通过Java提供的弱引用工具将Activity对象进行封装为弱引用对象。
为便于理解本实施例中的弱引用,下面介绍弱引用和强引用之间的区别:
1)对于强引用,当内存资源使用过后如果还有任何其他资源对其持有引用关系,那么垃圾回收器就无法对具有强引用关系的资源进行回收。
2)对于弱引用,当内存资源使用过后即使还有其他资源对其持有引用关系,垃圾回收器对内存进行回收的时候发现该对象已经被标记为弱引用关系,那么垃圾回收器依旧会对具有弱引用关系进行回收处理。
本实施例中,所述将Activity对象封装为弱引用对象具体可以包括:
使用关键字WeakReference将Activity对象封装为带key值和带引用队列的弱引用对象,其中,所述key值用于定位发生内存泄漏的对象,所述引用队列用于监控弱引用回收。
所述关键字WeakReference对对象进行修饰(例如WeakReference<Date>mDate),经过WeakReference修饰过的对象就和对应的类存在弱引用关系了。
S14:检测所述Activity对象的弱引用是否存在。
本实施例中,当所述Activity组件的状态为Killed状态时,所述弱引用监听器监听到Activity对象销毁,检测所述Activity对象的弱引用是否存在。
可以通过可达性分析法检测所述引用队列中的Activity对象是否存在弱引用。所述可达性分析法为现有技术,本文再此不再赘述。
在一些实施例中,当Activity对象销毁时,若没有持有Activity的引用,则说明Activity对象的弱引用不存在,内存释放良好。
在一些实施例中,当Activity对象销毁时,若持有Activity的引用,则说明Activity对象的弱引用存在,内存可能发生泄漏。
本实施例中,当检测所述Activity对象的弱引用不存在时,确定所述Activity对象没有发生内存泄漏,此后,可以直接结束流程。当确定所述Activity对象的弱引用存在时,执行步骤S15。
S15:触发垃圾回收机制,并对所述Activity对象进行标记。
所述垃圾回收机制是Java虚拟机提供的一套垃圾回收算法,会定期回收系统中无用的垃圾对象来释放内存空间。
本实施例中,可以通过调用Runtime.getRuntime().gc()方法触发内存垃圾回收机制。所述Runtime.getRuntime().gc()为Eclipse中的一个函数。
需要说明的是,触发了垃圾回收机制不一定会回收Activity对象,因而要真正回收Activity对象,需至少对Activity对象进行两次标记。故执行步骤S15后还需返回执行一次步骤S14,使得Activity对象经过两次标记过程。
即在所述对Activity对象进行标记之后,所述方法还可以包括:
再次检测Activity对象的弱引用是否存在;
当确定所述Activity对象的弱引用存在时,触发垃圾回收机制,对Activity对象再进行一次标记。
S16:检测所述Activity对象是否被回收。
所述Activity对象可以由Java虚拟机自动执行回收机制进行回收。
当检测到Activity对象被回收了,则可以结束流程。当检测到Activity对象没有被回收时,则执行步骤S17。
S17:获取所述应用程序的内存快照文件。
当电子设备操作系统为安卓系统时,可以通过预设内存调试程序,例如AndroidDebug Bridge(adb)工具,通过adb工具,调用adb shell am dumpheap命令获取应用程序的内存快照文件。
在其他实施例中,可以直接通过内存快照工具Snapshot,对所述应用程序的内存镜像文件进行截图,得到所述应用程序的内存快照文件。
内存快照文件中包含了对象引用的所有路径。
S18:根据所述内存快照文件进行内存泄漏分析后生成分析报告并进行上报。
具体地,所述根据所述内存快照文件进行内存泄漏分析可以包括:
1)根据所述内存快照文件中的路径找出内存泄漏的对象;
在所述内存快照文件中遍历Activity对象的所有实例,如果key值和最开始定义封装的key值相同,那么返回这个泄漏对象,即在快照中定位到了泄漏对象。
2)判断发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象是否一致;
3)若发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象不一致时,将发生内存泄漏的对象标识为不重复的内存泄漏对象,并记录于所述内存泄漏堆栈中;
4)若发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象一致时,将发生内存泄漏的对象标识为重复的内存泄漏对象,并进行去重操作。
本实施例中,判断发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象是否一致包括:
计算发生内存泄漏的对象的字符串与内存泄漏堆栈中的内存泄漏对象的字符串的相似度;
判断计算的相似度是否大于预设相似度阈值;
当判断计算的相似度大于或者等于相似度阈值时,确定发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象一致;
当判断计算的相似度小于相似度阈值时确定发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象不一致。
综上所述,本发明应用程序内存泄露检测方法,创建至少一个弱引用监听器,所述弱引用监听器用于当应用程序运行时,监听对应的应用程序的Activity组件;将Activity对象封装为弱引用对象;检测Activity对象的弱引用是否存在;当确定所述Activity对象的弱引用存在时,触发垃圾回收机制,并对Activity对象进行标记;检测所述Activity对象是否被回收;当检测到Activity对象没有被回收,获取内存快照;根据所述内存快照进行内存泄漏分析后生成分析报告并进行上报。本发明使用弱引用使得activity对象之间的联系“变弱”了,因为弱引用关系的使用,使得垃圾回收器能够在相应的时候对资源进行合理的回收,不会出现混乱的引用关系导致无法回收的问题。通过获取内存快照文件,对内存快照文件的分析,找到内存中重复的内存泄漏对象,可以准确、快速地定位应用程序的内存泄漏问题,为应用程序的内存优化,提供了明确的处理目标,提高应用程序内存优化的效率和准确度,减少不必要的内存消耗,提高使用电子设备的体验度。另外,对发生内存泄漏的对象进行去重操作,避免对同一发生内存泄漏的对象进行多次回收。
上述图1详细介绍了本发明的应用程序内存泄露检测方法,下面结合第2~3图,分别对实现所述应用程序内存泄露检测方法的软件装置的功能模块以及实现所述应用程序内存泄露检测方法的硬件装置架构进行介绍。
应该了解,所述实施例仅为说明之用,在专利申请范围上并不受此结构的限制。
实施例二
参阅图2所示,是本发明应用程序内存泄露检测装置的较佳实施例中的功能模块图。
在一些实施例中,所述应用程序内存泄露检测装置20运行于电子设备中。所述应用程序内存泄露检测装置20可以包括多个由程序代码段所组成的功能模块。所述应用程序内存泄露检测装置20中的各个程序段的程序代码可以存储于电子设备的存储器中,并由所述至少一个处理器所执行,以执行(详见图1描述)对应用程序内存泄露的检测。
本实施例中,所述应用程序内存泄露检测装置20根据其所执行的功能,可以被划分为多个功能模块。所述功能模块可以包括:创建模块201、监听模块202、封装模块203、检测模块204、标记模块205、获取模块206及分析模块207。本发明所称的模块是指一种能够被至少一个处理器所执行并且能够完成固定功能的一系列计算机程序段,其存储在存储器中。在本实施例中,关于各模块的功能将在后续的实施例中详述。
创建模块201,用于为每一个应用程序创建一个弱引用监听器。
本实施例中,可以事先创建为每一个应用程序创建一个弱引用监听器,所述弱引用听器用于监听应用程序的运行进程信息。
本实施例中,以android系统为例,可以在应用程序的application类的onDestroy()方法中创建弱引用监听器。
监听模块202,用于当有应用程序运行时,通过所述弱引用监听器监听对应的应用程序的Activity对象。
当应用程序运行的时候,所述弱引用监听器会自动监听对应的应用程序。
本实施例中,所述弱引用监听器可以通过Activity组件来监听对应的应用程序的Activity对象。
本实施例中,所述Activity组件为应用程序用于在显示屏幕上的组件,Activity组件中所有操作都与用户密切相关,是一个负责与用户交互的组件。在一个android应用中,一个Activity组件通常就是一个单独的屏幕,上面可以显示一些控件,也可以监听并对用户的事件做出响应。Activity组件拥有四种基本状态:活动或运行(Active/Running)状态,暂停(Paused)状态,停止(Stopped)状态,死(Killed)状态。
所述Active/Running状态是指一个新Activity启动入栈后,在屏幕最前端,Activity处于栈的最顶端,此时Activity处于可见并可和用户交互的激活状态。
所述Paused状态是指当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态。此时Activity依然与窗口管理器保持连接,系统继续维护其内部状态,所以Activity仍然可见,但Activity已经失去了焦点故不可与用户交互。
所述Stopped状态是指当Activity被另外一个Activity覆盖、失去焦点并不可见时的状态。
所述Killed状态是指Activity被系统杀死回收或者没有被启动时所处的状态。
封装模块203,用于将Activity对象封装为弱引用对象。
默认情况下,Java语言中的对象之间的关系是强引用关系。
本实施例中,可以通过Java提供的弱引用工具将Activity对象进行封装为弱引用对象。
为便于理解本实施例中的弱引用,下面介绍弱引用和强引用之间的区别:
1)对于强引用,当内存资源使用过后如果还有任何其他资源对其持有引用关系,那么垃圾回收器就无法对具有强引用关系的资源进行回收。
2)对于弱引用,当内存资源使用过后即使还有其他资源对其持有引用关系,垃圾回收器对内存进行回收的时候发现该对象已经被标记为弱引用关系,那么垃圾回收器依旧会对具有弱引用关系进行回收处理。
本实施例中,所述将Activity对象封装为弱引用对象具体可以包括:
使用关键字WeakReference将Activity对象封装为带key值和带引用队列的弱引用对象,其中,所述key值用于定位发生内存泄漏的对象,所述引用队列用于监控弱引用回收。
所述关键字WeakReference对对象进行修饰(例如WeakReference<Date>mDate),经过WeakReference修饰过的对象就和对应的类存在弱引用关系了。
检测模块204,用于检测所述Activity对象的弱引用是否存在。
本实施例中,当所述Activity组件的状态为Killed状态时,所述弱引用监听器监听到Activity对象销毁,检测所述Activity对象的弱引用是否存在。
可以通过可达性分析法检测所述引用队列中的Activity对象是否存在弱引用。所述可达性分析法为现有技术,本文再此不再赘述。
在一些实施例中,当Activity对象销毁时,若没有持有Activity的引用,则说明Activity对象的弱引用不存在,内存释放良好。
在一些实施例中,当Activity对象销毁时,若持有Activity的引用,则说明Activity对象的弱引用存在,内存可能发生泄漏。
本实施例中,当检测模块204确定所述Activity对象的弱引用不存在时,检测模块204确定所述Activity对象没有发生内存泄漏。
标记模块205,用于当检测模块204确定所述Activity对象的弱引用存在时,触发垃圾回收机制,并对Activity对象进行标记。
所述垃圾回收机制是Java虚拟机提供的一套垃圾回收算法,会定期回收系统中无用的垃圾对象来释放内存空间。
本实施例中,可以通过调用Runtime.getRuntime().gc()方法触发内存垃圾回收机制。所述Runtime.getRuntime().gc()为Eclipse中的一个函数。
需要说明的是,触发了垃圾回收机制不一定会回收Activity对象,因而要真正回收Activity对象,需至少对Activity对象进行两次标记。故在当检测模块204确定所述Activity对象的弱引用存在时,标记模块205触发垃圾回收机制,对Activity对象进行标记后,检测模块204需再次检测Activity对象的弱引用是否存在,并再确定所述Activity对象的弱引用存在时,由标记模块205触发垃圾回收机制,对Activity对象再进行一次标记。
所述检测模块204检测所述Activity对象是否被回收。
所述Activity对象可以由Java虚拟机自动执行回收机制进行回收。
获取模块206,用于当所述检测模块204检测到Activity对象没有被回收时,获取所述应用程序的内存快照文件。
当电子设备操作系统为安卓系统时,可以通过预设内存调试程序,例如AndroidDebug Bridge(adb)工具,通过adb工具,调用adb shell am dumpheap命令获取应用程序的内存快照文件。
在其他实施例中,可以直接通过内存快照工具Snapshot,对所述应用程序的内存镜像文件进行截图,得到所述应用程序的内存快照文件。
内存快照文件中包含了对象引用的所有路径。
分析模块207,用于根据所述内存快照文件进行内存泄漏分析后生成分析报告并进行上报。
具体地,所述分析模块207根据所述内存快照文件进行内存泄漏分析可以包括:
1)根据所述内存快照文件中的路径找出内存泄漏的对象;
在所述内存快照文件中遍历Activity对象的所有实例,如果key值和最开始定义封装的key值相同,那么返回这个泄漏对象,即在快照中定位到了泄漏对象。
2)判断发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象是否一致;
3)若发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象不一致时,将发生内存泄漏的对象标识为不重复的内存泄漏对象,并记录于所述内存泄漏堆栈中;
4)若发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象一致时,将发生内存泄漏的对象标识为重复的内存泄漏对象,并进行去重操作。
本实施例中,判断发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象是否一致包括:
计算发生内存泄漏的对象的字符串与内存泄漏堆栈中的内存泄漏对象的字符串的相似度;
判断计算的相似度是否大于预设相似度阈值;
当判断计算的相似度大于或者等于相似度阈值时,确定发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象一致;
当判断计算的相似度小于相似度阈值时,确定发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象不一致。
综上所述,本发明应用程序内存泄露检测装置,创建至少一个弱引用监听器,所述弱引用监听器用于当应用程序运行时,监听对应的应用程序的Activity组件;将Activity对象封装为弱引用对象;检测Activity对象的弱引用是否存在;当确定所述Activity对象的弱引用存在时,触发垃圾回收机制,并对Activity对象进行标记;检测所述Activity对象是否被回收;当检测到Activity对象没有被回收,获取内存快照并根据所述内存快照进行内存泄漏分析后生成分析报告并进行上报。本发明使用弱引用使得activity对象之间的联系“变弱”了,因为弱引用关系的使用,使得垃圾回收器能够在相应的时候对资源进行合理的回收,不会出现混乱的引用关系导致无法回收的问题。通过获取内存快照文件,对内存快照文件的分析,找到内存中重复的内存泄漏对象,可以准确、快速地定位应用程序的内存泄漏问题,为应用程序的内存优化,提供了明确的处理目标,提高应用程序内存优化的效率和准确度,减少不必要的内存消耗,提高使用电子设备的体验度。另外,对发生内存泄漏的对象进行去重操作,避免对同一发生内存泄漏的对象进行多次回收。
实施例三
参阅图3所示,为本发明实施例提供的电子设备的结构示意图。在本发明较佳实施例中,所述电子设备3包括存储器31、至少一个处理器32、至少一条通信总线33及显示屏幕34。
本领域技术人员应该了解,图3示出的电子设备的结构并不构成本发明实施例的限定,既可以是总线型结构,也可以是星形结构,所述电子设备3还可以包括比图示更多或更少的其他硬件或者软件,或者不同的部件布置。
在一些实施例中,所述电子设备3包括一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路、可编程门阵列、数字处理器、嵌入式设备等。所述电子设备3还可包括客户设备,所述客户设备包括但不限于任何一种可与客户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、数码相机等。
需要说明的是,所述电子设备3仅为举例,其他现有的或今后可能出现的电子产品如可适应于本发明,也应包含在本发明的保护范围以内,并以引用方式包含于此。
在一些实施例中,所述存储器31用于存储程序代码和各种数据,例如安装在所述电子设备3中的应用程序内存泄露检测装置20,并在电子设备3的运行过程中实现高速、自动地完成程序或数据的存取。所述存储器31包括只读存储器(Read-Only Memory,ROM)、随机存储器(Random Access Memory,RAM)、可编程只读存储器(Programmable Read-OnlyMemory,PROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、一次可编程只读存储器(One-time Programmable Read-Only Memory,OTPROM)、电子擦除式可复写只读存储器(Electrically-Erasable Programmable Read-Only Memory,EEPROM)、只读光盘(Compact Disc Read-Only Memory,CD-ROM)或其他光盘存储器、磁盘存储器、磁带存储器、或者能够用于携带或存储数据的计算机可读的任何其他介质。
在一些实施例中,所述至少一个处理器32可以由集成电路组成,例如可以由单个封装的集成电路所组成,也可以是由多个相同功能或不同功能封装的集成电路所组成,包括一个或者多个中央处理器(Central Processing unit,CPU)、微处理器、数字处理芯片、图形处理器及各种控制芯片的组合等。所述至少一个处理器32是所述电子设备3的控制核心(Control Unit),利用各种接口和线路连接整个电子设备3的各个部件,通过运行或执行存储在所述存储器31内的程序或者模块,以及调用存储在所述存储器31内的数据,以执行电子设备3的各种功能和处理数据,例如执行应用程序内存泄露检测的功能。
在一些实施例中,所述至少一条通信总线33被设置为实现所述存储器31、所述至少一个处理器32以及所述显示屏幕34等之间的连接通信。
在一些实施例中,所述显示屏幕34可用于显示由观看者输入的信息或提供给观看者的信息以及电子设备3的各种图形观看者接口,这些图形观看者接口可以由图形、文本、图标、视频和其任意组合来构成。所述显示屏幕34可包括显示面板,可选的,可以采用液晶显示屏幕(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-EmittingDiode,OLED)等形式来配置显示面板。
所述显示屏幕34还可以包括触摸面板。如果所述显示屏幕34包括触摸面板,所述显示屏幕34可以被实现为触摸屏,以接收来自观看者的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。上述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与上述触摸或滑动操作相关的持续时间和压力。所述显示面板与所述触摸面板可以作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将所述显示面板与所述触摸面板进行集成而实现输入和输出功能。
尽管未示出,所述电子设备3还可以包括给各个部件供电的电源(比如电池),优选的,电源可以通过电源管理装置与所述至少一个处理器32逻辑相连,从而通过电源管理装置实现管理充电、放电、以及功耗管理等功能。电源还可以包括一个或一个以上的直流或交流电源、再充电装置、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。所述电子设备3还可以包括多种传感器、蓝牙模块、Wi-Fi模块等,在此不再赘述。
应该了解,所述实施例仅为说明之用,在专利申请范围上并不受此结构的限制。
上述以软件功能模块的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分。
在进一步的实施例中,结合图1,所述至少一个处理器32可执行所述电子设备3的操作装置以及安装的各类应用程序(如所述的应用程序内存泄露检测装置20)、程序代码等,例如,上述的各个模块。
所述存储器31中存储有程序代码,且所述至少一个处理器32可调用所述存储器31中存储的程序代码以执行相关的功能。例如,图2中所述的各个模块是存储在所述存储器31中的程序代码,并由所述至少一个处理器32所执行,从而实现所述各个模块的功能以达到应用程序内存泄露检测的目的。
在本发明的一个实施例中,所述存储器31存储多个指令,所述多个指令被所述至少一个处理器32所执行以实现对应用程序内存泄露的检测。
具体地,所述至少一个处理器32对上述指令的执行包括:
创建至少一个弱引用监听器,所述弱引用监听器用于当应用程序运行时,监听对应的应用程序的Activity组件;
将Activity对象封装为弱引用对象;
检测Activity对象的弱引用是否存在;
当确定所述Activity对象的弱引用存在时,触发垃圾回收机制,并对Activity对象进行标记;
检测所述Activity对象是否被回收;
当检测到Activity对象没有被回收时,获取内存快照;
根据所述内存快照进行内存泄漏分析后生成分析报告并进行上报。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。
Claims (10)
1.一种应用程序内存泄露检测方法,应用于电子设备中,其特征在于,所述方法包括:
为每一个应用程序创建一个弱引用监听器;
当有应用程序运行时,通过所述弱引用监听器监听对应的应用程序的Activity对象;
将所述Activity对象封装为弱引用对象;
检测所述Activity对象的弱引用是否存在;
当确定所述Activity对象的弱引用存在时,触发垃圾回收机制,并对所述Activity对象进行标记;
检测所述Activity对象是否被回收;
当检测到所述Activity对象没有被回收时,获取所述应用程序的内存快照文件;
根据所述内存快照文件进行内存泄漏分析后生成分析报告并进行上报。
2.如权利要求1所述的方法,其特征在于,所述将Activity对象封装为弱引用对象包括:
使用关键字WeakReference将所述Activity对象封装为带key值和带引用队列的弱引用对象,其中,所述key值用于定位发生内存泄漏的对象,所述引用队列用于监控弱引用回收。
3.如权利要求1所述的方法,其特征在于,当检测所述Activity对象的弱引用不存在时,所述方法包括:
确定所述Activity对象没有发生内存泄漏。
4.如权利要求1所述的方法,其特征在于,在所述对Activity对象进行标记之后,所述方法还包括:
再检测所述Activity对象的弱引用是否存在;
当确定所述Activity对象的弱引用存在时,触发垃圾回收机制,并对所述Activity对象再进行一次标记。
5.如权利要求1所述的方法,其特征在于,所述内存快照文件包含了对象引用的所有路径,
所述根据所述内存快照文件进行内存泄漏分析包括:
根据所述内存快照文件中的路径找出发生内存泄漏的对象;
判断发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象是否一致;
若发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象不一致时,将发生内存泄漏的对象标识为不重复的内存泄漏对象,并记录于所述内存泄漏堆栈中。
6.如权利要求5所述的方法,其特征在于,若发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象一致时,所述方法还包括:
将发生内存泄漏的对象标识为重复的内存泄漏对象,并进行去重操作。
7.如权利要求5所述的方法,其特征在于,所述判断发生内存泄漏的对象与内存泄漏堆栈中的内存泄漏对象是否一致包括:
计算所述发生内存泄漏的对象的字符串与所述内存泄漏堆栈中的内存泄漏对象的字符串的相似度;
判断计算的相似度是否大于预设相似度阈值;
当计算的相似度大于或者等于所述相似度阈值时,确定所述发生内存泄漏的对象与所述内存泄漏堆栈中的内存泄漏对象一致;
当计算的相似度小于所述相似度阈值时,确定所述发生内存泄漏的对象与所述内存泄漏堆栈中的内存泄漏对象不一致。
8.一种应用程序内存泄露检测装置,运行于电子设备中,其特征在于,所述装置包括:
创建模块,用于为每一个应用程序创建一个弱引用监听器;
监听模块,用于当有应用程序运行时,通过所述弱引用监听器监听对应的应用程序的Activity对象;
封装模块,用于将所述Activity对象封装为弱引用对象;
检测模块,用于检测所述Activity对象的弱引用是否存在;
标记模块,用于当所述检测模块确定所述Activity对象的弱引用存在时,触发垃圾回收机制,并对所述Activity对象进行标记;
所述检测模块,还用于检测所述Activity对象是否被回收;
获取模块,用于当所述检测模块检测到所述Activity对象没有被回收时,获取所述应用程序的内存快照文件;
分析模块,用于根据所述内存快照文件进行内存泄漏分析后生成分析报告并进行上报。
9.一种电子设备,其特征在于,所述电子设备包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如权利要求1至7中任意一项所述应用程序内存泄露检测方法。
10.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任意一项所述应用程序内存泄露检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811152539.3A CN109558308A (zh) | 2018-09-29 | 2018-09-29 | 应用程序内存泄露检测方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811152539.3A CN109558308A (zh) | 2018-09-29 | 2018-09-29 | 应用程序内存泄露检测方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109558308A true CN109558308A (zh) | 2019-04-02 |
Family
ID=65864854
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811152539.3A Pending CN109558308A (zh) | 2018-09-29 | 2018-09-29 | 应用程序内存泄露检测方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109558308A (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110333993A (zh) * | 2019-06-24 | 2019-10-15 | 北京三快在线科技有限公司 | 内存快照的生成方法、装置、电子设备和存储介质 |
CN110442404A (zh) * | 2019-08-13 | 2019-11-12 | 武汉斗鱼鱼乐网络科技有限公司 | 一种对象释放方法、装置、设备和存储介质 |
CN110457152A (zh) * | 2019-07-11 | 2019-11-15 | 贵阳语玩科技有限公司 | 一种用代理模式解决内存泄露的系统和方法 |
CN110597737A (zh) * | 2019-08-22 | 2019-12-20 | 腾讯音乐娱乐科技(深圳)有限公司 | 数据处理方法、装置、存储介质及电子设备 |
CN111143100A (zh) * | 2019-12-09 | 2020-05-12 | 北京小米移动软件有限公司 | 内存泄露检测方法、装置、设备及存储介质 |
CN111258797A (zh) * | 2020-01-13 | 2020-06-09 | 北京字节跳动网络技术有限公司 | 一种内存泄露的检测方法、装置、介质和电子设备 |
CN111258921A (zh) * | 2020-01-14 | 2020-06-09 | Oppo广东移动通信有限公司 | 垃圾内存回收方法及装置、电子设备、存储介质 |
CN111274082A (zh) * | 2020-01-13 | 2020-06-12 | 北京字节跳动网络技术有限公司 | 一种内存性能的分析方法、装置、介质和电子设备 |
CN111552616A (zh) * | 2020-04-30 | 2020-08-18 | 汉海信息技术(上海)有限公司 | 一种内存监听方法及装置 |
CN111638990A (zh) * | 2020-06-04 | 2020-09-08 | 网易(杭州)网络有限公司 | 内存泄露的处理方法、装置及存储介质 |
CN112015395A (zh) * | 2020-08-28 | 2020-12-01 | 中移(杭州)信息技术有限公司 | 防止内存泄漏方法、装置及计算机可读存储介质 |
CN112035314A (zh) * | 2020-07-31 | 2020-12-04 | 北京达佳互联信息技术有限公司 | 内存泄漏的监控方法、装置及电子设备 |
CN113407419A (zh) * | 2021-07-15 | 2021-09-17 | 腾讯数码(深圳)有限公司 | 内存泄漏检测方法、装置、计算机设备和存储介质 |
CN113688052A (zh) * | 2021-08-31 | 2021-11-23 | 南方电网科学研究院有限责任公司 | 一种电表应用程序内存泄露监测方法、终端、设备和介质 |
CN114546693A (zh) * | 2022-01-19 | 2022-05-27 | 北京字节跳动网络技术有限公司 | 检测内存泄露方法、装置、可读介质及电子设备 |
CN115443638A (zh) * | 2020-04-22 | 2022-12-06 | 微软技术许可有限责任公司 | 诊断和缓解计算节点中的存储器泄漏 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101996292A (zh) * | 2010-12-10 | 2011-03-30 | 北京理工大学 | 一种基于序列聚类的软件安全特性分析方法 |
US20130080706A1 (en) * | 2011-09-23 | 2013-03-28 | International Business Machines Corporation | Prevention of classloader memory leaks in multitier enterprise applications |
CN105302714A (zh) * | 2014-07-24 | 2016-02-03 | 腾讯科技(深圳)有限公司 | 一种测试过程中内存泄漏的监控方法和装置 |
CN105740042A (zh) * | 2016-01-15 | 2016-07-06 | 北京京东尚科信息技术有限公司 | 虚拟机内存的管理方法和管理系统 |
CN106528430A (zh) * | 2016-12-01 | 2017-03-22 | 北京金山安全软件有限公司 | 一种应用程序的检测方法、装置及电子设备 |
CN107239394A (zh) * | 2016-03-29 | 2017-10-10 | 卓望数码技术(深圳)有限公司 | 一种安卓应用的内存泄露检测方法及装置 |
CN107957941A (zh) * | 2016-10-17 | 2018-04-24 | 腾讯科技(深圳)有限公司 | 移动终端内存泄漏处理方法和装置 |
CN108459921A (zh) * | 2018-02-23 | 2018-08-28 | 北京奇艺世纪科技有限公司 | 崩溃文件存储方法、装置及电子设备 |
-
2018
- 2018-09-29 CN CN201811152539.3A patent/CN109558308A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101996292A (zh) * | 2010-12-10 | 2011-03-30 | 北京理工大学 | 一种基于序列聚类的软件安全特性分析方法 |
US20130080706A1 (en) * | 2011-09-23 | 2013-03-28 | International Business Machines Corporation | Prevention of classloader memory leaks in multitier enterprise applications |
CN105302714A (zh) * | 2014-07-24 | 2016-02-03 | 腾讯科技(深圳)有限公司 | 一种测试过程中内存泄漏的监控方法和装置 |
CN105740042A (zh) * | 2016-01-15 | 2016-07-06 | 北京京东尚科信息技术有限公司 | 虚拟机内存的管理方法和管理系统 |
CN107239394A (zh) * | 2016-03-29 | 2017-10-10 | 卓望数码技术(深圳)有限公司 | 一种安卓应用的内存泄露检测方法及装置 |
CN107957941A (zh) * | 2016-10-17 | 2018-04-24 | 腾讯科技(深圳)有限公司 | 移动终端内存泄漏处理方法和装置 |
CN106528430A (zh) * | 2016-12-01 | 2017-03-22 | 北京金山安全软件有限公司 | 一种应用程序的检测方法、装置及电子设备 |
CN108459921A (zh) * | 2018-02-23 | 2018-08-28 | 北京奇艺世纪科技有限公司 | 崩溃文件存储方法、装置及电子设备 |
Non-Patent Citations (4)
Title |
---|
佚名: "怎么用弱引用实现内存泄漏检测-阿里云开发者社区", 《HTTPS://DEVELOPER.ALIYUN.COM/ARTICLE/241792》 * |
尹文刚等: "Android应用程序中的内存泄漏与规避方法", 《单片机与嵌入式系统应用》 * |
李褚乔: "基于Android的内存泄露检测方法研究", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》 * |
王龙: "Javascript内存泄漏检测及工具研究", 《万方》 * |
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110333993A (zh) * | 2019-06-24 | 2019-10-15 | 北京三快在线科技有限公司 | 内存快照的生成方法、装置、电子设备和存储介质 |
CN110457152A (zh) * | 2019-07-11 | 2019-11-15 | 贵阳语玩科技有限公司 | 一种用代理模式解决内存泄露的系统和方法 |
CN110442404A (zh) * | 2019-08-13 | 2019-11-12 | 武汉斗鱼鱼乐网络科技有限公司 | 一种对象释放方法、装置、设备和存储介质 |
CN110442404B (zh) * | 2019-08-13 | 2022-07-05 | 武汉斗鱼鱼乐网络科技有限公司 | 一种对象释放方法、装置、设备和存储介质 |
CN110597737A (zh) * | 2019-08-22 | 2019-12-20 | 腾讯音乐娱乐科技(深圳)有限公司 | 数据处理方法、装置、存储介质及电子设备 |
CN111143100A (zh) * | 2019-12-09 | 2020-05-12 | 北京小米移动软件有限公司 | 内存泄露检测方法、装置、设备及存储介质 |
CN111258797A (zh) * | 2020-01-13 | 2020-06-09 | 北京字节跳动网络技术有限公司 | 一种内存泄露的检测方法、装置、介质和电子设备 |
CN111258797B (zh) * | 2020-01-13 | 2023-04-18 | 北京字节跳动网络技术有限公司 | 一种内存泄露的检测方法、装置、介质和电子设备 |
CN111274082A (zh) * | 2020-01-13 | 2020-06-12 | 北京字节跳动网络技术有限公司 | 一种内存性能的分析方法、装置、介质和电子设备 |
CN111274082B (zh) * | 2020-01-13 | 2023-04-18 | 北京字节跳动网络技术有限公司 | 一种内存性能的分析方法、装置、介质和电子设备 |
CN111258921B (zh) * | 2020-01-14 | 2024-01-26 | Oppo广东移动通信有限公司 | 垃圾内存回收方法及装置、电子设备、存储介质 |
CN111258921A (zh) * | 2020-01-14 | 2020-06-09 | Oppo广东移动通信有限公司 | 垃圾内存回收方法及装置、电子设备、存储介质 |
CN115443638A (zh) * | 2020-04-22 | 2022-12-06 | 微软技术许可有限责任公司 | 诊断和缓解计算节点中的存储器泄漏 |
CN111552616A (zh) * | 2020-04-30 | 2020-08-18 | 汉海信息技术(上海)有限公司 | 一种内存监听方法及装置 |
CN111638990B (zh) * | 2020-06-04 | 2023-04-28 | 网易(杭州)网络有限公司 | 内存泄露的处理方法、装置及存储介质 |
CN111638990A (zh) * | 2020-06-04 | 2020-09-08 | 网易(杭州)网络有限公司 | 内存泄露的处理方法、装置及存储介质 |
CN112035314A (zh) * | 2020-07-31 | 2020-12-04 | 北京达佳互联信息技术有限公司 | 内存泄漏的监控方法、装置及电子设备 |
CN112035314B (zh) * | 2020-07-31 | 2024-04-30 | 北京达佳互联信息技术有限公司 | 内存泄漏的监控方法、装置及电子设备 |
CN112015395B (zh) * | 2020-08-28 | 2023-04-07 | 中移(杭州)信息技术有限公司 | 防止内存泄漏方法、装置及计算机可读存储介质 |
CN112015395A (zh) * | 2020-08-28 | 2020-12-01 | 中移(杭州)信息技术有限公司 | 防止内存泄漏方法、装置及计算机可读存储介质 |
CN113407419B (zh) * | 2021-07-15 | 2022-09-16 | 腾讯数码(深圳)有限公司 | 内存泄漏检测方法、装置、计算机设备和存储介质 |
CN113407419A (zh) * | 2021-07-15 | 2021-09-17 | 腾讯数码(深圳)有限公司 | 内存泄漏检测方法、装置、计算机设备和存储介质 |
CN113688052A (zh) * | 2021-08-31 | 2021-11-23 | 南方电网科学研究院有限责任公司 | 一种电表应用程序内存泄露监测方法、终端、设备和介质 |
CN114546693A (zh) * | 2022-01-19 | 2022-05-27 | 北京字节跳动网络技术有限公司 | 检测内存泄露方法、装置、可读介质及电子设备 |
CN114546693B (zh) * | 2022-01-19 | 2024-05-24 | 北京字节跳动网络技术有限公司 | 检测内存泄漏方法、装置、可读介质及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109558308A (zh) | 应用程序内存泄露检测方法、装置、电子设备及存储介质 | |
US10445220B2 (en) | System and methods for application activity capture, error identification, and error correction | |
US20100251219A1 (en) | Tracing objects in object-oriented programming model | |
CN108595316B (zh) | 分布式应用的生命周期管理方法、管理器、设备和介质 | |
CN109522020A (zh) | 安卓系统安装包瘦身方法、装置、终端及存储介质 | |
CN101025701A (zh) | 存储器转储方法、存储器转储程序以及计算机系统 | |
CN106681701B (zh) | 一种任务的显示方法和装置 | |
CN108446199A (zh) | 一种应用卡顿的检测方法及装置 | |
CN105022955B (zh) | 一种应用程序的锁定方法及移动终端 | |
CN112559535B (zh) | 基于多线程的异步任务处理方法、装置、设备及介质 | |
CN111754123B (zh) | 数据监控方法、装置、计算机设备及存储介质 | |
US9043760B2 (en) | Creating dynamic interactive views from trace events for performing deterministic performance analysis | |
CN104137066A (zh) | 提供关于应用的信息的方法、用于执行所述方法的装置以及记录有用于运行所述方法的程序的计算机可读记录介质 | |
CN113282795B (zh) | 数据结构图生成及更新方法、装置、电子设备及存储介质 | |
CN110704097A (zh) | 一种数据收集方法、装置及电子设备和存储介质 | |
CN114846449A (zh) | 使用格兰杰因果关系的根本原因分析 | |
CN109947832A (zh) | 将excel数据表生成sql文件的方法、装置、终端及存储介质 | |
WO2021252043A1 (en) | Running pbs jobs in kubernets | |
CN114691050B (zh) | 基于kubernetes的云原生存储方法、装置、设备及介质 | |
JP5740338B2 (ja) | 仮想環境運用支援システム | |
CN109460234B (zh) | 应用程序瘦身方法、装置、终端及存储介质 | |
CN113190427A (zh) | 卡顿监控方法、装置、电子设备及存储介质 | |
CN108829391A (zh) | 一种Fragment中控件识别方法及系统 | |
CN110879701B (zh) | 工作流可视化配置方法、服务器、系统及介质 | |
WO2023284877A1 (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190402 |