[发明专利]一种内存泄漏的检测方法和装置有效
申请号: | 201611119526.7 | 申请日: | 2016-12-08 |
公开(公告)号: | CN106649105B | 公开(公告)日: | 2019-06-04 |
发明(设计)人: | 丁萍 | 申请(专利权)人: | 武汉斗鱼网络科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京众达德权知识产权代理有限公司 11570 | 代理人: | 刘杰 |
地址: | 430000 湖北省武汉市东湖开*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 内存 泄漏 检测 方法 装置 | ||
发明实施例提供了一种内存泄漏的检测方法和装置,用于实现自动检测内存泄漏的技术效果。所述方法包括:内存检测模块对目标应用的每个作业Activity进行监控;当监控到任一所述Activity退出,且所述Activity的一条或多条引用未被清除时,确定所述目标应用存在内存泄漏;将未被清除的所述一条或多条引用一一倾卸到所述目标应用的一个或多个二进制转储文件hprof文件中,所述hprof文件能够表示出一条引用的引用关系;基于每个所述hprof文件表示所述hprof文件存储的引用的引用关系,确定出每条所述引用的引用链;从一条或多条所述引用链中确定出导致内存泄漏的引用链。
技术领域
本发明涉及计算机技术领域,尤其涉及一种内存泄漏的检测方法和装置。
背景技术
内存泄漏是指功能模块持续申请内存空间,当结束该功能后,该功能申请的内存空间未能回收。内存泄漏的出现会导致内存不断上涨,最终引发系统强行结束应用,释放内存。强行结束应用导致应用异常退出,降低用户体验。
在现有技术中,通过人工测试来检测内存泄漏。但是,人工测试偶然性,很难测试出所有内存泄漏问题。并且,人工测试环境与实际应用环境存在差异,且人工测试在投入市场前须完成,故人工测试很难还原内存泄漏的实际情况。
所以,由于现有技术依赖人工检测内存泄漏,所以导致检测内存泄漏和解决内存泄漏周期长。
发明内容
发明实施例提供了一种内存泄漏的检测方法和装置,用于实现自动检测内存泄漏的技术效果。
第一方面,本发明提供了一种内存泄漏的检测方法,包括:
内存检测模块对目标应用的每个作业Activity进行监控;
当监控到任一所述Activity退出,且所述Activity的一条或多条引用未被清除时,确定所述目标应用存在内存泄漏;
将未被清除的所述一条或多条引用一一倾卸到所述目标应用的一个或多个二进制转储文件hprof文件中,所述hprof文件能够表示出一条引用的引用关系;
基于每个所述hprof文件表示所述hprof文件存储的引用的引用关系,确定出每条所述引用的引用链;
从一条或多条所述引用链中确定出导致内存泄漏的引用链。
可选的,基于每个所述hprof文件表示所述hprof文件存储的引用的引用关系,确定出每条所述引用的引用链,包括:
解析每个所述hprof文件,获得每个所述hprof文件的引用键,所述hprof文件通过所述引用键表示所述引用关系;
基于每个所述引用键,确定每个所述引用的直接引用函数;
计算每个所述直接引用函数到用于回收内存的垃圾回收函数的最短路径,所述最短路径为所述引用链。
可选的,从一条或多条所述引用链中确定出导致内存泄漏的引用链,包括:
判断每个所述引用链的长度是否超过1;
当所述引用链的长度超过1时,确定所述引用链为所述导致内存泄漏的引用链。
可选的,在将未被清除的所述一条或多条引用一一倾卸到所述目标应用的一个或多个二进制转储文件hprof文件中之前,还包括:
调用垃圾回收函数清除一个或多个所述引用;
当存在未能被所述垃圾回收函数清除的一个或多个所述引用时,执行所述将未被清除的所述一条或多条引用一一倾卸到所述目标应用的一个或多个二进制转储文件hprof文件中的步骤。
可选的,从一个或多个所述引用链中确定出导致内存泄漏的引用链之后,还包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼网络科技有限公司,未经武汉斗鱼网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611119526.7/2.html,转载请声明来源钻瓜专利网。