[发明专利]一种内存泄露检测方法及设备有效
申请号: | 201710211056.5 | 申请日: | 2017-03-31 |
公开(公告)号: | CN108664390B | 公开(公告)日: | 2021-10-01 |
发明(设计)人: | 焦石;蒋启刚 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/455 |
代理公司: | 广州三环专利商标代理有限公司 44202 | 代理人: | 郝传鑫;熊永强 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 内存 泄露 检测 方法 设备 | ||
本发明实施例涉及计算机领域,公开了一种内存泄露检测方法及设备,其中,该方法包括:当Java应用程序在虚拟机上运行时,调用Java虚拟机工具接口JVMTI监控是否存在对象被回收;其中所述对象关联有标示符;在监控到存在所述对象被回收的情况下,在预设集合中删除所述对象关联的标示符;其中所述预设集合包括多个对象各自关联的标示符;确定所述预设集合中剩余的标示符中的一个或多个标示符所关联的对象为内存泄露对象。实施本发明实施例,能够提高内存泄露检测的效率。
技术领域
本发明涉及计算机领域,尤其涉及一种内存泄露检测方法及设备。
背景技术
在计算机领域中,内存泄露指由于疏忽或错误造成程序已经不再使用的内存无法被回收。随着应用程序的运行,系统中可用的内存越来越少,导致系统由于没有足够的内存而瘫痪。
目前,检测内存泄漏的手段是内存分析工具。内存分析工具首先通过对应用程序运行时导出的文件人为地判断对象实例数量、或对象内存占用大小来找到有高风险内存泄露的类;然后再在另一个时间导出一个文件进行同样的分析,对比两次分析结果,如果发现某个类的实例数量有明显增加、且大致趋势是随着应用程序的运行一直增加,那么所述类即可为内存泄露的重点关注对象;最后再人为参与进行更深度地分析以确定内存泄露的对象。
但是,实践中发现,上述整个内存泄露的检测过程需要人为的参与,且需要对内存泄露场景比较熟悉的人员进行检测,内存泄露检测的效率较低。
发明内容
本发明实施例公开了一种内存泄露检测方法及设备,能够提高内存泄露检测的效率。
第一方面,本发明实施例提供了一种内存泄露检测方法,所述方法包括:
当应用程序在虚拟机上运行时,调用Java虚拟机工具接口JVMTI监控是否存在对象被回收;其中所述对象关联有标示符;
在监控到存在所述对象被回收的情况下,在预设集合中删除所述对象关联的标示符;其中所述预设集合包括多个对象各自关联的标示符;
其中,所述预设集合中剩余的标示符可以用于确定内存泄露对象。具体的,内存泄露检测设备确定所述预设集合中剩余的标示符中的一个或多个标示符所关联的对象为内存泄露对象。
本发明实施例中,内存泄露检测设备借助所述JVMTI能够监控应用程序中对象是否被回收的能力,检测出所述应用程序中未被回收的对象,即所述剩余的标示符关联的对象,并根据所述未被回收的对象确定内存泄露对象。可见,与现有技术中通过人为判断对象实例数量、或对象内存占用大小来找到内存泄露对象相比,本方案减少了人力资源的消耗,提高了内存泄露检测的效率。
在一种可能的设计中,通过代码注入技术跟踪所述对象的创建事件从而获取所述对象的位置信息。
其中,所述获取的对象的位置信息可以用于确定所述内存泄露对象的位置。具体的,内存泄露检测设备根据所述位置信息确定所述内存泄露对象的位置。
通过本发明实施例提供的技术方案,所述内存泄露检测设备在确定内存泄露对象的同时,还可以定位所述内存泄露对象的位置,避免了人为地去寻找所述内存泄露对象的位置,提高了内存泄露检测的效率。
在一种可能的设计中,通过所述JVMTI的Thread-local机制创建所述对象所在线程的分配列表;以及调用信息传递接口函数将所述对象的标示符和位置信息传递给所述分配列表中;
其中,所述线程各自关联一个分配列表;所述分配列表包括多个对象各自关联的标示符和位置信息;以及所述分配列表中同一个对象的标示符和位置信息具有关联关系;
所述根据所述位置信息确定所述内存泄露对象的位置,包括:
根据所述分配列表中的位置信息确定所述内存泄露对象的位置。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710211056.5/2.html,转载请声明来源钻瓜专利网。