[发明专利]一种内存池的管理方法有效
申请号: | 201810024399.5 | 申请日: | 2018-01-10 |
公开(公告)号: | CN108255608B | 公开(公告)日: | 2020-07-31 |
发明(设计)人: | 张梦涵;张文明;陈少杰 | 申请(专利权)人: | 武汉斗鱼网络科技有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50;G06F12/02 |
代理公司: | 北京众达德权知识产权代理有限公司 11570 | 代理人: | 刘杰 |
地址: | 430000 湖北省武汉市东湖开*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 内存 管理 方法 | ||
本发明公开了一种内存池的管理方法,该方法包括:控制第一内存池提供动态内存分配操作和内存释放操作,并且控制第二内存池不提供动态内存分配操作和内存释放操作;在第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,控制第一内存池仅提供内存释放操作,并且控制第二内存池提供动态内存分配操作和内存释放操作;在第一内存池的内存全部释放之后,清空第一内存池,以及控制第二内存池提供动态内存分配操作和内存释放操作,并且控制第一内存池不提供动态内存分配操作和内存释放操作。本发明解决了现有技术中存在的因内存池的chunk地址并非连续而无法释放整块block,导致内存占有量较高的技术问题,实现了将空闲内存自动回收的技术效果。
技术领域
本申请涉及计算机领域,尤其涉及一种内存池的管理方法。
背景技术
在进行服务器开发时,有时会遇到需要频繁申请释放内存的场景,如果每次都直接向操作系统申请,不仅会效率低下,而且会导致内存碎片,对此有不少库都实现了内存池,即向操作系统申请大块内存(block),再分成小块(chunk)进行管理,用户从内存池申请内存,释放时再还给内存池,内存池一直保留着大块内存,减少了和操作系统的交互,提高了动态内存分配的效率。
在实际应用中,内存池为了满足动态内存分配释放高效的特点,往往是用链表方式管理这些chunk,申请释放都从链表头进行操作,以达到O(1)的时间复杂度。但这样也导致一个问题,就是当服务非常繁忙时,可能向内存池申请大量内存,甚至到几G,而后续当服务趋近平缓之后会向内存池归还这些内存,由于内存池中的chunk地址并非连续,因此无法释放整块block,所以内存池往往不会将这些内存归还给操作系统,这会导致内存占用量一直在峰值水平。
因此,现有技术中存在因内存池的chunk地址并非连续而无法释放整块block,导致内存占有量较高的技术问题。
发明内容
本发明了提供了一种内存池的管理方法,以解决现有技术中存在的因内存池的chunk地址并非连续而无法释放整块block导致服务器的内存占有量较高的技术问题。
为解决上述技术问题,本发明实施例第一方面提供了一种内存池的管理方法,所述方法包括:
控制第一内存池提供动态内存分配操作和内存释放操作,并且控制第二内存池不提供动态内存分配操作和内存释放操作;
在所述第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,控制所述第一内存池仅提供内存释放操作,并且控制所述第二内存池提供动态内存分配操作和内存释放操作;
在所述第一内存池的内存全部释放之后,清空所述第一内存池,以及控制所述第二内存池提供动态内存分配操作和内存释放操作,并且控制所述第一内存池不提供动态内存分配操作和内存释放操作。
可选地,所述方法还包括:对所述第一内存池和所述第二内存池使用互斥锁。
可选地,所述控制第一内存池提供动态内存分配操作和内存释放操作,具体包括:
接收动态内存分配消息,获取当前负责动态内存分配的内存池为所述第一内存池;
基于所述动态内存分配消息,将所述第一内存池中的内存进行分配,并统计所述第一内存池的已分配内存和已使用内存;以及
接收内存释放消息,获取当前负责内存释放的内存池为所述第一内存池;
基于所述内存释放消息,调用所述第一内存池的内存释放函数释放内存。
可选地,所述在所述第一内存池的已分配内存大于第一阈值且已使用内存小于第二阈值时,控制所述第一内存池提供内存释放操作,并且控制所述第二内存池提供动态内存分配操作和内存释放操作,具体包括:
接收内存释放消息,获取所述当前仅负责内存释放的内存池为所述第一内存池;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼网络科技有限公司,未经武汉斗鱼网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810024399.5/2.html,转载请声明来源钻瓜专利网。