[发明专利]堆外内存管理方法、装置、介质及电子设备有效
申请号: | 201910098993.3 | 申请日: | 2019-01-31 |
公开(公告)号: | CN109902032B | 公开(公告)日: | 2021-05-25 |
发明(设计)人: | 龙飞 | 申请(专利权)人: | 泰康保险集团股份有限公司 |
主分类号: | G06F12/02 | 分类号: | G06F12/02;G06F9/455;G06F9/50 |
代理公司: | 北京泛华伟业知识产权代理有限公司 11280 | 代理人: | 王勇;纪雯 |
地址: | 100030 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 内存 管理 方法 装置 介质 电子设备 | ||
本发明提供一种堆外内存管理方法、装置、介质及电子设备,堆外内存管理方法包括:建立堆外内存池,将所述堆外内存池划分为多个内存页并且将每个内存页划分为多个内存块;对于堆外内存申请,从第一个内存页开始遍历所述堆外内存池,分配所找到的满足所述堆外内存申请的一个内存页中的连续空闲内存块或者跨多个连续内存页的连续空闲内存块。本发明通过建立堆外内存池重用了已经开辟好的内存,减少了内存重建带来的消耗;通过将堆外内存池划分为内存页,并且将内存页进一步划分为内存块,使得能够以内存块为单位连续地分配堆外内存,提高了堆外内存的使用效率,并且方便了对堆外内存的管理。
技术领域
本发明涉及内存管理技术领域,尤其涉及一种堆外内存管理方法、装置、介质及电子设备。
背景技术
通常,Java中分配的非空对象是由Java虚拟机的垃圾收集器进行管理的,该对象称为堆内内存,Java虚拟机会定期对垃圾内存进行回收。而垃圾回收会暂停其他的工作,因此会影响Java应用的性能。堆外内存(off-heap memory)能够解决这一问题,与堆内内存不同,堆外内存是内存对象分配在Java虚拟机的堆以外的内存,堆外内存不受Java虚拟机的控制,直接受操作系统的管理。利用堆外内存可以提升应用的性能,具体地,其一方面能够在对象生命周期较长时,减少Full GC(JAVA整体垃圾回收)的次数,从而减少系统停顿时间;另一方面,在I/O操作频繁的场景下利用堆外内存还可以减少交换次数。
尽管使用堆外内存能够提高Java应用的性能,但是创建堆外内存非常耗时,此外,现有技术对堆外内存空间的使用是非连续的,这也导致堆外内存的使用效率较低。
发明内容
为了解决上述现有技术中存在的问题,根据本发明的一个实施例,提供一种堆外内存管理方法,包括:建立堆外内存池,将所述堆外内存池划分为多个内存页并且将每个内存页划分为多个内存块;对于堆外内存申请,从第一个内存页开始遍历所述堆外内存池,分配所找到的满足所述堆外内存申请的一个内存页中的连续空闲内存块或者跨多个连续内存页的连续空闲内存块。
上述方法中,所述堆外内存池中的每个内存页设置有相应的页分配标识,用于指示内存页的分配情况;并且所述堆外内存池中的每个内存页设置有相应的内存块使用情况标识,用于指示内存页中已分配的连续内存块的数量或者连续空闲内存块的数量。
上述方法还可以包括:对于与所分配的内存块相关的内存页,如果该内存页的分配情况发生变化,则修改该内存页的页分配标识和内存块使用情况标识;如果该内存页的分配情况没有发生变化,则修改该内存页的内存块使用情况标识。
上述方法中,对于堆外内存申请,从第一个内存页开始遍历所述堆外内存池,分配所找到的满足所述堆外内存申请的一个内存页中的连续空闲内存块或者跨多个连续内存页的连续空闲内存块包括:从第一个内存页开始查找所述堆外内存池中第一个未被全部分配的内存页;如果所找到的内存页中的连续空闲内存块的数量满足所述堆外内存申请,或者所找到的内存页之后存在一个或多个未被分配的内存页并且所找到的内存页与所述一个或多个未被分配的内存页中的连续空闲内存块的数量满足所述堆外内存申请,则返回所找到的内存页的连续空闲内存块的起始地址;否则继续查找所述堆外内存池中下一个未被全部分配的内存页。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于泰康保险集团股份有限公司,未经泰康保险集团股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910098993.3/2.html,转载请声明来源钻瓜专利网。