一种内存管理方法及装置的制造方法

文档序号:9235348阅读:316来源:国知局
一种内存管理方法及装置的制造方法
【技术领域】
[0001]本发明涉及通信技术领域,尤其涉及一种内存管理方法及装置。
【背景技术】
[0002]通信系统中在进行业务传输或小区切换时,网络设备中应用模块用户将会频繁的进行接入与删除,每个应用模块用户需要维护多个协议实体的信息,涉及多项业务流程的建立与删除,在业务建立时,需要在网络设备中为该业务申请内存块,在该业务删除时,需要在网络设备中释放为该业务申请的内存块,当由于程序错误或其它原因导致某业务申请的内存块未能释放时,就出现了内存泄露,当内存泄露较多时,容易导致单板故障,业务异常等重大问题,并且这些问题难于定位,软件规模越大,越难定位。
[0003]现有技术中针对内存泄露,主要有以下几种解决方案:
[0004]方案一:针对特定操作系统提出的内存泄漏保护方法,例如:vxWorks,Linux ;选用Java开发环境,Java有垃圾回收机制,可以很大程度避免内存泄漏情况发生。该方案仅针对特定操作系统,有局限性,Java可以从底层机制防止内存泄漏,但效率慢,网络设备一般不使用Java。
[0005]方案二:增加内存管理模块,添加一些统计,事件,日志等信息,由这些信息定位内存泄漏问题。该方案中泄漏内存不能自恢复,需要通过记录信息分析原因,然后打补丁解决冋题。
[0006]方案三:内存管理模块给每个在用内存块增加时间标签,如果某个内存块使用时间超过某个设置的时长门限,则判断该内存已泄漏,强制释放。该方案中时长门限难以确定,有些场景内存块可能占用较长时间或一直占用,例如:无线网络设备里的小区内存资源,而且该方案释放内存有滞后性,泄漏内存需要等待时长门限后才能释放。
[0007]综上所述,现有技术提供的三种方案均不能用于解决网络设备中的内存泄露问题,网络设备中应用模块用户频繁接入与删除,每一应用模块用户均涉及多项业务的建立与删除,在业务删除过程中由于程序错误或其它原因导致应用模块用户的某些业务申请的内存块未能释放,从而出现内存泄露,进而导致单板故障、业务异常,影响网络设备的正常使用。

【发明内容】

