[发明专利]内存空洞检测和清除的方法和装置有效
申请号: | 201110278226.4 | 申请日: | 2011-09-19 |
公开(公告)号: | CN102999427A | 公开(公告)日: | 2013-03-27 |
发明(设计)人: | 宋久元 | 申请(专利权)人: | 汉王科技股份有限公司 |
主分类号: | G06F12/02 | 分类号: | G06F12/02 |
代理公司: | 北京中博世达专利商标代理有限公司 11274 | 代理人: | 申健 |
地址: | 100193 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 内存 空洞 检测 清除 方法 装置 | ||
技术领域
本发明涉及内存优化领域,尤其涉及一种内存空洞检测和清除的方法和装置。
背景技术
在Linux和Unix操作系统中,内存管理器对于小于规定阈值(例如128k)的内存申请是通过直接调整堆顶指针的位置来完成的。在释放堆中对应的内存块时,当内存管理器发现堆顶有连续的所设阈值大小的空间是空闲的时候,就会调整堆顶的位置,将占用的内存返回给系统。此时,内核会通过删除相应的线性区,来释放占用的物理内存。如果堆顶有一块正在使用的内存,而下面有很大的连续内存已经被释放掉了,那么这块内存和对应的物理内存是不能够被立即释放。这也就是说,只要堆顶部分的申请内存还在占用,下面释放的内存再多,都不会被返回到系统中,仍然占用着物理内存,这就是所谓的内存空洞。
在实现本发明的过程中,发明人发现现有技术中对于内存较小的设备,在经过大量的小块内存分配就不可避免的会产生内存空洞,造成内存空间的闲置,这样对于内存空间非常宝贵的设备来说,内存不能被充分利用,影响了其他内存申请。
发明内容
本发明的实施例提供一种内存空洞检测和清除的方法和装置,减少了内存空洞的出现,提高了内存的利用率。
为达到上述目的,本发明采用如下技术方案:
一种内存空洞检测和清除的方法,包括:
当进程每次从堆中申请内存成功时,内存空洞检测装置将所述申请成功的内存的首地址、大小和状态作为一条内存使用记录存入内存记录链表中,所述状态为使用;
当第一条内存使用记录存入内存记录链表中时,所述内存空洞检测装置启动内存空洞检测装置中的定时器;
所述进程从堆中申请成功的内存被释放时,所述内存空洞检测装置将所述内存记录链表中与所述被释放的内存对应的内存使用记录中的状态修改为释放;
当到达所述定时器规定的时间时,所述内存空洞检测装置从所述内存记录链表的链表首开始,分别查找出第一条状态为释放的内存使用记录中的首地址一,和在所述首地址一之后查找到的第一条状态为使用的内存使用记录中的首地址二,所述首地址一和首地址二之间的堆中内存区域为内存空洞,其中所述内存空洞的大小为所述首地址一和首地址二之间的堆中内存区域的所有内存大小的总和,所述链表首为存入所述内存记录链表中的第一条内存使用记录;
当所述内存空洞的大小大于等于规定阈值时,所述内存空洞检测装置清除内存空洞,重启定时器。
一种内存空洞检测和清除的装置,包括:
记录单元,用于当进程每次从堆中申请内存成功时,内存空洞检测装置将所述申请成功的内存的首地址、大小和状态作为一条内存使用记录存入内存记录链表中,所述状态为使用;
启动单元,用于当第一条内存使用记录存入内存记录链表中时,所述内存空洞检测装置启动内存空洞检测装置中的定时器;
修改记录单元,用于所述进程从堆中申请成功的内存被释放时,所述内存空洞检测装置将所述内存记录链表中与所述被释放的内存对应的内存使用记录中的状态修改为释放;
检测单元,用于当到达所述定时器规定的时间时,所述内存空洞检测装置从所述内存记录链表的链表首开始,分别查找出第一条状态为释放的内存使用记录中的首地址一,和在所述首地址一之后查找到的第一条状态为使用的内存使用记录中的首地址二,所述首地址一和首地址二之间的堆中内存区域为内存空洞,其中所述内存空洞的大小为所述首地址一和首地址二之间的堆中内存区域的所有内存大小的总和,所述链表首为存入所述内存记录链表中的第一条内存使用记录;
清除单元,用于当所述内存空洞的大小大于等于规定阈值时,所述内存空洞检测装置清除内存空洞,重启定时器。
本发明实施例提供的一种内存空洞检测和清除的方法和装置,内存空洞检测装置将进程从堆中申请成功的内存的首地址、大小和状态作为一条内存使用记录存入内存记录链表中,通过所述内存记录链表中的内存使用记录的状态,检测堆中的内存空洞,并将其清除。本发明实施例解决了现有技术中,对于内存较小的设备,在经过大量的小块内存分配就会产生内存空洞,内存不能被充分利用的问题,减少了内存空洞的出现,提高了内存的利用率。
附图说明
图1为本发明实施例一提供的一种内存空洞检测和清除的方法主要操作步骤流程图;
图2为本发明实施例一提供的一种内存空洞检测和清除的方法中内存空洞示意图;
图3为本发明实施例一提供的一种内存空洞检测和清除的方法中内存空洞释放示意图;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于汉王科技股份有限公司,未经汉王科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110278226.4/2.html,转载请声明来源钻瓜专利网。
- 上一篇:实心胎轮辋
- 下一篇:一种具有凸状轮辐的钢圈