内存泄漏检测及恢复的方法技术

技术编号:2849037 阅读:270 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开一种内存泄漏检测及防止的方法,包括设置步骤,在操作系统中,增加用于记录内存块被占用时间的时间标签;赋值步骤,内存管理模块分配内存块时,对时间标签赋值,以记录分配该内存块时的系统时间,并在对内存块访问时将时间标签的值更新为当前系统时间;检测步骤,检测内存块的时间标签;判断步骤,根据时间标签记录时间,判断内存块占用时长是否超过强制释放时间,如果超过则内存块泄漏,如果未超过,则未泄漏。可以根据检测结果判断是否释放内存块,也可以在检测到泄漏时直接释放。这样,检测方便且有效防止内存泄漏。

【技术实现步骤摘要】

本专利技术涉及计算机系统的内存管理,尤指一种。
技术介绍
内存是软件运行的必需资源,内存资源不足将导致软件运行异常,系统无法提供正常功能甚至退出服务。尤其是在面向消息处理的软件架构中,各个进程之间都是通过消息进行通信的,需要为每条消息分配合适的内存块用于消息内容的缓存,并在消息发出后释放该内存块。在软件长时间运行的过程中,可能由于各种原因导致分配的内存没有释放掉,从而产生内存泄漏,累积效应可能导致系统内存总量减少以至耗尽的现象。在这种情况下,系统一般是不能自行恢复的,严重时可能导致恶性循环,系统退出服务。针对于内存泄漏,现有技术中的解决方案,例如首先确定应用程序申请的内存块,以及所申请的不同内存块被占用的时间,在应用程序运行时,记录其申请内存块和释放内存块的信息,最后确定超过占用时间尚未释放的内存块,通过上述方法确定应用程序的内存泄露点,具体内容请参阅申请号为02121418的中国专利申请。上述现有技术方案的实质是通过采用增加的检测模块来确定内存块的泄漏,但具有如下缺陷仅能检测到检测模块软件启动后发生的内存泄漏情况,对于检测模块软件启动前的内存泄漏无法检测;没有提供防止泄漏的措施。
技术实现思路
本专利技术解决的一个问题是提供一种内存泄漏检测的方法,有效检测内存泄漏。本专利技术解决的另一个问题是提供一种内存泄漏防止的方法,有效检测内存泄漏并可以在发现内存泄漏后进行直接恢复。相应地,本专利技术内存泄漏检测的方法包括设置步骤,在操作系统中,增加用于记录内存块被占用时间的时间标签;赋值步骤,内存管理模块分配内存块时,对时间标签赋值,以记录分配该内存块时的系统时间,并在对内存块访问时将时间标签的值更新为当前系统时间;检测步骤,检测内存块的时间标签;判断步骤,根据时间标签记录时间,判断内存块占用时长是否超过强制释放时间,如果超过则内存块泄漏,如果未超过,则未泄漏。本专利技术内存泄漏防止的方法包括设置步骤,在操作系统中,增加用于记录内存块被占用时间的时间标签;赋值步骤,内存管理模块分配内存块时,对时间标签赋值,以记录分配该内存块时的系统时间,并在对内存块访问时将时间标签的值更新为当前系统时间;检测步骤,检测内存块的时间标签;执行步骤,根据时间标签记录时间,在内存块占用时长超过强制释放时间时,释放该内存块。设置步骤还包括时间标签属性域设置,所述时间标签属性域用于表示时间标签的属性,进一步包括表示内存块是否有效的有效性标签和表示内存块是否为全局内存块的全局标签。时间标签及时间标签属性域通过扩展内存块的属性信息的数据结构实现。执行步骤还包括将释放后的内存块的有效性标签设置为无效。检测步骤和执行步骤(检测步骤和判断步骤)包括如下步骤根据有效性标签的值,判断该内存块是否有效;如果该内存块无效,则不检测该内存块的时间标签;如果该内存块有效,则根据全局标签的值,判断该内存块是否为全局内存块,如果是全局内存块,则不检测该内存块的时间标签;如果不是全局内存块,则执行检测步骤。按检测周期执行检测步骤和执行步骤(检测步骤和判断步骤)。所述检测周期通过启动设置在内存管理模块中的周期定时器实现。所述强制释放时间根据内存块占用最长时间预估设置。本专利技术与现有技术相比,本专利技术具有以下优点通过对内存块增加时间标签并根据时间标签对已分配的内存块进行维护、检测和判断,内存泄漏检测方便且有效防止内存泄漏;通过有效性标签和全局标签防止误检测,排除不必要的检测;内存检测和维护可以人工启动和关闭,检测的周期可以作为系统参数进行动态调整。附图说明图1是本专利技术内存泄漏检测的方法的流程图。图2是本专利技术内存泄漏防止的方法的流程图。具体实施例方式本专利技术可以检测内存块泄漏,记录检测结果以方便问题定位和检查,再根据检测结果判断是否释放内存块;或者在发现内存块泄漏时直接进行释放恢复,防止系统恶化,提高系统长时间运行的稳定性。系统中的消息都是有时效性的,超过一定时间未得到处理的消息是无效,其分配的内存块也就判断为泄漏,可以被释放。请参照图1,根据所述原理,本专利技术内存泄漏检测的方法包括设置步骤,在操作系统中,增加用于记录内存块被占用时间的时间标签;赋值步骤,内存管理模块分配内存块时,对时间标签赋值,以记录分配该内存块时的系统时间,并在对内存块访问时将时间标签的值更新为当前系统时间; 检测步骤,检测内存块的时间标签;判断步骤,根据时间标签记录时间,判断内存块占用时长是否超过强制释放时间,如果超过则内存块泄漏,如果未超过,则未泄漏。记录检测结果以方便问题定位和检查,再根据检测结果判断是否释放内存块,如果需要释放,则可通过操作系统API(应用编程接口)或直接修改内存块的状态为空闲实现。同理,请参照图2所示,本专利技术内存泄漏防止的方法,包括设置步骤,在操作系统中,增加用于记录内存块被占用时间的时间标签;赋值步骤,内存管理模块分配内存块时,对时间标签赋值,以记录分配该内存块时的系统时间,并在对内存块访问时将时间标签的值更新为当前系统时间;检测步骤,检测内存块的时间标签;执行步骤,根据时间标签记录时间,在内存块占用时长(即当前时间与上次访问时间的时间间隔),超过强制释放时间时,释放该内存块(可以通过调用内存管理模块的接口来释放)。所述强制释放时间根据内存块占用最长时间预估设置所述赋值步骤中,内存块是由应用模块在需要时向操作系统的内存管理模块申请的,内存管理模块响应申请并分配内存块,内存块申请成功后,应用模块就可以对这个分配的内存块进行访问(读/写)操作,在读写操作时,应用模块需要同时调用内存管理模块提供的接口更新内存块的时间标签为当前系统时间。实时操作系统本身是有一个时间系统的,记录的时间以操作系统的时间为基准计算。在操作系统中还增加设置时间标签属性,用于表示时间标签的属性,进一步包括表示内存块是否有效的有效性标签和表示内存块是否全局内存块的全局标签。在操作系统中,每个内存块都有一个数据结构保存该内存块的属性信息,如起始地址、内存块大小等,时间标签和时间标签属性域通过扩展内存块的属性信息的数据结构实现,即增加时间标签和时间标签属性域就是在这个数据结构中增加两个元素,标识该内存块的占用时间。有效性标签和全局标签同时间标签都是内存块的一个属性。有效性标签就是一个标识符,例如取值为是(1)或者否(0)(否标识该内存块不是有效内存,在内存管理模块扫描时不需要检测和判断时间标签;是标识该内存块是有效内存,在内存管理模块扫描时需要检测和判断时间标签,如果时间标签太老则要强制释放该内存)。释放后(或者检测出内存块泄漏)的内存块的时间标签属性设置为无效,例如可设置为最大值,全F。全局标签类似有效性标签,标识该内存块是否全局,例如取值是(1)或者否(0)(是标识该内存块是全局内存块,在内存管理模块扫描时不需要检测和判断时间标签;否标识该内存块不是全局内存块,在内存管理模块扫描时需要检测和判断时间标签,如果时间标签太老则要强制释放该内存)。所述检测步骤和执行步骤(检测步骤和判断步骤)之间还包括如下步骤根据有效性标签的值,判断该内存块是否有效;如果该内存块无效,则不检测该内存块的时间标签;如果该内存块有效,则根据全局标签的值,判断该内存块是否为全局内存块;如果是全局内存块,则不检测该内存块的时间标签(由于全局内存块是本文档来自技高网...

【技术保护点】
一种内存泄漏检测的方法,其特征在于,包括:设置步骤,在操作系统中,增加用于记录内存块被占用时间的时间标签;赋值步骤,内存管理模块分配内存块时,对时间标签赋值,以记录分配该内存块时的系统时间,并在对内存块访问时将时间标签的值更 新为当前系统时间;检测步骤,检测内存块的时间标签;判断步骤,根据时间标签记录时间,判断内存块占用时长是否超过强制释放时间,如果超过则内存块泄漏,如果未超过,则未泄漏。

【技术特征摘要】
1.一种内存泄漏检测的方法,其特征在于,包括设置步骤,在操作系统中,增加用于记录内存块被占用时间的时间标签;赋值步骤,内存管理模块分配内存块时,对时间标签赋值,以记录分配该内存块时的系统时间,并在对内存块访问时将时间标签的值更新为当前系统时间;检测步骤,检测内存块的时间标签;判断步骤,根据时间标签记录时间,判断内存块占用时长是否超过强制释放时间,如果超过则内存块泄漏,如果未超过,则未泄漏。2.如权利要求1所述的内存泄漏检测的方法,其特征在于,设置步骤还包括时间标签属性域设置,所述时间标签属性域用于表示时间标签的属性,进一步包括表示内存块是否有效的有效性标签和表示内存块是否为全局内存块的全局标签。3.如权利要求2所述的内存泄漏检测的方法,其特征在于,时间标签及时间标签属性域通过扩展内存块的属性信息的数据结构实现。4.如权利要求2所述的内存泄漏检测的方法,其特征在于,检测步骤和判断步骤之间还包括根据有效性标签的值,判断该内存块是否有效;如果该内存块无效,则不检测该内存块的时间标签;如果该内存块有效,则根据全局标签的值,判断该内存块是否为全局内存块,如果是全局内存块,则不检测该内存块的时间标签;如果不是全局内存块,则执行检测步骤。5.如权利要求1至4任一项所述的内存泄漏检测的方法,其特征在于,强制释放时间根据内存块占用最长时间预估设置。6.如权利要求1至4任一项所述的内存泄漏检测的方法,其特征在于,按检测周期执行检测步骤和判断步骤。7.一种内存泄漏防止的方法,其特征在于,包括设置步骤,在操作系统中,增加用于记录内存块被占用时间的时间标签...

【专利技术属性】
技术研发人员:余明
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1