CN112817766B - 一种内存管理方法、电子设备及介质 - Google Patents
一种内存管理方法、电子设备及介质 Download PDFInfo
- Publication number
- CN112817766B CN112817766B CN202110199568.0A CN202110199568A CN112817766B CN 112817766 B CN112817766 B CN 112817766B CN 202110199568 A CN202110199568 A CN 202110199568A CN 112817766 B CN112817766 B CN 112817766B
- Authority
- CN
- China
- Prior art keywords
- memory
- space
- memory space
- pool
- slot
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000015654 memory Effects 0.000 title claims abstract description 687
- 238000007726 management method Methods 0.000 title claims abstract description 56
- 238000000034 method Methods 0.000 claims abstract description 38
- 239000012729 immediate-release (IR) formulation Substances 0.000 claims description 23
- 238000004064 recycling Methods 0.000 claims description 11
- 239000000725 suspension Substances 0.000 claims description 11
- 230000003044 adaptive effect Effects 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 2
- 230000001186 cumulative effect Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000003321 amplification Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000003199 nucleic acid amplification method Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
本发明公开了一种内存管理方法、电子设备及介质。该方法包括:根据内存空间请求在初始化内存池集合选取内存池,并在所述内存池内以最小分配单元获取适配的插槽;根据所述插槽在所述初始化内存池集合对应的全局暂缓释放区查找可用内存空间;若所述全局暂缓释放区中不存在,则在所述插槽的当前分配器的分配内存空间查找可用内存空间;若所述当前分配器的分配内存空间在不存在可用内存空间,则在所述内存池中其他插槽中查找可用内存空间;若所述内存池中其他插槽中不存在可用内存空间,则从所述初始化内存池集合其他内存池进行分配,否则,分配失败。本发明实施例提供的内存管理方法能快速查找可用内存空间,从而提高了内存空间的利用率和分配效率。
Description
技术领域
本发明实施例涉及计算机存储技术,尤其涉及一种内存管理方法、电子设备及介质。
背景技术
内存空间作为计算机系统中的重要组成单元,其利用在现有的内存管理方案中存在明显的碎片化问题,内存池的出现是针对应用的需要,可以提高内存申请和释放的效率。传统的内存池的方案可以分为两种:方案1,内存池初始化一批不同大小的粒度内存块,上层应用按照需要的大小向下粒度内存块取整获取匹配的内存块,使得申请区间放大,另外,在初始化粒度内存块的过程中要占用系统内存,一旦将粒度内存块加入到内存池中占用部分不能还给系统;方案2:申请一块大内存,所有的小内存的分配在该大块内存中追加分配;由于不能重复申请大块内存,使得追加分配整块大内存中的小内存无法被重复使用,但是不能重复使用大块内存中的小内存,导致内存空间的浪费严重,从而影响内存空间存储效率。
发明内容
本发明提供一种内存管理方法、电子设备及介质,以实现对可用内存空间进行树形管理,能快都查找可用内存空间,提高了内存空间的利用率和分配效率。
第一方面,本发明实施例提供了一种内存管理方法,该方法包括:根据内存空间请求在初始化内存池集合选取内存池,并在所述内存池内以最小分配单元为单位获取适配的插槽;根据所述插槽大小在所述初始化内存池集合对应的全局暂缓释放区查找可用内存空间;若所述全局暂缓释放区中不存在可用内存空间,则在所述插槽的当前分配器的分配内存空间查找可用内存空间;若所述当前分配器的分配内存空间在不存在可用内存空间,则在所述内存池中其他插槽中查找可用内存空间;若所述内存池中其他插槽中不存在可用内存空间,则从所述初始化内存池集合其他内存池进行分配,否则,分配失败。
第二方面,本发明实施例还提供了一种内存管理方法,该方法还包括:
根据接收的回调请求对聚合的内存块的参数进行判断;若所述参数满足分裂条件,根据所述参数从所述聚合的内存块中分裂出分裂内存块;根据所述分裂内存块的构造元数据;若存在第一内存块,则修改所述第一内存块的元数据;其中,所述第一内存块为所述聚合的内存块中除所述分裂内存块之外的其余内存块。
第三方面,本发明实施例还提供了一种内存管理方法,该方法还包括:
根据所述释放内存空间的元数据,确定所述释放内存空间所属插槽中对应分配器;检查所述释放内存空间的元数据的立即释放标记是否为真;若所述立即释放标记为真,将所述释放内存空间回收至所述分配器所属的内存池;若所述立即释放标记为否,判断所述释放内存空间是否可加入至所述初始化内存池集合对应的全局暂缓释放区;若所述释放内存不可加入至所述初始化内存池集合对应的全局暂缓释放区,对所属插槽进行加锁;若加锁成功,对所述释放内存空间回收至所述分配器所属的内存池;若加锁失败,将所述释放内存加入到所述内存池对应的私有暂缓释放区。
第四方面,本发明实施例还提供了一种电子设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本公开任意实施例所提供的内存管理方法。
第五方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如本公开任意实施例所提供的内存管理方法。
本发明通过根据内存空间请求在初始化内存池集合选取内存池,并在所述内存池内以最小分配单元为单位获取适配的插槽;根据所述插槽大小按照顺序从所述初始化内存池集合对应的全局暂缓释放区、所述插槽的当前分配器的分配内存空间、所述内存池中其他插槽中、所述初始化内存池集合其他内存池中查找分配可用内存空间;若都未查找到,则分配失败。解决初始化不同粒度内存块大小不一致使得申请内存空间放大和出家分配的内存块不能重复利用的技术问题,实现了对可用内存空间的树形管理,加快了可用内存空间查找速度,提高了内存空间的利用率和分配效率。
附图说明
图1为本发明实施例一中提供的一种内存管理方法的流程示意图;
图2为本发明实施例一中提供的一种内存管理方法的流程图;
图3是本发明实施例二中提供的一种内存管理方法的流程示意图;
图4为本发明实施例三中提供的一种内存管理方法的流程示意图;
图5是本发明实施例三中提供的一种内存管理方法的流程图;
图6为本发明实施例四中提供的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
图1为本发明实施例一提供的一种内存管理方法的流程示意图,本实施例可适用于对各种对内存空间管理情况,该内存管理方法可应用于存储系统中,该存储系统中的存储装置块可以通过软件和/或硬件的方式来实现,并及具体可继承于具体存储和计算能力来进行内存管理的电子设备中。该方法具体包括如下步骤:
S110,根据内存空间请求在初始化内存池集合选取内存池,并在所述内存池内以最小分配单元为单位获取适配的插槽;
在本发明实施例中,所述内存空间请求可以是系统空间内存的申请函数,示例性的,内存空间请求可以是申请函数动态开辟空间(new)、动态内存分配(memoryallocation,malloc)。其中,所述初始化内存池集合可以对应所属存储系统中部分内存空间,可以包含多个内存池。其中,所述内存池为所述初始化内存池集合中大小相等的内存块,并且小于等于所述初始化内存池集合内存空间大小,可以包含多个插槽。所述插槽为所述内存池中获取固定大小内存空间可以插入的槽口。其中,所述最小分配单元为所述内存池内内存空间大小相同且能自由组合的最小内存空间。
需要说明的是,所述初始化内存池集合对应的内存空间属于存储系统中内存空间,在这里仅是利用本申请中的内存管理方法进行管理,并不是存储系统外扩展的内存空间。
其中,所述适配的插槽为根据所述内存空间请求对应的内存空间大小以最小分配单元为单位向下取整获取的插槽,即,在所述内存池中根据插槽槽口可获取与所述内存空间请求相匹配内存空间大小;其中,所述相匹配内存空间大小为以最小分配单元为单位完成所述内存空间请求最小内存空间大小,避免了申请空间的放大。
其中,根据内存空间请求在初始化内存池集合选取内存池,包括:根据所述内存空间请求在所述初始化内存池集合中选取与计数器计数值对应的内存池;其中,所述初始化内存池集合对应计数器。
本发明实施例中,根据所述内存空间请求在所述初始化内存池集合中选取用于可用内存空间查找的内存池,其中,所述初始化内存池集合选取所述内存池过程可以是对所述初始化内存池集合维护的自增计数器数值取模的过程。当所述初始化内存池集合接收所述内存空间请求时,所述初始化内存池集合维护的自增计数器数值自动加1,根据所述自增计数器当前累计数值进行取模。其中,所述取模是按照所述初始化内存池集合中内存池个数和各内存池在选取时的顺序进行选取。在所述初始化内存池集合中根据所述自增计数器数值取模的过程,即相当于对所述初始化内存池集合中各内存池选取顺序轮询的过程。当所述自增计数器当前累计数值大于所述初始化内存池集合中内存池个数时,以所述初始化内存池集合中内存池个数为模,将所述自增计数器当前累计数值取模余数,根据所述取模余数在所述初始化内存池集合中选取对应的内存池。示例性的,假设所述初始化内存池集合中内存池个数为8,所述初始化内存池集合中各内存池按照1至8对应的选取顺序进行标记,当所述自增计数器当前累计数值为3,则对所述自增计数器当前累计数值进行取模得到取模余数为3,在所述初始化内存池集合中选取顺序标记为3的内存池;当所述自增计数器当前累计的数值为9,对所述自增计数器当前累计数值进行取模得到取模余数为1,在所述初始化内存池集合中选取顺序标记为3的内存池。
当然,也可以根据计数值以其他方式选取相应的内存池,本申请实施例对此不作限定。
S120,根据所述插槽大小在所述初始化内存池集合对应的全局暂缓释放区查找可用内存空间;
其中,所述全局暂缓释放区为所述初始化内存池集合中被释放的内存空间未归还至所述存储系统,且暂时被所述初始化内存池集合进行内存管理。其中,所述可用内存空间
本发明实施例中,在步骤S110中获取到与所述内存空间请求对应内存空间大小的适配插槽,可所述内存池中查找可用内存空间并根据所述插槽获取与所述内存空间请求相匹配内存空间大小。其中,步骤S120中的所述插槽为步骤S110中获取的适配插槽,用于获取与所述内存空间请求相匹配内存空间。根据所述插槽大小在所述初始化内存池集合对应的全局暂缓释放区中查找与所述内存空间请求相匹配内存空间大小相同的可用内存空间。
S130,若所述全局暂缓释放区中不存在可用内存空间,则在所述插槽的当前分配器的分配内存空间查找可用内存空间;
其中,所述插槽的当前分配器为在所述插槽中正在进行内存空间分配的分配器。
本发明实施例中,在所述内存池中获取所述插槽槽口对应固定大小的内存空间。所述内存池中可以有多个插槽,用于获取不同大小的内存空间;其中,所述内存池中各插槽槽口大小可以是相同,也可以不相同。所述插槽中可以有多个分配器,用于从所述内存池中获取内存空间。所述插槽中分配器与所述内存池中内存空间具有对应关系,所述插槽中一个分配器可以对上所述内存池中所述分配器对应的内存空间进行内存管理。从所述内存池中获取所述分配器对应的内存空间归入所述插槽中,所述分配器利用所述插槽槽口将所述分配器在所述内存池对应的内存空间划分为固定大小的内存空间进行内存管理。当根据所述内存空间请求获取到适配的插槽,相当于获取到了在所述内存池中查找一定大小的可用空间。
其中,在所述插槽的当前分配器中分配内存空间查找可用内存空间之前,还包括:释放所述内存池内私有暂缓释放区,将释放的内存空间加入到所属内存分配器;若所述所属内存分配器为空分配器,且所述空分配器不是所述插槽的当前分配器,将所述空分配器迁移至全局可用空分配器列表中;若所属内存分配器为可用分配器且不是所述插槽的当前分配器,将所属分配器加入到备用分配器列表中。
其中,所述空分配器为将所述内存池中分配器对应的内存空间全部归还存储系统;其中,所述可用分配器为非空分配器且具有可用内存空间。其中,所述插槽的当前分配器为所述插槽中当前对应内存空间进行分配的分配器。其中,所属内存分配器为所述释放的内存空间在未分配之前进行对应内存管理的分配器。其中,所述备用分配器列表为所述内存池中对应内存空间具有可用内存空间的分配器。其中,所述私有暂缓释放区为所述内存池中被释放的内存空间未归还至所述存储系统,且暂时被所述内存池进行内存管理。
本发明实施例中,在所述插槽的当前分配器中分配内存空间查找可用内存空间之前,对所述初始化内存池集合中选取的所述内存池中内存空间进行内存管理,对所述内存池中私有暂缓释放区的内存空间进行释放获得未归还系统内存空间。找到所述内存池中私有暂缓释放区中释放内存空间所属内存分配器,将所述内存池中私有暂缓释放区中释放的内存空间归入所属内存分配器进行内存管理,并判断所属内存分配器在所述内存池中对应的内存空间是否为空,再判断所属分配器并不是所述插槽当前从所述内存池中获取内存空间的当前分配器后,若所属内存分配器在所述内存池中对应的内存空间全部归还存储系统为空分配器且不是所述内存池的当前分配,则当前所属内存分配器不可以对所述内存池对应的内存空间进行内存管理,将所属内存分配器迁移至所述初始化内存池集合对应的全局可用空分配器列表中,供所述内存池备用。若所属内存分配器可以对所述内存池对应的内存空间中有可用内存空间进行内存管理,即所属内存分配器为可用分配器,将所属内存分配器加入至所述内存池中备用分配器列表中。
S140,若所述当前分配器的分配内存空间在不存在可用内存空间,则在所述内存池中其他插槽中查找可用内存空间;
其中,在所述内存池中其他插槽中查找可用内存空间,包括:从小于所述插槽的其他插槽的分配器中查找可用分配器;若所述小于所述插槽的其他插槽的分配器中不存在可用分配器,则从所述初始化内存池集合对应的全局可用空分配器列表中选择分配器在所属内存池中查找可用空间;若所述选择分配器在所属内存池中未查找到可用空间,并且所述内存池中当前的分配器个数未超过所述内存池空间最大允许的分配器个数,则从系统中申请分配器大小的内存空间生成新的分配器加入至所述插槽中进行可用空间查找。
其中,所述内存池中小于所述插槽的其他插槽为所述内存池中小于所述插槽槽口大小的插槽,即,根据所述其他插槽在所述内存池中获取的内存空间大小小于根据所述插槽在所述内存池中获取的内存空间的大小。
其中,所属内存池为所述全局可用空分配器列表中选择的分配器在未迁移至所述全局可用空分配列表中所在的分配器。本发明实施例中,从所述内存池中其他插槽中查找可用分配器,即查找所述内存池中小于所述插槽的其他插槽中具有可用空间的分配器。其中,从所述初始化内存池集合对应的全局可用空分配器列表中选择分配器在所属内存池中查找可用空间,即,需要从所述初始化内存集合对应的全局可用空分器配列表中选取从所属内存池迁入至所述全局可用空分配器列表中的空分配器。根据所选取的所述空分配器在所属内存池中查找所述空分配器对应的可用空间。
当所属内存池中所述插槽中对应的所有分配器个数未超过所属内存池存储内存空间的最大允许分配器个数时,即,所属内存池到的存储内存空间未被占满,则从系统中申请分配器大小的内存空间并生成新的分配器进行对应内存管理。
S150,若所述内存池中其他插槽中不存在可用内存空间,则从所述初始化内存池集合其他内存池进行分配,否则,分配失败。
本发明实施例中,若所述内存池中其他插槽中不存在可用内存空间,则从所述初始化内存池集合中按照顺序轮询其他内存池,并按照上述步骤S110至步骤S140轮询所述初始化内存池集合中其他内存池,若未查找到所述插槽对应的内存空间大小,则分配失败。
如图2所示,本发明实施例提供内存管理方法中可用内存空间查找的具体过程如下:
先根据内存空间请求在所述初始化内存池集合中选取内存池,以所述内存池中内存空间的最小分配单元为单位获取适配的插槽。再根据所述插槽槽口大小在所述初始化内存池集合对应的全局暂缓释放区查找可用内存空间,若所述全局暂缓释放区存在内存空间分配成功;若所述全局暂缓释放区不存在,在所述适配插槽的当前分配器的分配内存空间查找可用内存空间,若所述当前分配器的分配内存空间存在内存空间分配成功;若所述当前分配器的分配内存空间不存在,在所述内存池中其他插槽中查找可用内存空间,若所述内存池中其他插槽中存在内存空间分配成功;若所述内存池中其他插槽中不存在,轮询所述初始化内存池集合中的其他内存池查找可用空间,若所述初始化内存池集合中的其他内存池存在内存空间分配成功;若所述初始化内存池集合中的其他内存池不存在内存空间分配失败。
本发明实施例通过根据内存空间请求在初始化内存池集合选取内存池,并在所述内存池内以最小分配单元为单位获取适配的插槽;根据所述插槽大小按照顺序从所述初始化内存池集合对应的全局暂缓释放区、所述插槽的当前分配器的分配内存空间、所述内存池中其他插槽中、所述初始化内存池集合其他内存池中查找分配可用内存空间;若都未查找到,则分配失败。解决初始化不同粒度内存块大小不一致使得申请内存空间放大和出家分配的内存块不能重复利用的技术问题,实现了对可用内存空间的树形管理,加快了可用内存空间查找速度,提高了内存空间的利用率和分配效率。
在一种实施例中,如图3所示,上述内存管理方法还可以包括以下步骤:
S310,根据接收的回调请求对聚合的内存块的参数进行判断;
其中,所述参数为所述聚合的内存块在分裂过程中的分裂参数。
本发明实施例中,所述聚合的内存块为大于所述最小分配单元的内存空间,所述聚合的内存块可以是在连续读取过程中,根据连续读取请求聚合的内存块。当所述连续读取请求回调之后,可以对所述聚合的内存块进行分裂,使得在所述聚合的内存块分裂后,分裂的内存空间指向需要对所述分裂的内存空间中信息进行读取的请求,以减少一个内存拷贝。
S320,若所述参数满足分裂条件,根据所述参数从所述聚合的内存块中分裂出分裂内存块;
其中,所述聚合的内存块分裂为将所述聚合内存块内存空间进行分裂;分裂的过程内存空间中存储信息不被破坏,保存在所述聚合的内存块原来对应的内存空间中。
其中,所述分裂条件,包括:分裂地址属于所述聚合的内存块的地址范围,且分裂大小小于所述聚合的内存块的内存空间大小;所述参数中分裂地址为所述大内存块需要被分裂的位置;所述参数中分裂大小为所述大内存块中分裂的大小。
本发明实施例中,需要对所述参数进行核对,以确定所述聚合的内存块可以根据所述参数是否能够进行分裂。其中,所述分裂地址属于所述聚合的内存块的地址范围,即所述参数中分裂地址在所述聚合的内存块的内存空间上。其中,分裂大小小于所述聚合的内存块的内存空间大小,所参数中分裂出的内存空间大小应小于所述聚合的内存块的内存空间大小。
S330,根据所述分裂内存块的构造元数据;
其中,所述构造元数据为用于描述所述聚合的内存块分裂出内存块属性的数据。其中,所述分裂内存块构造元数据,包括:将所述分裂内存的元数据中的内存大小构造为所述分裂大小;将所述分裂内存的元数据中的地址构造为聚合的内存块的地址加上所述分裂参数中的偏移量;将所述分裂内存的元数据的立即释放标记构造为真。
S340,若存在第一内存块,则修改所述第一内存块的元数据;
其中,所述第一内存块为所述聚合的内存块中除所述分裂内存块之外的其余内存块。
本发明实施例中,所述聚合的内存块从所述分裂地址的位置开始分裂,使得所述聚合的内存块中分裂出去的所述分裂内存块位于所述聚合的内存块的内存空间的两端,并根据所述参数中的偏移量进行偏移。
其中,所述修改所述第一内存块的元数据,包括:将所述聚合的内存块的元数据中的内存大小减去所述分裂内存块的大小,得到更新内存块大小;将所述聚合的内存块的元数据中的地址值更新为除所述分裂内存块的地址值之外的地址,得到更新地址;将所述第一内存块的元数据中的内存大小修改为所述更新内存块大小,将所述第一内存块的元数据中的地址修改为所述更新地址;将所述第一内存块的元数据的立即释放标志修改为真。
本发明实施例通过根据接收的回调请求对聚合的内存块的参数进行判断;若所述参数满足分裂条件,根据所述参数从所述聚合的内存块中分裂出分裂内存块;根据所述分裂内存块的构造元数据;若存在第一内存块,则修改所述第一内存块的元数据。利用被分裂内存空间的零拷贝逻辑进行逻辑回收,加强对暂缓释放区的内存管理,使得内存空间运用局部性原理,为下一次高效分配内存空间提供基础。
在一种实施例中,如图4所示,上述内存管理方法还可以包括以下步骤:
S410,根据所述释放内存空间的元数据,确定所述释放内存空间所属插槽中对应分配器;
其中,所属插槽中对应分配器为所述释放的内存空间所属内存池中插槽中进行内存管理的分配器。
S420,检查所述释放内存空间的元数据的立即释放标记是否为真;
若所述立即释放标记为真,将所述释放内存空间回收至所述分配器所属的内存池;
本发明实施例中,当所述释放内存空间需要立即回收,将所述释放内存空间归入所述分配器所属的内存池中。其中,所述分配器为可以对对所述释放内存空间进行内存管理的分配器。其中,所属的内存池为所述释放内存空间在内存分配之前归入的内存池。其中,所属的内存池与所述分配器具有对应关系,即,所属的内存池的在进行内存分配之前的部分内存空间由所述分配器进行内存管理。
S430,若所述立即释放标记为否,判断所述释放内存空间是否可加入至所述初始化内存池集合对应的全局暂缓释放区;
本发明实施例中,当所述释放内存空间中立即释放标记无法判断是否需要进行立即释放,需要判断所述释放内存空间是可以加入所述初始化内存池集合对应的全局暂缓释放区。由于,所述全局暂缓释放区是根据各插槽设置的固定大小内存管理位,若所述释放内存空间所属插槽的槽口大小与所述全局展缓释放区中设置的各内存管理位均不匹配。所述释放内存空间将不可加入至所述全局暂缓释放区。其中,所述内存管理位为根据插槽的槽口固定大小对应设置存放内存空间位置。
S440,若所述释放内存不可加入至所述初始化内存池集合对应的全局暂缓释放区,对所属插槽进行加锁;
若加锁成功,对所述释放内存空间回收至所述分配器所属的内存池;
其中,上述加锁是内存空间加锁技术,可以理解为当多条线程正在进行访问进行内存空间申请时对所述释放内存空间所属插槽进行加锁,相当于对所述释放空间进行加锁。那么其他线程就会直接跳过所述释放内存空间,不会发生线程等待的情况。
本发明实施例中,当所述释放内存空间中立即释放标记无法判断是否需要进行立即释放,也不可以加入所述初始化内存池集合对应的全局暂缓释放区。所述释放的内存空间处于释放后却未被进行内存管理的状态,当系统出现数据竞争或者数据错乱时会对所述释放内存空间调度是出现问题,需要对所述释放内存空间的所属插槽进行加锁处理,避免干扰。对所述释放内存空间的所属插槽进行加锁处理之后,所属插槽中所述分配器之间对应关系确定后,再将所述释放内存空间回收至所述分配器所属的内存池。
其中,所述释放内存空间回收至所述分配器所属的内存池,包括:若所属插槽中对应分配器为空分配器,且所述空分配器不是所述插槽的当前分配器,将所述空分配器迁移至全局可用空分配器列表中;若所属插槽中对应分配器为可用分配器,将所属插槽中对应分配器加入至所属插槽备用分配器列表中。
步骤S450,若加锁失败,将所述释放内存加入到所述内存池对应的私有暂缓释放区。
本发明实施例中提供的内存管理方法的内存空间释放过程的具体如下:
如图5所示,根据所述释放内存空间元数据中的信息,确定所述释放内存空间在未分配前所属内存池和所属内存池中对应的分配器归入的插槽。所述插槽即为所属插槽。查看所述释放内存空间元数据中立即释放标记是否为真,当立即释放标记为真,将所述释放内存空间回收至所述分配器所属内存池,在所属内存池内存空间内进行内存管理了;当所述立即释放标记为否,将所述释放内存空间尝试加入至所述初始化内存池集合对应的全局暂缓释放区,当所述释放内存空间加入所述全局暂缓释放区成功,所述释放内存空间在所述全局暂缓释放区进行内存管理;当所述全局暂缓释放区没有与所述释放内存空间归入插槽槽口大小的内存空间位,所述释放内存空间加入所述全局暂缓释放区失败,对所述释放内存空间归入插槽进行加锁处理。当对所述插槽加锁失败,将所述释放内存空间加入至所属内存池对应的私有暂缓释放区进行内存管理;当对所述插槽加锁成功,将所述释放回收至所述分配器所属内存池进行内存管理。
本发明实施例通过根据所述释放内存空间的元数据,确定所述释放内存空间所属插槽中对应分配器;检查所述释放内存空间的元数据的立即释放标记是否为真;若所述立即释放标记为真,将所述释放内存空间回收至所述分配器所属的内存池;若所述立即释放标记为否,判断所述释放内存空间是否可加入至所述初始化内存池集合对应的全局暂缓释放区;若所述释放内存不可加入至所述初始化内存池集合对应的全局暂缓释放区,对所属插槽进行加锁;若加锁成功,对所述释放内存空间回收至所述分配器所属的内存池;若加锁失败,将所述释放内存加入到所述内存池对应的私有暂缓释放区。利用释放内存空间的元数据中立即释放标记,实时对全局暂缓释放区的内存空间状态进行监测,防止在释放过程中内存空间泄漏并及时对全局暂缓释放区进行回收。
图6为本发明实施例四提供的一种电子设备的结构示意图,如图6所示,该设备/终端/服务器包括处理器60、存储器61、输入装置62和输出装置63;设备/终端/服务器中处理器60的数量可以是一个或多个,图6中以一个处理器60为例;设备/终端/服务器中的处理器60、存储器61、输入装置62和输出装置63可以通过总线或其他方式连接,图6中以通过总线连接为例。
存储器61作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的内存管理方法对应的程序指令/模块。处理器60通过运行存储在存储器61中的软件程序、指令以及模块,从而执行设备/终端/服务器的各种功能应用以及数据处理,即实现上述的内存管理方法。
存储器61可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器61可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器61可进一步包括相对于处理器60远程设置的存储器,这些远程存储器可以通过网络连接至设备/终端/服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置62可用于接收输入信息,以及产生与设备/终端/服务器的用户设置以及功能控制有关的键信号输入。输出装置63可包括显示屏等显示设备。
本发明实施例五还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种内存管理方法,该方法包括:
根据内存空间请求在初始化内存池集合选取内存池,并在所述内存池内以最小分配单元为单位获取适配的插槽;
根据所述插槽大小在所述初始化内存池集合对应的全局暂缓释放区查找可用内存空间;
若所述全局暂缓释放区中不存在可用内存空间,则在所述插槽的当前分配器的分配内存空间查找可用内存空间;
若所述当前分配器的分配内存空间在不存在可用内存空间,则在所述内存池中其他插槽中查找可用内存空间;
若所述内存池中其他插槽中不存在可用内存空间,则从所述初始化内存池集合其他内存池进行分配,否则,分配失败。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的内存管理方法中的相关操作.
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述搜索装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (12)
1.一种内存管理方法,其特征在于,包括:
根据内存空间请求在初始化内存池集合选取内存池,并在所述内存池内以最小分配单元为单位获取适配的插槽,其中,所述适配的插槽为根据所述内存空间请求对应的内存空间大小以所述最小分配单元为单位向下取整获取的插槽;
根据插槽大小在所述初始化内存池集合对应的全局暂缓释放区查找可用内存空间;
若所述全局暂缓释放区中不存在可用内存空间,则在所述插槽的当前分配器的分配内存空间查找可用内存空间;
若所述当前分配器的分配内存空间在不存在可用内存空间,则在所述内存池中其他插槽中查找可用内存空间;
若所述内存池中其他插槽中不存在可用内存空间,则从所述初始化内存池集合其他内存池进行分配,否则,分配失败。
2.根据权利要求1所述的方法,其特征在于,在所述插槽的当前分配器中分配内存空间查找可用内存空间之前,还包括:
释放所述内存池内私有暂缓释放区,将释放的内存空间加入到所属内存分配器;
若所述所属内存分配器为空分配器,且所述空分配器不是所述插槽的当前分配器,将所述空分配器迁移至全局可用空分配器列表中;若所属内存分配器为可用分配器且不是所述插槽的当前分配器,将所属分配器加入到备用分配器列表中。
3.根据权利要求1所述的方法,其特征在于,在所述内存池中其他插槽中查找可用内存空间,包括:
从小于所述插槽的其他插槽的分配器中查找可用分配器;
若所述小于所述插槽的其他插槽的分配器中不存在可用分配器,则从所述初始化内存池集合对应的全局可用空分配器列表中选择分配器在所属内存池中查找可用空间;
若所述选择分配器在所属内存池中未查找到可用空间,并且所述内存池中当前的分配器个数未超过所述内存池空间最大允许的分配器个数,则从系统中申请分配器大小的内存空间生成新的分配器加入至所述插槽中进行可用空间查找。
4.根据权利要求1所述的方法,其特征在于,根据内存空间请求在初始化内存池集合选取内存池,包括:
根据所述内存空间请求在所述初始化内存池集合中选取与计数器计数值对应的内存池;
其中,所述初始化内存池集合对应计数器。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据接收的回调请求对聚合的内存块的参数进行判断;
若所述参数满足分裂条件,根据所述参数从所述聚合的内存块中分裂出分裂内存块;
根据所述分裂内存块的构造元数据;
若存在第一内存块,则修改所述第一内存块的元数据;
其中,所述第一内存块为所述聚合的内存块中除所述分裂内存块之外的其余内存块。
6.根据权利要求5所述的方法,其特征在于,所述分裂条件,包括:
分裂地址属于所述聚合的内存块的地址范围,且分裂大小小于所述聚合的内存块的内存空间大小;
所述参数中分裂地址为大内存块需要被分裂的位置;
所述参数中分裂大小为所述大内存块中分裂的大小。
7.根据权利要求5所述的方法,其特征在于,所述修改所述第一内存块的元数据,包括:
将所述聚合的内存块的元数据中的内存大小减去所述分裂内存块的大小,得到更新内存块大小;
将所述聚合的内存块的元数据中的地址值更新为除所述分裂内存块的地址值之外的地址,得到更新地址;
将所述第一内存块的元数据中的内存大小修改为所述更新内存块大小,将所述第一内存块的元数据中的地址修改为所述更新地址;
将所述第一内存块的元数据的立即释放标志修改为真。
8.根据权利要求5所述的方法,其特征在于,所述分裂内存块构造元数据,包括:
将所述分裂内存的元数据中的内存大小构造为分裂大小;
将所述分裂内存的元数据中的地址构造为聚合的内存块的地址加上分裂参数中的偏移量;
将所述分裂内存的元数据的立即释放标记构造为真。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据释放内存空间的元数据,确定所述释放内存空间所属插槽中对应分配器;
检查所述释放内存空间的元数据的立即释放标记是否为真;
若所述立即释放标记为真,将所述释放内存空间回收至所述分配器所属的内存池;
若所述立即释放标记为否,判断所述释放内存空间是否可加入至所述初始化内存池集合对应的全局暂缓释放区;
若所述释放内存不可加入至所述初始化内存池集合对应的全局暂缓释放区,对所属插槽进行加锁;
若加锁成功,对所述释放内存空间回收至所述分配器所属的内存池;
若加锁失败,将所述释放内存加入到所述内存池对应的私有暂缓释放区。
10.根据权利要求9所述的方法,其特征在于,所述释放内存空间回收至所述分配器所属的内存池,包括:
若所属插槽中对应分配器为空分配器,且所述空分配器不是所述插槽的当前分配器,将所述空分配器迁移至全局可用空分配器列表中;
若所属插槽中对应分配器为可用分配器,将所属插槽中对应分配器加入至所属插槽备用分配器列表中。
11.一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-10中任一所述的内存管理方法。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-10中任一所述的内存管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110199568.0A CN112817766B (zh) | 2021-02-22 | 2021-02-22 | 一种内存管理方法、电子设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110199568.0A CN112817766B (zh) | 2021-02-22 | 2021-02-22 | 一种内存管理方法、电子设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112817766A CN112817766A (zh) | 2021-05-18 |
CN112817766B true CN112817766B (zh) | 2024-01-30 |
Family
ID=75864851
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110199568.0A Active CN112817766B (zh) | 2021-02-22 | 2021-02-22 | 一种内存管理方法、电子设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112817766B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007109920A1 (fr) * | 2006-03-27 | 2007-10-04 | Zte Corporation | Procédé de construction et d'utilisation d'un pool de mémoire |
CN101149703A (zh) * | 2007-10-10 | 2008-03-26 | 中兴通讯股份有限公司 | 一种固定内存的管理方法 |
KR20090003812A (ko) * | 2007-07-04 | 2009-01-12 | 주식회사롭테크놀러지 | 용량 확장 가능한 플래시 메모리 저장장치 |
CN104063328A (zh) * | 2014-04-04 | 2014-09-24 | 浪潮电子信息产业股份有限公司 | 一种缓解碎片产生的内存管理方法 |
CN107305506A (zh) * | 2016-04-20 | 2017-10-31 | 阿里巴巴集团控股有限公司 | 动态分配内存的方法、装置及系统 |
WO2020051839A1 (en) * | 2018-09-13 | 2020-03-19 | Micron Technology, Inc. | Class-based dynamic memory slot allocation |
CN111708638A (zh) * | 2020-06-18 | 2020-09-25 | 网易(杭州)网络有限公司 | 内存分配方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6042170B2 (ja) * | 2012-10-19 | 2016-12-14 | ルネサスエレクトロニクス株式会社 | キャッシュ制御装置及びキャッシュ制御方法 |
-
2021
- 2021-02-22 CN CN202110199568.0A patent/CN112817766B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007109920A1 (fr) * | 2006-03-27 | 2007-10-04 | Zte Corporation | Procédé de construction et d'utilisation d'un pool de mémoire |
KR20090003812A (ko) * | 2007-07-04 | 2009-01-12 | 주식회사롭테크놀러지 | 용량 확장 가능한 플래시 메모리 저장장치 |
CN101149703A (zh) * | 2007-10-10 | 2008-03-26 | 中兴通讯股份有限公司 | 一种固定内存的管理方法 |
CN104063328A (zh) * | 2014-04-04 | 2014-09-24 | 浪潮电子信息产业股份有限公司 | 一种缓解碎片产生的内存管理方法 |
CN107305506A (zh) * | 2016-04-20 | 2017-10-31 | 阿里巴巴集团控股有限公司 | 动态分配内存的方法、装置及系统 |
WO2020051839A1 (en) * | 2018-09-13 | 2020-03-19 | Micron Technology, Inc. | Class-based dynamic memory slot allocation |
CN111708638A (zh) * | 2020-06-18 | 2020-09-25 | 网易(杭州)网络有限公司 | 内存分配方法、装置、设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
一种跨平台内存池的设计与实现;刘娟;唐玄;;蚌埠学院学报(第02期);23-27 * |
基于实时流式计算系统的数据分类节能策略;蒲勇霖;于炯;鲁亮;廖彬;王跃飞;罗世奇;;计算机工程与设计(第01期);59-64 * |
Also Published As
Publication number | Publication date |
---|---|
CN112817766A (zh) | 2021-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110096336B (zh) | 数据监控方法、装置、设备和介质 | |
CN103530168B (zh) | 基于虚拟化技术的多卫星遥感数据处理系统和方法 | |
WO2022062833A1 (zh) | 内存分配方法及相关设备 | |
CN110858162A (zh) | 内存管理方法及装置、服务器 | |
CN115599300A (zh) | 一种任务分配方法、装置、设备及介质 | |
WO2024099448A1 (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN104850505A (zh) | 基于链式堆叠的内存管理方法与系统 | |
CN112579692A (zh) | 一种数据同步方法、装置、系统、设备及存储介质 | |
CN107977275B (zh) | 基于消息队列的任务处理方法及相关设备 | |
CN118193222A (zh) | 一种内存处理方法、装置、电子设备及存储介质 | |
CN111008071A (zh) | 任务调度系统、方法和服务器 | |
CN114217979A (zh) | 单据处理方法、装置、计算机设备和存储介质 | |
CN112817766B (zh) | 一种内存管理方法、电子设备及介质 | |
CN116401242A (zh) | 唯一标识符生成方法及计算设备 | |
CN111198756A (zh) | 一种kubernetes集群的应用调度方法及装置 | |
CN112346848A (zh) | 一种管理内存池的方法、装置及终端 | |
CN113905014B (zh) | 用于为终端设备分配id号的方法、服务器和存储介质 | |
CN113849309B (zh) | 一种业务对象的内存分配方法以及装置 | |
CN115729702A (zh) | 应用程序内存配置方法、电子设备、计算机存储介质 | |
CN113672173B (zh) | 一种存储卷扩容方法、系统、设备及可读存储介质 | |
CN115756838A (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN113778688A (zh) | 内存管理系统、内存管理方法、内存管理装置 | |
CN114157717A (zh) | 一种微服务动态限流的系统及方法 | |
CN112947863A (zh) | 一种飞腾服务器平台下存储空间合并成的方法 | |
US20240104073A1 (en) | Storage management methods and apparatuses for distributed database |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 100000 Unit 501A, Floor 5, 101, Building 1, Yard 5, Laiguangying West Road, Chaoyang District, Beijing Applicant after: Beijing Qingyun Science and Technology Co.,Ltd. Address before: 100020 601, 6 floor, 16 building, No. 36 Chuang Yuan Road, Chaoyang District, Beijing. Applicant before: Beijing Qingyun Science and Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |