[发明专利]一种防止内存泄漏的方法无效
申请号: | 200810246626.5 | 申请日: | 2008-12-31 |
公开(公告)号: | CN101770421A | 公开(公告)日: | 2010-07-07 |
发明(设计)人: | 李平立;王会波;梁长庆;龙武 | 申请(专利权)人: | 北京大学;方正国际软件(北京)有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/50 |
代理公司: | 北京天悦专利代理事务所 11311 | 代理人: | 田明;任晓航 |
地址: | 100871*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 防止 内存 泄漏 方法 | ||
技术领域
本发明属于软件技术,具体涉及一种防止内存泄漏的方法。
背景技术
现代计算机软件技术中,经常使用指针对内存对象进行引用,只有当对象被引用的指针计数为零的时候,该内存对象才允许被销毁,从而释放其占用的内存空间。上述方法是通过计数来标志一个内存对象是否被其他方引用,常规的方法即被引用一次,则计数器加1,不再引用则减1,当引用计数为零的时候,该内存对象才允许被销毁。上述方法关键是对该对象的引用必须成对登记,如果引用次数多于释放次数,则该对象的引用技术将一直大于1,即一直不会被释放,而如果引用次数少于释放次数,系统将试图释放已经被释放的内存对象,从而导致系统异常。
实际应用系统中,对象的使用环境比较复杂(例如,同一个对象在多处被多个程序使用过,部分程序异常崩溃等),将造成上述的引用计数出现偏差,系统容错处理将直接导致内存对象不能销毁,从而不能释放其占用的内存空间,则此对象就会成为内存垃圾。当类似对象越来越多的产生时,最后就可能会造成内存泄漏,严重影响计算机的性能,甚至造成死机。
中国专利02121418.2提到“一种软件内存泄漏的检查方法”,该方法通过先确定应用程序申请的内存块,以及所申请的不同内存块被占用的时间,在应用程序运行时,记录其申请内存块和释放内存块的信息,最后确定超过占用时间尚未释放的内存块,通过上述内存块确定应用程序的内存泄漏点。中国专利申请200710074944.3提到“一种检测内存泄漏的方法”,该方法通过首先建立动态存储内存块信息的链表,并设定同一申请位置长生存时间内存块数量阈值;其次,遍历所述链表,检查各链表元素存储的内存块信息得到各内存块的生存时间,将各长生存时间内存块根据所述各长生存时间内存块被申请的位置分类,若同一申请位置上被申请的所述长生存时间内存块数量大于所述同一申请位置长生存时间内存块数量阈值,则认为所述各长生存时间内存块发生了内存泄漏。
上述两个方法只是对判断内存是否泄漏的方法进行了改进,而对于程序局部崩溃这种异常情况,也不能解决内存泄漏的问题。
随着网络发展、程序远程调用越来越多,并且基于服务的程序越来越多,个别模块的崩溃不能影响系统整体的运行,这样就提出对内存管理更好的方法,而内存管理方面,不仅是需要发现和定位内存泄漏,更重要的是需要方便及时的解决上述应用条件下的内存泄漏问题。
发明内容
针对现有技术中存在的问题,本发明的目的是提供一种防止内存泄漏的方法,该方法通过创建代理访问对象,使用户可以通过代理访问对象访问实际对象,能及时准确地释放内存,从而有效降低计算机内存的泄漏。
为了实现上述发明目的,本发明采用的技术方案为:一种防止内存泄漏的方法,包括如下步骤:
(1)在创建实际对象的同时,创建一个对应的访问代理对象;
(2)用户通过对应的访问代理对象访问实际对象;
(3)程序结束后,释放访问代理对象指向实际对象的指针;
(4)销毁实际对象以释放内存空间。
进一步,如上所述的防止内存泄漏的方法,在步骤(1)中,创建的访问代理对象中记录的信息为实际对象在内存中的地址。
进一步,如上所述的防止内存泄漏的方法,在步骤(2)中,用户通过指针访问访问代理对象,访问代理对象通过指针访问实际对象。
更进一步,如上所述的防止内存泄漏的方法,在步骤(2)中,多个用户能够通过多个指针同时指向一个访问代理对象来引用对应的实际对象。
进一步,如上所述的防止内存泄漏的方法,在步骤(3)中,当访问代理对象指向实际对象的指针被释放后,访问代理对象中记录的信息为空地址,标志该访问代理对象能够被重置或者等待被销毁。
进一步,如上所述的防止内存泄漏的方法,在步骤(4)中,先销毁访问代理对象,继而销毁实际对象。
进一步,如上所述的防止内存泄漏的方法,在步骤(4)中,访问代理对象在系统运行时被统一回收处理,或者被新对象重置换。
本发明的有益效果如下:本发明通过创建与实际对象相对应的访问代理对象,来访问实际对象,这样能够在调用结束后通过释放访问代理对象指向实际对象的指针,释放实际对象,从而减少内存泄漏,而访问代理对象本身仅占用少量的内存,即使不释放访问代理对象,也不会对计算机的性能构成大的影响。
附图说明
图1是本发明所述方法的总体流程示意图;
图2是访问对象流程示意图;
图3是释放对象流程示意图。
具体实施方式
下面结合说明书附图和具体实施方式对本发明作进一步的描述。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学;方正国际软件(北京)有限公司,未经北京大学;方正国际软件(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810246626.5/2.html,转载请声明来源钻瓜专利网。