内存空洞检测和清除的方法和装置制造方法及图纸

技术编号:8517296 阅读:781 留言:0更新日期:2013-03-30 20:03
本发明专利技术实施例公开了一种内存空洞检测和清除的方法和装置,涉及内存优化领域,减少了内存空洞的出现,提高了内存的利用率。所述方法包括:当进程每次从堆中申请内存成功时,内存空洞检测装置将所述申请成功的内存的首地址、大小和状态作为一条内存使用记录存入内存记录链表中;所述内存空洞检测装置启动内存空洞检测装置中的定时器;所述内存空洞检测装置将所述内存记录链表中与所述被释放的内存对应的内存使用记录中的状态修改为释放;当到达所述定时器规定的时间时,检测内存空洞;当所述内存空洞的大小大于等于规定阈值时,所述内存空洞检测装置清除内存空洞,重启定时器。本发明专利技术实施例主要应用在内存优化处理过程中。

【技术实现步骤摘要】

本专利技术涉及内存优化领域,尤其涉及一种内存空洞检测和清除的方法和装置
技术介绍
在Linux和Unix操作系统中,内存管理器对于小于规定阈值(例如128k)的内存 申请是通过直接调整堆顶指针的位置来完成的。在释放堆中对应的内存块时,当内存管理 器发现堆顶有连续的所设阈值大小的空间是空闲的时候,就会调整堆顶的位置,将占用的 内存返回给系统。此时,内核会通过删除相应的线性区,来释放占用的物理内存。如果堆顶 有一块正在使用的内存,而下面有很大的连续内存已经被释放掉了,那么这块内存和对应 的物理内存是不能够被立即释放。这也就是说,只要堆顶部分的申请内存还在占用,下面释 放的内存再多,都不会被返回到系统中,仍然占用着物理内存,这就是所谓的内存空洞。在实现本专利技术的过程中,专利技术人发现现有技术中对于内存较小的设备,在经过大 量的小块内存分配就不可避免的会产生内存空洞,造成内存空间的闲置,这样对于内存空 间非常宝贵的设备来说,内存不能被充分利用,影响了其他内存申请。
技术实现思路
本专利技术的实施例提供一种内存空洞检测和清除的方法和装置,减少了内存空洞的 出现,提高了内存的利用率。为达到上述目的,本专利技术采用如下技术方案一种内存空洞检测和清除的方法,包括当进程每次从堆中申请内存成功时,内存空洞检测装置将所述申请成功的内存的 首地址、大小和状态作为一条内存使用记录存入内存记录链表中,所述状态为使用;当第一条内存使用记录存入内存记录链表中时,所述内存空洞检测装置启动内存 空洞检测装置中的定时器;所述进程从堆中申请成功的内存被释放时,所述内存空洞检测装置将所述内存记 录链表中与所述被释放的内存对应的内存使用记录中的状态修改为释放;当到达所述定时器规定的时间时,所述内存空洞检测装置从所述内存记录链表的 链表首开始,分别查找出第一条状态为释放的内存使用记录中的首地址一,和在所述首地 址一之后查找到的第一条状态为使用的内存使用记录中的首地址二,所述首地址一和首地 址二之间的堆中内存区域为内存空洞,其中所述内存空洞的大小为所述首地址一和首地址 二之间的堆中内存区域的所有内存大小的总和,所述链表首为存入所述内存记录链表中的 第一条内存使用记录;当所述内存空洞的大小大于等于规定阈值时,所述内存空洞检测装置清除内存空 洞,重启定时器。一种内存空洞检测和清除的装置,包括记录单元,用于当进程每次从堆中申请内存成功时,内存空洞检测装置将所述申请成功的内存的首地址、大小和状态作为一条内存使用记录存入内存记录链表中,所述状 态为使用;启动单元,用于当第一条内存使用记录存入内存记录链表中时,所述内存空洞检 测装置启动内存空洞检测装置中的定时器;修改记录单元,用于所述进程从堆中申请成功的内存被释放时,所述内存空洞检 测装置将所述内存记录链表中与所述被释放的内存对应的内存使用记录中的状态修改为 释放;检测单元,用于当到达所述定时器规定的时间时,所述内存空洞检测装置从所述 内存记录链表的链表首开始,分别查找出第一条状态为释放的内存使用记录中的首地址 一,和在所述首地址一之后查找到的第一条状态为使用的内存使用记录中的首地址二,所 述首地址一和首地址二之间的堆中内存区域为内存空洞,其中所述内存空洞的大小为所述 首地址一和首地址二之间的堆中内存区域的所有内存大小的总和,所述链表首为存入所述 内存记录链表中的第一条内存使用记录;清除单元,用于当所述内存空洞的大小大于等于规定阈值时,所述内存空洞检测 装置清除内存空洞,重启定时器。本专利技术实施例提供的一种内存空洞检测和清除的方法和装置,内存空洞检测装置 将进程从堆中申请成功的内存的首地址、大小和状态作为一条内存使用记录存入内存记录 链表中,通过所述内存记录链表中的内存使用记录的状态,检测堆中的内存空洞,并将其清 除。本专利技术实施例解决了现有技术中,对于内存较小的设备,在经过大量的小块内存分配就 会产生内存空洞,内存不能被充分利用的问题,减少了内存空洞的出现,提高了内存的利用 率。附图说明图1为本专利技术实施例一提供的一种内存空洞检测和清除的方法主要操作步骤流 程图2为本专利技术实施例一提供的一种内存空洞检测和清除的方法中内存空洞示意 图3为本专利技术实施例一提供的一种内存空洞检测和清除的方法中内存空洞释放 示意图4为本专利技术实施例一提供的一种内存空洞检测和清除的方法中堆中内存与所 述内存记录链表的对应关系;图5为本专利技术实施例一提供的一种内存空洞检测和清除的方法整体操作步骤流 程图6为本专利技术实施例一提供的一种内存空洞检测和清除的方法中,堆中申请成功 的内存被释放的同时,所述内存记录链表中对应的显示状态;图7为本专利技术实施例一提供的一种内存空洞检测和清除的方法中,当累加和大于 等于规定阈值时,堆与所述内存记录链表中的处理结果;图8为本专利技术实施例一提供的一种内存空洞检测和清除的方法中,当累加和小于 规定阈值时,堆与所述内存记录链表中的处理结果;图9为本专利技术实施例一提供的一种内存空洞检测和清除的方法中,检测到内存空 洞时,堆与所述内存记录链表中的状态;图10为本专利技术实施例一提供的一种内存空洞检测和清除的方法中,将堆中内存 复制到堆外的示意图11为本专利技术实施例一提供的一种内存空洞检测和清除的方法中,将堆中内存 被操作系统回收后,堆与所述内存记录链表中的状态;图12为本专利技术实施例一提供的一种内存空洞检测和清除的方法中,堆外内存恢 复到堆中以后,堆与所述内存记录链表中的状态;图13为本专利技术实施例二提供的一种内存空洞检测和清除的装置的主要装置结构 图14为本专利技术实施例二提供的一种内存空洞检测和清除的装置的整体装置结构 图15为本专利技术实施例二提供的一种内存空洞检测和清除的装置中清除单元的结 构图。具体实施方式下面结合附图对本专利技术实施例一种内存空洞检测和清除的方法和装置进行详细 描述。实施例一本专利技术实施例提供一种内存空洞检测和清除的方法,如图1所示,操作步骤包括101、当进程每次从堆中申请内存成功时,内存空洞检测装置将所述申请成功的内 存的首地址、大小和状态作为一条内存使用记录存入内存记录链表中,所述状态为使用;102、当第一条内存使用记录存入内存记录链表中时,所述内存空洞检测装置启动 内存空洞检测装置中的定时器;103、所述进程从堆中申请成功的内存被释放时,所述内存空洞检测装置将所述内 存记录链表中与所述被释放的内存对应的内存使用记录中的状态修改为释放;104、当到达所述定时器规定的时间时,所述内存空洞检测装置从所述内存记录链 表的链表首开始,分别查找出第一条状态为释放的内存使用记录中的首地址一,和在所述 首地址一之后查找到的第一条状态为使用的内存使用记录中的首地址二,所述首地址一和 首地址二之间的堆中内存区域为内存空洞,其中所述内存空洞的大小为所述首地址一和首 地址二之间的堆中内存区域的所有内存大小的总和,所述链表首为存入所述内存记录链表 中的第一条内存使用记录;105、当所述内存空洞的大小大于等于规定阈值时,所述内存空洞检测装置清除内 存空洞,重启定时器。本专利技术实施例提供的一种内存空洞检测和清除的方法,内存空洞检测装置将进程 从堆中申请成功的内存的首地址、大小和状态作为一条内存使用记录存入内存记录链表 中,通过所述内存记录链表中的内存使用记录的本文档来自技高网...

