一种内存池的管理方法技术

技术编号:18398169 阅读:17 留言:0更新日期:2018-07-08 19:11
本发明专利技术公开了一种内存池的管理方法,该方法包括:控制第一内存池提供动态内存分配操作和内存释放操作,并且控制第二内存池不提供动态内存分配操作和内存释放操作;在第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,控制第一内存池仅提供内存释放操作,并且控制第二内存池提供动态内存分配操作和内存释放操作;在第一内存池的内存全部释放之后,清空第一内存池,以及控制第二内存池提供动态内存分配操作和内存释放操作,并且控制第一内存池不提供动态内存分配操作和内存释放操作。本发明专利技术解决了现有技术中存在的因内存池的chunk地址并非连续而无法释放整块block,导致内存占有量较高的技术问题,实现了将空闲内存自动回收的技术效果。

【技术实现步骤摘要】
一种内存池的管理方法
本申请涉及计算机领域,尤其涉及一种内存池的管理方法。
技术介绍
在进行服务器开发时,有时会遇到需要频繁申请释放内存的场景,如果每次都直接向操作系统申请,不仅会效率低下,而且会导致内存碎片,对此有不少库都实现了内存池,即向操作系统申请大块内存(block),再分成小块(chunk)进行管理,用户从内存池申请内存,释放时再还给内存池,内存池一直保留着大块内存,减少了和操作系统的交互,提高了动态内存分配的效率。在实际应用中,内存池为了满足动态内存分配释放高效的特点,往往是用链表方式管理这些chunk,申请释放都从链表头进行操作,以达到O(1)的时间复杂度。但这样也导致一个问题,就是当服务非常繁忙时,可能向内存池申请大量内存,甚至到几G,而后续当服务趋近平缓之后会向内存池归还这些内存,由于内存池中的chunk地址并非连续,因此无法释放整块block,所以内存池往往不会将这些内存归还给操作系统,这会导致内存占用量一直在峰值水平。因此,现有技术中存在因内存池的chunk地址并非连续而无法释放整块block,导致内存占有量较高的技术问题。
技术实现思路
本专利技术了提供了一种内存池的管理方法,以解决现有技术中存在的因内存池的chunk地址并非连续而无法释放整块block导致服务器的内存占有量较高的技术问题。为解决上述技术问题,本专利技术实施例第一方面提供了一种内存池的管理方法,所述方法包括:控制第一内存池提供动态内存分配操作和内存释放操作,并且控制第二内存池不提供动态内存分配操作和内存释放操作;在所述第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,控制所述第一内存池仅提供内存释放操作,并且控制所述第二内存池提供动态内存分配操作和内存释放操作;在所述第一内存池的内存全部释放之后,清空所述第一内存池,以及控制所述第二内存池提供动态内存分配操作和内存释放操作,并且控制所述第一内存池不提供动态内存分配操作和内存释放操作。可选地,所述方法还包括:对所述第一内存池和所述第二内存池使用互斥锁。可选地,所述控制第一内存池提供动态内存分配操作和内存释放操作,具体包括:接收动态内存分配消息,获取当前负责动态内存分配的内存池为所述第一内存池;基于所述动态内存分配消息,将所述第一内存池中的内存进行分配,并统计所述第一内存池的已分配内存和已使用内存;以及接收内存释放消息,获取当前负责内存释放的内存池为所述第一内存池;基于所述内存释放消息,调用所述第一内存池的内存释放函数释放内存。可选地,所述在所述第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,控制所述第一内存池提供内存释放操作,并且控制所述第二内存池提供动态内存分配操作和内存释放操作,具体包括:接收内存释放消息,获取所述当前仅负责内存释放的内存池为所述第一内存池;判断所述内存释放消息对应的待释放内存是否属于所述第一内存池,若是,则调用所述第一内存池的内存释放函数,释放所述待释放内存,若不是,则调用所述第二内存池的内存是否函数,释放所述待释放内存;以及接收动态内存分配消息,获取当前负责动态内存分配的内存池为所述第二内存池;基于所述动态内存分配消息,将所述第二内存池中的内存进行分配,并统计所述第二内存池的已分配内存和已使用内存。可选地,所述在所述第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,控制所述第一内存池提供内存释放操作,并且控制所述第二内存池提供动态内存分配操作和内存释放操作,具体包括:接收内存释放消息,判断所述内存释放消息对应的待释放内存属于所述第一内存池或所述第二内存池;若所述待释放内存属于所述第一内存池,调用所述第一内存池的内存释放函数,释放所述待释放内存;或者若所述待释放内存属于所述第一内存池,调用所述第二内存池的内存释放函数,释放所述待释放内存;以及接收动态内存分配消息,获取当前负责动态内存分配的内存池为所述第二内存池;基于所述动态内存分配消息,将所述第二内存池中的内存进行分配,并统计所述第二内存池的已分配内存和已使用内存。可选地,所述在所述第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,所述控制所述第一内存池提供内存释放操作,并且控制所述第二内存池提供动态内存分配操作和内存释放操作之前,所述方法还包括:监测所述第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值的持续时间;若所述持续时间大于第三阈值,才执行步骤:控制所述第一内存池提供内存释放操作,并且控制所述第二内存池提供动态内存分配操作和内存释放操作。可选地,在所述监测所述第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值的持续时间之后,所述方法还包括:在任意时刻,若监测到所述已分配内存小于所述第一阈值或所述已使用内存大于所述第二阈值时,将所述持续时间清零。本专利技术实施例第二方面提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所介绍方法的步骤。本专利技术实施例第三方面提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所介绍方法的步骤通过本专利技术的一个或者多个技术方案,本专利技术具有以下有益效果或者优点:由于本专利技术实施例提供的管理方法采用了两个内存池,并且在第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,控制第一内存池仅提供内存释放操作,并且控制第二内存池提供动态内存分配操作和内存释放操作,这样第一内存池即能够一直处于内存释放的状态而不会再进行动态内存分配,便于第一内存池的内存被全部释放,在第一内存池的内存全部释放之后,清空第一内存池,以及控制第二内存池提供动态内存分配操作和内存释放操作,并且控制第一内存池不提供动态内存分配操作和内存释放操作,这样即能够将第一内存池完全归还给操作系统,解决了现有技术中存在的因内存池的chunk地址并非连续而无法释放整块block,导致内存占有量较高的技术问题,降低了内存占有量,实现了将空闲内存自动回收的技术效果。附图说明图1本专利技术实施例提供的内存池的管理方法的流程图;图2A-图2D为本专利技术实施例提供的内存池的迁移示意图。具体实施方式为了使本申请所属
中的技术人员更清楚地理解本申请,下面结合附图,通过具体实施例对本申请技术方案作详细描述。本专利技术了提供了一种内存池的管理方法,以解决现有技术中存在的因内存池的chunk地址并非连续而无法释放整块block导致服务器的内存占有量较高的技术问题。请参考图1,图1为本专利技术实施例提供的内存池的管理方法的流程图,该管理方法包括:S1:控制第一内存池提供动态内存分配操作和内存释放操作,并且控制第二内存池不提供动态内存分配操作和内存释放操作;S2:在第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,控制第一内存池仅提供内存释放操作,并且控制第二内存池提供动态内存分配操作和内存释放操作;S3:在第一内存池的内存全部释放之后,清空第一内存池,以及控制第二内存池提供动态内存分配操作和内存释放操作,并且控制第一内存池不提供动态内存分配操作和内存释放操作。可以看出,由于本专利技术实施例提供的管理方法采用了两个内存池,并且在第一内存池的已分配内存大于第本文档来自技高网
...

【技术保护点】
1.一种内存池的管理方法,其特征在于,所述方法包括:控制第一内存池提供动态内存分配操作和内存释放操作,并且控制第二内存池不提供动态内存分配操作和内存释放操作;在所述第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,控制所述第一内存池仅提供内存释放操作,并且控制所述第二内存池提供动态内存分配操作和内存释放操作;在所述第一内存池的内存全部释放之后,清空所述第一内存池,以及控制所述第二内存池提供动态内存分配操作和内存释放操作,并且控制所述第一内存池不提供动态内存分配操作和内存释放操作。

【技术特征摘要】
1.一种内存池的管理方法,其特征在于,所述方法包括:控制第一内存池提供动态内存分配操作和内存释放操作,并且控制第二内存池不提供动态内存分配操作和内存释放操作;在所述第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,控制所述第一内存池仅提供内存释放操作,并且控制所述第二内存池提供动态内存分配操作和内存释放操作;在所述第一内存池的内存全部释放之后,清空所述第一内存池,以及控制所述第二内存池提供动态内存分配操作和内存释放操作,并且控制所述第一内存池不提供动态内存分配操作和内存释放操作。2.如权利要求1所述的管理方法,其特征在于,所述方法还包括:对所述第一内存池和所述第二内存池使用互斥锁。3.如权利要求1所述的管理方法,其特征在于,所述控制第一内存池提供动态内存分配操作和内存释放操作,具体包括:接收动态内存分配消息,获取当前负责动态内存分配的内存池为所述第一内存池;基于所述动态内存分配消息,将所述第一内存池中的内存进行分配,并统计所述第一内存池的已分配内存和已使用内存;以及接收内存释放消息,获取当前负责内存释放的内存池为所述第一内存池;基于所述内存释放消息,调用所述第一内存池的内存释放函数释放内存。4.如权利要求1所述的管理方法,其特征在于,所述在所述第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,控制所述第一内存池提供内存释放操作,并且控制所述第二内存池提供动态内存分配操作和内存释放操作,具体包括:接收内存释放消息,获取所述当前仅负责内存释放的内存池为所述第一内存池;判断所述内存释放消息对应的待释放内存是否属于所述第一内存池,若是,则调用所述第一内存池的内存释放函数,释放所述待释放内存,若不是,则调用所述第二内存池的内存是否函数,释放所述待释放内存;以及接收动态内存分配消息,获取当前负责动态内存分配的内存池为所述第二内存池;基于所述动态内存分配消息,将所述第二内存池中的内存进行分配,并统计所述第二内存池的已分配内存和已使...

【专利技术属性】
技术研发人员:张梦涵张文明陈少杰
申请(专利权)人:武汉斗鱼网络科技有限公司
类型:发明
国别省市:湖北,42

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

1