基于Bitmap的小额堆外内存管理方法、系统、终端设备及存储介质与流程
未命名
10-18
阅读:133
评论:0
基于bitmap的小额堆外内存管理方法、系统、终端设备及存储介质
技术领域
1.本发明涉及计算机系统领域,具体而言,涉及一种基于bitmap的小额堆外内存管理方法、系统、终端设备及存储介质。
背景技术:
2.堆外内存是指内存对象分配在java虚拟机的堆以外的内存,这些内存直接受操作系统管理,而不是虚拟机,这样做的结果就是能够在一定程度上减少垃圾回收对应用程序造成的影响。
3.bitmap是一种数据结构,代表了有限域中的稠集,每一个元素至少出现一次,没有其他的数据和元素相关联。
4.堆外内存在一些场景下能显著提高性能,堆外内存可以避免虚拟机堆和操作系统内核来回复制数据,不受jvm控制的内存。相比于堆内内存有几个优势:
5.1、可以减少了垃圾回收的工作,因为垃圾回收会暂停其他的工作。
6.2、第二加快了复制的速度。因为从堆内存刷新到远程时,会先复制到直接内存(非堆内存),然后再发送;而堆外内存相当于省略掉了这个工作。
7.但是也存在一些缺陷:
8.1、堆外内存难以管理,如果使用不当,那么很容易导致内存泄露。
9.2、堆外内存的申请比较复杂,耗时长,频繁的申请,释放比较浪费资源。
技术实现要素:
10.本发明实施例提供一种基于bitmap的小额堆外内存管理方法、系统、终端设备及存储介质,使用了bitmap数据结构来管理管理小内存的缓存,避免频繁的内存分配给系统带来负担,bitmap对大量小内存的分配和查找效率高,消耗小;用户线程请求内存时根据请求的内存大小分配最贴近size的内存块,在减少内存碎片的同时又能很好的避免内存浪费;在高并发系统,可以使用多个分配器来分离线程锁,每个线程维护一个bitmap结构的内存缓存结构,这样避免各个线程进行内存分配时的竞争,极大的提高了内存分配的效率。
11.一种基于bitmap的小额堆外内存管理方法,具体步骤包括:
12.步骤s21,应用程序申请使用小块堆外内存;
13.步骤s22,根据当前线程或者其他能避免资源竞争的对象查找相关的内存分配器,如果没有,则创建一个,后续都使用该分配器分配内存;
14.步骤s23,将申请的内存数向上归一化处理;
15.步骤s24,判断是否还有满足要求的小块内存,如果没有,则先申请一个大内存块并交给对象chunk管理,如果有,则执行步骤s27;
16.步骤s25,创建并初始化chunk,初始化包括一些基本参数和数据结构,并加入到chunk列表中;
17.步骤s26,将chunk管理的内存块按照基本单元pageunit大小拆分成完全二叉树结构的若干个page;
18.步骤s27,在树中分配一个page供小内存分配,并判断是否首次分配,如果否,则执行步骤s28;如果是,则按实际大小规格化后的大小平均分割成若干个subpage,如pagesize为8k,申请的实际内存为100b,那么按16的倍数规格化后就是112b,一个page就可以分割成8k/112b=73个subpage,并将该subpage加入subpages链表,并用一个关键的数据结构bitmap来初始化这个subpage,初始化的内容包括:
19.elemsize:每个内存块的大小,
20.maxnumelems:内存块数量,
21.bitmaplength:bitmap使用的long元素个数,
22.nextavail:下一个可用bit位,初始位0;
23.步骤s28,在bitmap中找到下一个未分配的bit位,并将该bit位设置为占用,写回bitmap里,表示该位代表的subpage被使用,如果所有的bit位都被标记,从链表中移除该subpage;
24.步骤s29,应用程序内存使用。
25.步骤s30,使用完毕后,将小内存释放回subpages中,并修改bitmap标记位为未使用,等待下次申请。
26.进一步的:本发明系统包括:内存管理模块,用于根据当前线程或者其他能避免资源竞争的对象查找或者创建相关的内存分配器,并将申请的内存数向上归一化处理;
27.chunk模块,用于管理内存块,并将管理的内存块按照基本单元pageunit大小拆分成完全二叉树结构的若干个page;
28.chunk管理模块,用于创建并初始化chunk。
29.进一步的:终端设备可以包括:处理器、存储介质和总线,存储介质存储有处理器可执行的机器可读指令,当终端设备运行时,处理器与存储介质之间通过总线通信,处理器执行机器可读指令,以执行时执行如前述实施例中所述的深度学习模型训练方法的步骤。
30.进一步的:一种存储介质,该存储有计算机程序,所述计算机程序被处理器运行时执行上述的方法的步骤。
31.本发明的有益效果:本发明在小数据量,高并发场景下,使用堆外内存作为数据接收和发送的存储,以chunk位单位申请内存块,使用树形结构的内存池将大块内存分割成page,page按申请大小进一步分割为subpage,小内存subpage使用bitmap进行管理,内存池中的内存可以重复利用,当下次要申请内存的时候直接从内存池中查找可用内存直接分配,通过bitmap对小块内存进行管理,能够以非常小的代价,高效的对内存进行分配和回收,极大的提高了通信效率。
附图说明
32.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
33.图1示出了本发明方法的流程示意图。
34.图2示出了本发明内存分层结构的组成示意图。
35.图3示出了本发明小内存bitmap存储结构的组成示意图。
36.图4示出了本发明终端设备的组成示意图。
具体实施方式
37.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,应当理解,本发明中附图仅起到说明和描述的目的,并不用于限定本发明的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本发明中使用的流程图示出了根据本发明的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本发明内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
38.另外,本发明所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
39.需要说明的是,本发明实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。还应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。在本发明的描述中,还需要说明的是,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
40.在申请内存时,根据线程数先向系统申请若干块连续内存,称为chunk,设置默认大小chunksize,比如16mb,通过chunk对象包装。为了更细粒度的管理,将chunk进一步拆分为page,根据情况设置每个page的大小,比如8kb,那么每个chunk包含2048个page,本方案主要是小内存的分配管理,对于小于8k的内存分配,这些小对象直接分配一个page会造成浪费,将page按照申请时的大小拆分为若干个小内存subpage,小内存的管理交给bitmap来管理,subpage在初始化的时候就决定了每块内存的大小elemsize,一个subpage里面只能包含相同elemsize的内存空间,这样可以将所有相同size的subpage聚集到一个链表中,每次查找从链表head中查找即可,当用完后可以从链表中释放掉。
41.当下次要请求同样大小的内存区域时,直接定位符合条件的head,看里面是否有可用的就好。
42.如申请100b内存,规格化为112b,那么一个page就可以分割成8kb/112b=73份,这73份小内存可以用一个bitmap来管理是否被使用及下一次申请小内存时从哪里直接获取,bitmap是一个long数组,其中每个long元素上每个bit位都可以代表一个内存块是否使用,申请时从低位到高位标识,下次申请从低位到高位找到第一个未被使用的内存即可,因为一个long有64位,73份的小内存使用长度为2的bitmap就能处理,通过位移操作和标识,花费的代价非常小。
43.图1示出了基于bitmap的小内存使用交互处理流程图,具体步骤如下:
44.步骤s21,应用程序申请使用小块堆外内存;
45.步骤s22,根据当前线程或者其他能避免资源竞争的对象查找相关的内存分配器,如果没有,则创建一个,后续都使用该分配器分配内存;
46.步骤s23,将申请的内存数向上归一化处理;
47.步骤s24,判断是否还有满足要求的小块内存,如果没有,则先申请一个大内存块并交给对象chunk管理,如果有,则执行步骤s27;
48.步骤s25,创建并初始化chunk,初始化包括一些基本参数和数据结构,并加入到chunk列表中;
49.步骤s26,将chunk管理的内存块按照基本单元pageunit大小拆分成完全二叉树结构的若干个page;
50.步骤s27,在树中分配一个page供小内存分配,并判断是否首次分配,如果否,则执行步骤s28;如果是,则按实际大小规格化后的大小平均分割成若干个subpage,如pagesize为8k,申请的实际内存为100b,那么按16的倍数规格化后就是112b,一个page就可以分割成8k/112b=73个subpage,并将该subpage加入subpages链表,并用一个关键的数据结构bitmap来初始化这个subpage,初始化的内容包括:
51.elemsize:每个内存块的大小,
52.maxnumelems:内存块数量,
53.bitmaplength:bitmap使用的long元素个数,
54.nextavail:下一个可用bit位,初始位0;
55.步骤s28,在bitmap中找到下一个未分配的bit位,并将该bit位设置为占用,写回bitmap里,表示该位代表的subpage被使用,如果所有的bit位都被标记,从链表中移除该subpage;
56.步骤s29,应用程序内存使用;
57.步骤s30,使用完毕后,将小内存释放回subpages中,并修改bitmap标记位为未使用,等待下次申请。
58.在java远程通讯组件数据的发送和接收过程中,在小数据量,高并发场景下,使用堆外内存作为数据接收和发送的存储,以chunk位单位申请内存块,使用树形结构的内存池将大块内存分割成page,page按申请大小进一步分割为subpage,小内存subpage使用bitmap进行管理,内存池中的内存可以重复利用,当下次要申请内存的时候直接从内存池中查找可用内存直接分配,通过bitmap对小块内存进行管理,能够以非常小的代价,高效的对内存进行分配和回收,极大的提高了通信效率。
59.如图2-3所示,示出了内存分层结构以及小内存bitmap存储结构的组成示意图,本发明所述的系统包括:
60.内存管理模块,用于根据当前线程或者其他能避免资源竞争的对象查找或者创建相关的内存分配器,并将申请的内存数向上归一化处理;
61.chunk模块,用于管理内存块,并将管理的内存块按照基本单元pageunit大小拆分成完全二叉树结构的若干个page;
62.chunk管理模块,用于创建并初始化chunk。
63.如图4所示,该终端设备6可以包括:处理器601、存储介质602和总线603,存储介质602存储有处理器601可执行的机器可读指令,当终端设备运行时,处理器601与存储介质602之间通过总线603通信,处理器601执行机器可读指令,以执行时执行如前述实施例中所述的深度学习模型训练方法的步骤。具体实现方式和技术效果类似,在此不再赘述。
64.为了便于说明,在上述终端设备中仅描述了一个处理器。然而,应当注意,一些实施例中,本发明中的终端设备还可以包括多个处理器,因此本发明中描述的一个处理器执行的步骤也可以由多个处理器联合执行或单独执行。
65.以上仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
技术特征:
1.一种基于bitmap的小额堆外内存管理方法,其特征在于,具体步骤包括:步骤s21,应用程序申请使用小块堆外内存;步骤s22,根据当前线程或者其他能避免资源竞争的对象查找相关的内存分配器,如果没有,则创建一个,后续都使用该分配器分配内存;步骤s23,将申请的内存数向上归一化处理;步骤s24,判断是否还有满足要求的小块内存,如果没有,则先申请一个大内存块并交给对象chunk管理,如果有,则执行步骤s27;步骤s25,创建并初始化chunk,初始化包括一些基本参数和数据结构,并加入到chunk列表中;步骤s26,将chunk管理的内存块按照基本单元pageunit大小拆分成完全二叉树结构的若干个page;步骤s27,在树中分配一个page供小内存分配,并判断是否首次分配,如果否,则执行步骤s28;如果是,则按实际大小规格化后的大小平均分割成若干个subpage;步骤s28,在bitmap中找到下一个未分配的bit位,并将该bit位设置为占用,写回bitmap里,表示该位代表的subpage被使用;步骤s29,应用程序内存使用;步骤s30,使用完毕后,将小内存释放回subpages中。2.根据权利要求1所述的方法,其特征在于,初始化的内容包括:elemsize:每个内存块的大小;maxnumelems:内存块数量;bitmaplength:bitmap使用的long元素个数;nextavail:下一个可用bit位,初始位0。3.根据权利要求1所述的方法,其特征在于,步骤s28中如果所有的bit位都被标记,从链表中移除该subpage。4.根据权利要求1所述的方法,其特征在于,步骤s30中还包括修改bitmap标记位为未使用,等待下次申请。5.一种基于bitmap的小额堆外内存管理系统,其特征在于,包括:内存管理模块,用于根据当前线程或者其他能避免资源竞争的对象查找或者创建相关的内存分配器,并将申请的内存数向上归一化处理;chunk模块,用于管理内存块,并将管理的内存块按照基本单元pageunit大小拆分成完全二叉树结构的若干个page;chunk管理模块,用于创建并初始化chunk。6.一种终端设备,其特征在于,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当所述终端设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行时执行如权利要求1至4任一项所述的方法的步骤。7.一种存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1至4任一项所述的方法的步骤。
技术总结
本发明提供了一种基于Bitmap的小额堆外内存管理方法、系统、终端设备及存储介质,涉及计算机系统领域。本发明使用了Bitmap数据结构来管理管理小内存的缓存,避免频繁的内存分配给系统带来负担,Bitmap对大量小内存的分配和查找效率高,消耗小,本发明在小数据量,高并发场景下,使用堆外内存作为数据接收和发送的存储,以chunk位单位申请内存块,使用树形结构的内存池将大块内存分割成page,page按申请大小进一步分割为subpage,小内存subpage使用Bitmap进行管理,内存池中的内存可以重复利用,当下次要申请内存的时候直接从内存池中查找可用内存直接分配,通过Bitmap对小块内存进行管理,能够以非常小的代价,高效的对内存进行分配和回收,极大的提高了通信效率。极大的提高了通信效率。极大的提高了通信效率。
技术研发人员:李明 孙炎森 徐晓剑 李春兰 张秋怡 刘磊
受保护的技术使用者:中信银行股份有限公司
技术研发日:2023.06.30
技术公布日:2023/10/11
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
