一种防止内存泄漏的方法

文档序号:6472074阅读:203来源:国知局
专利名称:一种防止内存泄漏的方法
技术领域
本发明属于软件技术,具体涉及一种防止内存泄漏的方法。
背景技术
现代计算机软件技术中,经常使用指针对内存对象进行引用,只有当对象被引用 的指针计数为零的时候,该内存对象才允许被销毁,从而释放其占用的内存空间。上述方法 是通过计数来标志一个内存对象是否被其他方引用,常规的方法即被引用一次,则计数器 加l,不再引用则减l,当引用计数为零的时候,该内存对象才允许被销毁。上述方法关键是 对该对象的引用必须成对登记,如果引用次数多于释放次数,则该对象的引用技术将一直 大于l,即一直不会被释放,而如果引用次数少于释放次数,系统将试图释放已经被释放的 内存对象,从而导致系统异常。 实际应用系统中,对象的使用环境比较复杂(例如,同一个对象在多处被多个程 序使用过,部分程序异常崩溃等),将造成上述的引用计数出现偏差,系统容错处理将直接 导致内存对象不能销毁,从而不能释放其占用的内存空间,则此对象就会成为内存垃圾。当 类似对象越来越多的产生时,最后就可能会造成内存泄漏,严重影响计算机的性能,甚至造 成死机。 中国专利02121418. 2提到"一种软件内存泄漏的检查方法",该方法通过先确定
应用程序申请的内存块,以及所申请的不同内存块被占用的时间,在应用程序运行时,记录
其申请内存块和释放内存块的信息,最后确定超过占用时间尚未释放的内存块,通过上述
内存块确定应用程序的内存泄漏点。中国专利申请200710074944. 3提到"一种检测内存泄
漏的方法",该方法通过首先建立动态存储内存块信息的链表,并设定同一申请位置长生存
时间内存块数量阈值;其次,遍历所述链表,检查各链表元素存储的内存块信息得到各内存
块的生存时间,将各长生存时间内存块根据所述各长生存时间内存块被申请的位置分类,
若同一申请位置上被申请的所述长生存时间内存块数量大于所述同一申请位置长生存时
间内存块数量阈值,则认为所述各长生存时间内存块发生了内存泄漏。 上述两个方法只是对判断内存是否泄漏的方法进行了改进,而对于程序局部崩溃
这种异常情况,也不能解决内存泄漏的问题。 随着网络发展、程序远程调用越来越多,并且基于服务的程序越来越多,个别模块 的崩溃不能影响系统整体的运行,这样就提出对内存管理更好的方法,而内存管理方面,不 仅是需要发现和定位内存泄漏,更重要的是需要方便及时的解决上述应用条件下的内存泄 漏问题。

发明内容
针对现有技术中存在的问题,本发明的目的是提供一种防止内存泄漏的方法,该 方法通过创建代理访问对象,使用户可以通过代理访问对象访问实际对象,能及时准确地 释放内存,从而有效降低计算机内存的泄漏。
为了实现上述发明目的,本发明采用的技术方案为一种防止内存泄漏的方法,包 括如下步骤 (1)在创建实际对象的同时,创建一个对应的访问代理对象;
(2)用户通过对应的访问代理对象访问实际对象;
(3)程序结束后,释放访问代理对象指向实际对象的指针;
(4)销毁实际对象以释放内存空间。 进一步,如上所述的防止内存泄漏的方法,在步骤(1)中,创建的访问代理对象中 记录的信息为实际对象在内存中的地址。 进一步,如上所述的防止内存泄漏的方法,在步骤(2)中,用户通过指针访问访问 代理对象,访问代理对象通过指针访问实际对象。 更进一步,如上所述的防止内存泄漏的方法,在步骤(2)中,多个用户能够通过多 个指针同时指向一个访问代理对象来引用对应的实际对象。 进一步,如上所述的防止内存泄漏的方法,在步骤(3)中,当访问代理对象指向实 际对象的指针被释放后,访问代理对象中记录的信息为空地址,标志该访问代理对象能够 被重置或者等待被销毁。 进一步,如上所述的防止内存泄漏的方法,在步骤(4)中,先销毁访问代理对象, 继而销毁实际对象。 进一步,如上所述的防止内存泄漏的方法,在步骤(4)中,访问代理对象在系统运 行时被统一 回收处理,或者被新对象重置换。 本发明的有益效果如下本发明通过创建与实际对象相对应的访问代理对象,来 访问实际对象,这样能够在调用结束后通过释放访问代理对象指向实际对象的指针,释放 实际对象,从而减少内存泄漏,而访问代理对象本身仅占用少量的内存,即使不释放访问代 理对象,也不会对计算机的性能构成大的影响。