[0008]本发明实施例提供了一种内存管理方法及装置,用以当存在内存泄露时,可以快速恢复泄露的内存,避免由于内存泄露导致单板故障、业务异常。
[0009]本发明实施例提供的一种内存管理方法,该方法包括:当接收到应用模块用户申请内存的请求消息时,根据该请求消息为所述应用模块用户分配一个内存块,并且建立该内存块被该应用模块用户占用的记录信息;当确定需要释放为所述应用模块用户分配的任一内存块时,释放该内存块,并且删除该内存块被该应用模块用户占用的记录信息;当需要释放所述应用模块用户时,若确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息,则释放该记录信息中记录的被该应用模块用户占用的内存块,并且删除该内存块被该应用模块用户占用的记录信息。
[0010]本发明实施例提供的上述方法中,接收到应用模块用户申请内存的请求消息时,根据该请求消息为应用模块用户分配一个内存块,建立该内存块被该应用模块用户占用的记录信息,当确定需要释放该内存块时,释放该内存块,并且删除该内存块被该应用模块用户占用的记录信息,则当需要释放应用模块用户时,若确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息,则确定该应用模块用户对应的内存块未能完全释放,发生内存泄露,则释放该记录信息中记录的被该应用模块用户占用的内存块,恢复泄露的内存,与现有技术中由于程序错误或其它原因导致应用模块用户的某些业务申请的内存块未能释放而引起内存泄露,进而导致单板故障、业务异常相比,当需要释放应用模块用户时,若确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息,则释放该记录信息中记录的被该应用模块用户占用的内存块,也即检测到内存泄露时,及时释放泄露的内存,避免由于内存泄露导致单板故障、业务异常,而且实现简单高效。
[0011]在一种可能的实施方式中,本发明实施例提供的上述方法中,所述根据该请求消息为所述应用模块用户分配一个内存块,并且建立该内存块被该应用模块用户占用的记录信息,具体包括:针对为该应用模块用户分配的每一内存块:在预设的内存管理链表中存储所述应用模块用户标识与该内存块属性信息之间的对应关系,其中,所述内存管理链表中的表项与内存块一一对应,用于记录每一内存块被应用模块用户占用的记录信息,所述内存块属性信息包括内存块的标识和地址信息。
[0012]在一种可能的实施方式中,本发明实施例提供的上述方法中,所述内存管理链表中包括忙链表和闲链表,当为应用模块用户分配一内存块时,从所述闲链表中获取一表项存储该内存块被该应用模块用户占用的记录信息,并添加到所述忙链表中。
[0013]在一种可能的实施方式中,本发明实施例提供的上述方法中,在从所述闲链表中获取一表项存储该内存块被该应用模块用户占用的记录信息之后,该方法还包括:在预先存储的内存关系表中存储所述表项标识与内存块标识之间的对应关系;当确定需要释放为所述应用模块用户分配的任一内存块时,释放该内存块,并且删除该内存块被该应用模块用户占用的记录信息,具体包括:当确定需要释放为所述应用模块用户分配的任一内存块时,释放该内存块,并根据所述内存关系表以及该内存块标识,确定该内存块标识对应的表项,删除该表项中存储的该内存块被该应用模块用户占用的记录信息;然后,将该表项添加到闲链表中。
[0014]在一种可能的实施方式中,本发明实施例提供的上述方法中,通过如下方式确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息:当所述内存管理链表的忙链表中存在所述应用模块用户标识与内存块属性信息之间的对应关系时,确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息。
[0015]在一种可能的实施方式中,本发明实施例提供的上述方法中,所述忙链表的每一表项中还记录有应用模块用户申请的内存块所处理的业务信息;所述确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息之后,该方法还包括:将记录有该记录信息的表项中记录的应用模块用户申请的内存块所处理的业务信息进行转存。
[0016]本发明实施例提供的上述方法中,在忙链表的每一表项中记录应用模块用户申请的内存块所处理的业务信息,当需要释放应用模块用户时,若忙链表中任一表项中仍然存储有该应用模块用户对应的内存块被该应用模块用户占用的记录信息,则该应用模块用户占用的内存块存在内存泄露,则将该记录有记录信息的表项中记录的应用模块用户申请的内存块所处理的业务信息进行转存,便于后续内存泄露定位。
[0017]在一种可能的实施方式中,本发明实施例提供的上述方法中,预先设置多个内存管理链表,并且,该方法还包括:当接入多个应用模块用户时,对所述多个应用模块用户进行分组,得到多个应用模块用户组,建立所述应用模块用户组与内存管理链表之间的映射关系;通过如下方式确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息:确定该应用模块用户所在的应用模块用户组,并根据所述映射关系,确定所述应用模块用户对应的内存管理链表,当确定该内存管理链表的忙链表中存在所述应用模块用户标识与内存块属性信息之间的对应关系时,确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息。
[0018]本发明实施例提供的上述方法中,当预先设置多个内存管理链表,并且接入的应用模块用户为多个时,对多个应用模块用户进行分组,得到多个应用模块用户组,建立应用模块用户组与内存管理链表之间的映射关系,则可以通过如下方式确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息:确定该应用模块用户所在的应用模块用户组,并根据所述映射关系,确定应用模块用户对应的内存管理链表,当确定该内存管理链表的忙链表中存在应用模块用户标识与内存块属性信息之间的对应关系时,确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息,确定应用模块用户所在的应用模块用户组,并根据映射关系确定该应用模块用户组对应的内存管理链表,在该内存管理链表中的忙链表中查找是否存在应用模块用户标识与内存块属性信息之间的对应关系,从而避免在预先设置的多个内存管理链表中查找是否存在应用模块用户标识与内存块属性信息之间的对应关系,缩小内存泄露的检测范围,提高内存泄露的检测效率。
[0019]本发明实施例提供的一种内存管理装置,包括:内存分配单元,用于当接收到应用模块用户申请内存的请求消息时,根据该请求消息为所述应用模块用户分配一个内存块,并且建立该内存块被该应用模块用户占用的记录信息;内存释放单元,连接至所述内存分配单元,用于当确定需要释放为所述应用模块用户分配的任一内存块时,释放该内存块,并且删除该内存块被该应用模块用户占用的记录信息;处理单元,连接至所述内存分配单元和所述内存
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1