【技术保护点】
一种内存空洞检测和清除的方法,其特征在于,包括:当进程每次从堆中申请内存成功时,内存空洞检测装置将所述申请成功的内存的首地址、大小和状态作为一条内存使用记录存入内存记录链表中,所述状态为使用;当第一条内存使用记录存入内存记录链表中时,所述内存空洞检测装置启动内存空洞检测装置中的定时器;所述进程从堆中申请成功的内存被释放时,所述内存空洞检测装置将所述内存记录链表中与所述被释放的内存对应的内存使用记录中的状态修改为释放;当到达所述定时器规定的时间时,所述内存空洞检测装置从所述内存记录链表的链表首开始,分别查找出第一条状态为释放的内存使用记录中的首地址一,和在所述首地址一之后查找到的第一条状态为使用的内存使用记录中的首地址二,所述首地址一和首地址二之间的堆中内存区域为内存空洞,其中所述内存空洞的大小为所述首地址一和首地址二之间的堆中内存区域的所有内存大小的总和,所述链表首为存入所述内存记录链表中的第一条内存使用记录;当所述内存空洞的大小大于等于规定阈值时,所述内存空洞检测装置清除内存空洞,重启定时器。

【技术特征摘要】

【专利技术属性】
技术研发人员:宋久元
申请(专利权)人:汉王科技股份有限公司
类型:发明
国别省市:

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

1