图1是本发明所述方法的总体流程示意图;
图2是访问对象流程示意图;
图3是释放对象流程示意图。
具体实施例方式
下面结合说明书附图和具体实施方式
对本发明作进一步的描述。
如图1所示,一种防止内存泄漏的方法,包括如下步骤 (1)创建访问代理对象11 :在创建实际对象的同时,创建一个对应的访问代理对 象; (2)建立访问关系12 :通过对应的访问代理对象访问实际对象; (3)释放访问代理对象指针13 :释放访问代理对象指向实际对象的指针; (4)释放对象14 :销毁实际对象以释放内存空间。 本实施例中,访问代理对象中存储的信息为实际对象在内存中的地址,用户通过 指针访问访问代理对象,可以允许多个用户同时指向访问代理对象,访问代理对象通过指针访问实际对象,实际对象中保存用户所需要的数据信息。 本实施例中,在程序结束时需要销毁实际对象,通过销毁访问代理对象指向实际 对象的指针,释放实际对象,从而释放实际对象所占用的内存空间。 本实施例中,如图2所示,多个用户21能够通过访问代理对象22访问实际对象 23,访问代理对象中保存实际对象的内存地址,访问代理对象通过指针指向实际对象,允许 多个用户指向访问代理对象,只有访问代理对象可以访问实际对象,用户通过上述指向关 系访问实际对象。 本实施例中,如图3所示,当程序调用完毕,需要释放实际对象以释放对应的内存 空间,多个用户21通过指针指向代理访问对象,通过释放访问代理对象22指向实际对象的 指针,释放实际对象23,并释放访问代理对象,继而销毁实际对象。由于很难控制访问代理 对象的指针能够被正确及时的释放掉,并且访问代理对象中存储的信息为实际对象的内存 地址,所占内存较小,因此可以不释放访问代理对象。 本实施例中,访问代理对象在系统运行时可统一回收处理或者被新对象重置换, 当访问代理对象指向实际对象的指针被释放后,访问代理对象中记录的信息为空地址,标 志该访问对象可以被重置或等待销毁。 考虑到在此公开的对本发明的描述和特殊的实施例,本发明的其他实施例对于本 领域的技术人员来说是显而易见的。这些说明和实施例仅作为例子来考虑,它们都属于由 所附权利要求所指 的本发明的保护范围和精神之内。
权利要求
一种防止内存泄漏的方法,包括如下步骤(1)在创建实际对象的同时,创建一个对应的访问代理对象;(2)用户通过对应的访问代理对象访问实际对象;(3)程序结束后,释放访问代理对象指向实际对象的指针;(4)销毁实际对象以释放内存空间。
2. 如权利要求l所述的防止内存泄漏的方法,其特征在于在步骤(1)中,创建的访问 代理对象中记录的信息为实际对象在内存中的地址。
3. 如权利要求l所述的防止内存泄漏的方法,其特征在于在步骤(2)中,用户通过指 针访问访问代理对象,访问代理对象通过指针访问实际对象。
4. 如权利要求3所述的防止内存泄漏的方法,其特征在于在步骤(2)中,多个用户能 够通过多个指针同时指向一个访问代理对象来引用对应的实际对象。
5. 如权利要求l所述的防止内存泄漏的方法,其特征在于在步骤(3)中,当访问代理 对象指向实际对象的指针被释放后,访问代理对象中记录的信息为空地址,标志该访问代 理对象能够被重置或者等待被销毁。
6. 如权利要求1或5所述的防止内存泄漏的方法,其特征在于在步骤(4)中,先销毁 访问代理对象,继而销毁实际对象。
7. 如权利要求1或5所述的防止内存泄漏的方法,其特征在于在步骤(4)中,访问代理对象在系统运行时被统一回收处理,或者被新对象重置换。
全文摘要
本发明涉及一种防止内存泄漏的方法,属于内存管理软件技术领域。该方法通过创建与实际对象相对应的访问代理对象,来访问实际对象,这样能够在调用结束后通过释放访问代理对象指向实际对象的指针,释放实际对象,而访问代理对象本身仅占用少量的内存,即使不释放访问代理对象,也不会对计算机的性能构成大的影响。本发明能及时准确地释放内存,从而有效降低计算机内存的泄漏。
文档编号G06F9/50GK101770421SQ20081024662
公开日2010年7月7日 申请日期2008年12月31日 优先权日2008年12月31日
发明者李平立, 梁长庆, 王会波, 龙武 申请人:北京大学;方正国际软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1