CN112346848A - 一种管理内存池的方法、装置及终端 - Google Patents
一种管理内存池的方法、装置及终端 Download PDFInfo
- Publication number
- CN112346848A CN112346848A CN201910733930.0A CN201910733930A CN112346848A CN 112346848 A CN112346848 A CN 112346848A CN 201910733930 A CN201910733930 A CN 201910733930A CN 112346848 A CN112346848 A CN 112346848A
- Authority
- CN
- China
- Prior art keywords
- memory
- thread
- queue
- preset
- memory block
- 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.)
- Pending
Links
Images
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
-
- 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/5022—Mechanisms to release resources
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
技术领域
本发明涉及通讯领域,特别是涉及一种管理内存池的方法、装置及终端。
背景技术
在移动通信领域,5G的网络架构将是云化的软件结构,要求软件的组织不再是一个单体的软件,软件要按不同的维度划分为各类服务,服务又可以细化为由各种微服务组成,即所谓微服务架构。容器技术的兴起,更促进了微服务架构的发展。
5G时代的万物互联需求,要求容器具有高并发的处理能力。而容器的部署非常灵活,一个节点上可能部署多个容器,容器高效的使用内存资源,并适应高并发的场景,有利于***整体性能的提升。
业界目前已经有了很多管理内存的框架,而且有些开发语言本身就支持内存池技术,但大多诞生于互联网领域,通用性较好,但应用于多线程高并发场景,就会存在锁资源的竞争,从而影响内存的并发处理性能。
发明内容
本发明提供了一种管理内存池的方法、装置及终端,用以解决现有技术中由于线程锁定内存资源而影响多线程并发性能的问题。
为解决上述技术问题,第一方面,本发明提供一种管理内存池的方法,该方法包括:预设各线程对应的内存池以及各线程对应的归还队列和空闲队列,所述内存池中包含若干内存块;针对任一线程,所述归还队列用于存放该线程提供给其他线程使用后释放的内存块的索引,所述空闲队列用于存放该线程的空闲的内存块的索引;基于所述归还队列和所述空闲队列,对各线程的内存池进行管理。
优选地,所述内存池上均设有内存标识,所述内存标识用于标识所述内存池内的内存块所对应的内存池。
优选地,所述基于所述归还队列和所述空闲队列,对各线程申请内存块进行管理,包括:当任一线程申请内存块时,将该线程所对应的归还队列内的内存块迭代回收到该线程所对应的空闲队列,并从所述空闲队列中为该线程分配内存块。
优选地,所述归还队列的内存块的索引为按照不同异线程下内存块的不同的预设固定长度分类进行存放;所述异线程包括不同于本线程的其他线程。
优选地,当任一线程申请内存块时,将该线程所对应的归还队列内的内存块迭代回收到该线程所对应的空闲队列,并从所述空闲队列中为该线程分配内存块,包括:
设申请内存块的任一线程为内存申请线程,将所述内存申请线程所对应的归还队列内第一异线程释放的各个不同的预设固定长度类别的内存块迭代地从第一个内存块至倒数第二个内存块回收到所述内存申请线程所对应的空闲队列;当在迭代地回收所述第一异线程释放的内存块后,在所述内存申请线程所对应的空闲队列中不包含所述内存申请线程所申请的内存块时,则从所述内存池里的预设内存片中申请内存块,如果在所述预设内存片内没有找到所申请的内存块时,则迭代地回收所述归还队列内第二异线程释放的各个不同的预设固定长度类别的内存块到所述空闲队列,并判断所述内存申请线程所对应的空闲队列中是否有所申请的内存块,如果没有,则继续迭代地回收其他异线程释放的内存块,如果遍历所有归还队列均没有找到所申请的内存块,则从***中申请新的预设内存片,并从该预设内存片中给所述线程分配内存块;其中,所述预设内存片中包含设定数量的内存块。
优选地,所述基于所述归还队列和所述空闲队列,对各线程的内存池进行管理,还包括:
将所述线程所对应的归还队列内的内存块迭代回收到所述线程所对应的空闲队列之前,判断所述内存申请线程所申请的内存块的大小是否超过预设的最大内存块阈值,如果是,则从所述预设内存片中申请内存块,所申请的内存块的大小等于所述内存申请线程所申请内存块的大小。
优选地,所述空闲队列内的内存块的索引为按照内存块的不同的预设固定长度分类进行存放。
优选地,所述从所述空闲队列中为该线程分配内存块,包括:根据该线程所申请内存块的大小,从该线程对应的空闲队列选择与所申请的内存块大小最接近的内存块分配给该线程。
优选地,所述基于所述归还队列和所述空闲队列,对各线程的内存池进行管理,还包括:所述将该线程所对应的归还队列内的内存块迭代回收到该线程所对应的空闲队列之前,判断所述线程所申请的内存块是否是长生命周期内存块,如果是,则进一步根据该被申请的内存块所属的预设内存片的生命周期标识判断该预设内存片是否是长生命周期内存;如果所述预设内存片是长生命周期内存,则将所述预设内存片的长生命周期内存数量增加一;否则修改所述预设内存片的生命周期标识,并将所述预设内存片的长生命周期内存数量增加一;其中,所述长生命周期内存块为实体建模的内存块,所述预设内存片中包含设定数量的内存块。
优选地,基于所述归还队列和所述空闲队列,对个线程的内存池进行管理,包括:当有内存块释放时,判断该被释放的内存块是否是同线程释放;如果是同线程释放,则直接检查该被释放的内存块是否符合预设的复用条件;如果是异线程释放,则将所述内存块存放在所述内存块所属的线程的归还队列,并在申请复用该内存块时,检查所述内存块是否符合预设的复用条件。
优选地,所述预设的复用条件包括:当释放的内存块是长生命周期内存块时,将该释放的内存块所归属预设内存片的长生命周期内存数量减一,当长生命周期的内存块数量大于0时,该内存块所归属的预设内存片内的所有内存块均可被复用,当长生命周期内存块的数量为0时,则待该预设内存片上的所有内存块都释放后,将该预设内存片归还给***。
优选地,基于所述归还队列和所述空闲队列,对所述线程释放内存块进行管理,还包括:判断该释放的内存块是否是同线程释放之前,判断释放的内存块大小是否超过预设的最大内存块阈值,如果是,则直接将释放的内存块归还给***。
第二方面,本发明提供一种管理内存池的装置,该装置包括:设置单元,用于预设各线程对应的内存池以及各线程对应的归还队列和空闲队列,所述内存池中包含若干内存块;针对任一线程,所述归还队列用于存放该线程提供给其他线程使用后释放的内存块的索引,所述空闲队列用于存放该线程的空闲的内存块的索引;处理单元,用于基于所述归还队列和所述空闲队列,对各线程的内存池进行管理。
第三方面,本发明还提供了一种计算机可读存储介质,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述的管理内存池的方法的步骤。
第四方面,本发明提供了一种终端,所述终端包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上述任一种所述管理内存池的方法的步骤。
本发明至少能够带来以下的有益效果:
本发明通过设置线程对应的归还队列和空闲队列,通过归还队列来管理异线程释放的内存块(User Block,UB),从而实现对不同线程之间的共享内存块进行管理,并通过归还队列和空闲队列来对该线程的所有内存块进行管理,从而实现线程与内存资源不是完全锁定的,进而有效解决了现有的线程需要锁定内存资源,从而影响多线程并发性能的问题。
附图说明
图1是本发明第一实施例中管理内存池的方法的流程示意图;
图2是本发明第一实施例中回收异线程释放内存块的流程示意图;
图3是本发明第一实施例中预设内存片的结构示意图;
图4是本发明第一实施例中内存块的结构示意图;
图5是本发明第二实施例中管理内存池的装置的结构示意图。
具体实施方式
为了解决现有技术中线程需要锁定内存资源而影响多线程并发性能的问题,本发明提供了一种管理内存池的方法,通过设置线程对应的归还队列和空闲队列,并通过归还队列来管理异线程释放的内存块,从而实现对不同线程之间的共享内存块进行管理,以及通过归还队列和空闲队列来对该线程的所有内存块进行管理,从而实现线程与内存资源不是完全锁定的,进而有效解决了现有的线程需要锁定内存资源而影响多线程并发性能的问题。以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
第一实施例
本发明实施例提供了一种管理内存池的方法,该方法的流程如图1所示,包括步骤S101至S102:
S101,预设各线程对应的内存池以及各线程对应的归还队列和空闲队列,所述内存池中包含若干内存块;
其中,本发明实施例是针对任一线程,所述归还队列用于存放该线程提供给其他线程使用后释放的内存块的索引,所述空闲队列用于存放该线程的空闲的内存块的索引;
如图2所示,本发明实施例的空闲队列里包括第一线程(即,thread 1,对应第一内存池对象pool 1)内的所有空闲内存块,归还队列内包括第二线程(即,thread 2,对应第一内存池对象pool 2)以及第三线程(即,thread 3,对应第一内存池对象pool 3)内的所有异线程释放的内存块,并且根据图2可知,空闲队列和归还队列中的内存块都是按照大小不同的一系列预设固定长度来进行保存的,例如,包括128字节长度的一列内存块,256字节长度的一列内存块,等等。
具体实施时,本发明实施例中所述内存池上均设有内存标识,所述内存标识用于标识所述内存池内的内存块所对应的内存池。也就是说,本发明实施例通过该内存标识建立线程所对应的内存池里的内存块,与该线程的归还队列和空闲队列的关联关系,即,本发明实施例是通过该内存标识将内存块和线程进行关联,并通过空闲队列和归还队列来对内存块进行管理。
S102,基于所述归还队列和所述空闲队列,对各线程的内存池进行管理。
具体来说,本发明实施例主要是基于所述归还队列和所述空闲队列,对各线程申请内存块和释放内存块进行管理。
具体实施时,本发明实施例为每个线程设置独立的内存池对象,通过内存池对象来管理内存块的申请释放等等,具体地,本发明实施例的内存池对象是通过线程下的空闲队列和归还队列来对内存块的申请和释放进行管理。
另外,在具体实施时,本发明实施例还设置相应的仓储对象,通过该仓储对象来管理所有的内存池对象,为内存池对象分配内存标识ID,即所述内存池上的内存标识,本发明实施例在具体实施时,是通过仓储对象来为内存池对象分配该内存标识,,并通过该内存标识来建立同一线程下的内存池对象、内存池、内存块、归还队列、空闲队列之间的关联关系,也就是说,通过该仓储对象分配的内存标识来标识同一线程下的内存池对象、内存池、内存块、归还队列、空闲队列之间的关联关系。当然本领域技术人员在具体实施时,也可以通过其他方式来分配内存标识,本发明实施例对此不作具体限定。
需要说明的是,本发明实施例中所述的内存池为从终端的***中分配给线程的内存,也就是说,本发明实施例也会给线程分配与其相对应的内存,但是本发明的内存可以实现以异线程的共享,而并不会像现有技术将线程与内存进行完全锁定。本发明实施例所述的***为服务器等终端上的操作***。
具体实施时,本发明实施例是为每个线程分配一个或多个预设内存片(也可以称为大片内存LargeMem),而该预设内存片中则进一步包括一系列各种不同大小的多个内存块,以供线程的不同申请情况进行使用。对于具体内存块的划分,本领域技术人员可以根据实际的线程情况预先进行划分。
需要说明的是,为了避免占用过多内存资源,在具体实施时,本发明实施例是为每个线程分配一个预设内存片,该预设内存片为预定大小的内存,例如1M的内存,或者是4M的内存等等。
可以理解为,本发明实施例的内存池包括一个或多个预设内存片,线程所申请的内存块和释放的内存块均在该预设内存片内进行,并通过内存池对象来对申请和释放内存块,以及空闲队列和归还队列进行统一管理。
总体来说,本发明实施例的核心思想就是通过设置线程对应的归还队列和空闲队列,通过归还队列和空闲队列来管理本线程的内存块和异线程释放的内存块,最终实现不同线程之间的内存块的共享,从而提高多线程并发处理性能。
相对于现有技术中线程需要锁定内存资源而言,本发明实施例中的内存资源与线程之间并不是锁定的,所以本发明实施例所述的方法能够很好的处理多线程并发的问题,从而获得较好的内存使用效果。
也就是说,本发明实施例支持线程间共享UB,一个线程内存池对象申请的UB可以发送给另一个线程处理,另一个线程释放该UB后,该异线程释放的UB会被放入归还队列,待线程申请内存块时,再迭代的从归还队列中将内存块回收到空闲队列,并通过空闲队列来进行内存块的分配。
本发明实施例中,基于所述归还队列和所述空闲队列,对各线程申请内存块进行管理,包括:当任一线程申请内存块时,将该线程所对应的归还队列内的内存块迭代回收到该线程所对应的空闲队列,并从所述空闲队列中为该线程分配内存块。
也就是说,本发明实施例对异线程释放的UB采用的是两阶段回收复用UB的方法,即,第一阶段,异线程释放UB时,先将UB放入本线程的归还队列。第二阶段,UB归属的内存池在申请UB时,触发从归还队列中迭代地串接UB回空闲队列,从而完成回收复用UB的过程,整个回收和分配UB过程中不用锁,使得串接UB的算法复杂度为O(1)。
需要说明的是,本发明实施例的所述归还队列的内存块的索引为按照不同异线程下内存块的不同的预设固定长度分类进行存放;所述异线程即为不同于本线程的其他线程。所述空闲队列内的内存块的索引为按照内存块的不同的预设固定长度分类进行存放。
也就是说,为了便于对内存块的管理,本发明实施例中空闲队列和归还队列的内存块都是按照大小不同的长度来分列排列内存块的,每一列的内存块的长度都相同,不同的是,归还队列中还需按照各个异线程先进行第一步分组,然后再在每一个异线程下进一步按照内存块的不同的预设固定长度系列进行存放。具体实施时,每一列的内存块的长度以及具体设置多少个列别,都可以根据实际需要来进行设置,本发明对此不作具体限定。如,设置第一列为100个128字节的内存块,第二列为100个256字节的内存块,以此类推,还可以设置更多列的内存块。
本发明实施例中,当任一线程申请内存块时,将该线程所对应的归还队列内的内存块迭代回收到该线程所对应的空闲队列,并从所述空闲队列中为该线程分配内存块,包括:
设申请内存块的任一线程为内存申请线程,将所述内存申请线程所对应的归还队列内第一异线程释放的各个不同的预设固定长度类别的内存块迭代地从第一个内存块至倒数第二个内存块回收到所述内存申请线程所对应的空闲队列;
当在迭代地回收所述第一异线程释放的内存块后,在所述内存申请线程所对应的空闲队列中不包含所述内存申请线程所申请的内存块时,则从所述内存池里的预设内存片中申请内存块,如果在所述预设内存片内没有找到所申请的内存块时,则迭代地回收所述归还队列内第二异线程释放的各个不同的预设固定长度类别的内存块到所述空闲队列,并判断所述内存申请线程所对应的空闲队列中是否有所申请的内存块,如果没有,则继续迭代地回收其他异线程释放的内存块,如果遍历所有归还队列均没有找到所申请的内存块,则从***中申请新的预设内存片,并从该预设内存片中给所述线程分配内存块;
其中,所述预设内存片中包含设定数量的内存块。
具体来说,本发明实施例回收复用异线程释放的UB时,是按照预设的异线程顺序,先迭代的回收第一异线程所对应的归还队列,如果回收后空闲队列还为空,则从大片内存中申请内存,如果大片内存没有空间,则尝试从所有归还队列回收内存到空闲队列,如果空闲队列还是空,则申请新的大片内存。
具体实施时,本发明实施例中每一列的内存块都是按照其释放时间的先后顺序进行排列的,在迭代回收内存块也是按照内存块的排布顺序,将先释放的内存块先回收,而保留每一列最后释放的内存块,以便后续将其他被释放的内存块保存到相应的队列中。
为了便于理解,下面将结合图2对本发明实施例中异线程释放UB的过程进行详细说明:在第一线程申请内存块时,则触发异线程的归还队列内的内存块回收到空闲队列(free Que),在回收过程中,首先回收第一异线程释放的每一系列的预设固定长度的内存块,具体是将每一系列的预设固定长度的内存块的第一个内存块至倒数第二个内存块到空闲队列中相应的长度的内存块队列中,如果回收后,空闲队列还没有找到所要申请的内存块,则从预设内存片中申请内存块,如果在所述预设内存片内没有找到所申请的内存块时(有可能是预设内存片没有足够空间分配),就触发回收第二异线程程释放的每一系列的预设固定长度的内存块,具体也是将每一系列的预设固定长度的内存块的第一个内存块至倒数第二个内存块回收到空闲队列,依次类推,按照线程逐个的迭代回收异线程释放的内存块到归还队列,如果遍历所有归还队列均没有找到所申请的内存块,则从***中申请新的预设内存片,并从该预设内存片中给所述线程分配内存块。
另外,需要说明的是,为了便于管理,本发明实施例都是将回收后的内存块按照回收的内存块的大小,放入空闲队列中相应的预设固定长度的队列内。
具体实施时,如果线程预先没有创建其对应的归还队列时,本发明实施例的处理方法包括:在与申请UB的线程不同的线程中释放UB,根据UB归属的内存池的ID,在本线程内存池中寻找归还队列,如果不存在,则一次性创建归还队列数组,在本线程内存池中将归还队列数组与UB归属的线程ID关联,并将该归还队列数组指针放入UB归属的异线程释放队列(存放归还队列的队列)中。将释放的UB放入相应大小的归还队列;第二阶段是当申请UB时,查询1次异线程释放队列,从一个异线程归还队列中回收相应大小的UB,放入空闲队列。这里避免了扫描所有异线程归还队列,而是随申请UB的过程离散化地,挨个从异线程归还队列回收UB。在回收某一归还队列的UB时,归还队列中始终留有一个UB不回收,这样就不需要加锁控制,且回收的过程是一次性串接归还队列的队首到倒数第二个UB,放入空闲队列,所以本发明的算法复杂度是O(1)。
也就是说,本发明实施例UB的申请、回收复用都在本线程的内存池对象中进行。UB可以在不同的线程中共享,异线程释放UB采用两阶段回收复用UB的算法,使得UB的申请和释放过程无锁,从而提高了内存使用效率,进而提升了用户体验。而且本发明实施例的内存池具有高效、高并发特性,支持实体建模中的实体间的事件通信可以投递复杂的对象指针,从而避免了内部实体通信需要序列化和反序列化,减少大量的拷贝内存的操作。
在具体实施时,本发明实施例中,将所述线程所对应的归还队列索引内的内存块迭代回收到所述线程所对应的空闲队列之前,还包括:判断所述线程所申请的内存块的大小是否超过预设的最大内存块阈值,如果是,则从所述***中申请内存块,所申请的内存块的大小等于所述线程所申请内存块的大小。
即,在接收到线程申请的内存块时,首先要判断所申请的内存块的大小是否超过预设的最大内存块阈值(即,为上述的一系列的预设固定长度的内存块中的最大值),如果是,则直接从***中申请内存块。
可以理解为,当所要申请的内存块超过了预设的内存块的一系列的预设固定长度的最大值,就直接在预设内存片中申请相应的内存块。
需要说明的是,当预设内存片不够分配时,则从***新申请一个预设内存片,该预设内存片可以是一个统一规定好大小的内存,也可以是所申请的内存块的大小。
也就是说,当预设内存片不够分配时,可从***重新申请一个预设内存片,并从该预设内存片中进行内存块分配。该新申请的预设内存片可以是上述所申请的超过预设的最大内存块阈值的内存块的大小,当该内存块释放后,直接将预设内存片归还给***,当然也可以是按照预设申请一个预定大小的预设内存片,再从该预设内存片中进行内存块分配,而该预设内存片的其他部分也可以分配给线程的其他申请进行使用。
即,在具体实施时,本发明实施例可以预设所有预设内存片的大小都是统一的,或者也可以根据实际情况来具体设置所申的预设内存片的大小。本领域技术人员可以根据实际需要进行设置,本发明对此不作具体限定。
由于本发明实施例中内存块均为一系列预设固定长度的内存块,所以本发明实施例中,具体是根据所述线程所申请内存块UB的大小,从所述线程对应的空闲队列选择距所申请的内存块的大小最近的内存块分配给所述线程。
具体来说,本发明实施例中归还队列和空闲队列中的UB,都是一系列固定长度的UB,如果业务申请的UB与这些固定长度UB的大小不同,则归一化到这些固定大小的UB(往大取最靠近的UB)。而这些UB都是从大片内存中申请的,大片内存是从操作***申请的大块内存,一般超过1M。
例如,申请200字节的UB,内存池支持的最靠近这一大小的是256字节,那么就从256字节对应的归还队列回收UB,也从对应的空闲队列复用UB。
本发明实施例中,所述基于所述归还队列和所述空闲队列,对各线程申请内存块进行管理,还包括:
所述将该线程所对应的归还队列内的内存块迭代回收到该线程所对应的空闲队列之前,判断所述线程所申请的内存块是否是长生命周期内存块,如果是,则进一步根据该被申请的内存块所属的预设内存片的生命周期标识判断该预设内存片是否是长生命周期内存;
如果所述预设内存片是长生命周期内存,则将所述预设内存片的长生命周期内存数量增加一;
否则修改所述预设内存片的生命周期标识,并将所述预设内存片的长生命周期内存数量增加一;
其中,所述长生命周期内存块为实体建模的内存块,相对来说,本发明实施例的短生命周期的UB为事件通信的UB,另外本发明实施例中所述预设内存片为从所述内存池中获取的预设大小的内存,所述预设内存片中包含设定数量的内存块。
具体来说,为了避免微服务架构中某些微服务因冲突占用太多内存,而不归还***给整个***操作内存压力的问题,本发明实施例中,为预设内存片设置了生命周期标识,通过该标识来识别预设内存片的生命周期长短,将长生命周期的预设内存片继续进行复用,而对短生命周期的预设内存片则待所有内存块都释放完毕后,将该预设内存片归还***,从而有效保证整个***的高效率运作。
即,本发明实施例所述方法支持长、短生命周期的UB,使得实体建模和事件通信可以使用同一套内存池机制,方便内存的统一管理。当大片内存(即上述的预设内存片)都消耗完,则开辟新的大片内存。如果老的大片内存有长生命周期的UB,则其上的所有UB都能复用,避免因UB碎片化而导致无效的占用过多的内存;反之,则不能复用,待UB释放完后,老的大片内存即归还给***,从而避免因业务突发占用过多内存而不归还给***。
图3是本发明实施例的大片内存的结构示意图,如图3所示,大片内存结构中flag为回收大片内存的标志,该标志包括有两种,其中,MEM_INVALID标识待归属UB释放后,释放该大片内存,其UB不再复用;MEM_FIX标识有长生命周期的UB,归属的所有UB都能复用,memubNum标识归属该大片内存的UB数目,longLifeubNum标识归属该大片内存的长生命周期的UB数目,ub_pool标识大片内存头(LargeMemHeader)后面即为待分配UB的空间。
需要说明的是,当申请内存时,相应大小的空闲队列没有空闲UB,大片内存中也没有足够的空间,则会向***申请新的大片内存。而老大片内存根据其是否有长生命周期UB来设置大片内存头中的flag:
如果没有长生命周期UB,则设置为MEM_INVALID,归属老的大片内存的UB将不会被复用,待应用释放它们后,老的大片内存归还给***,也可以直接设置为将的大片内存归还给***,当然也可以通过设置一定的归还机制,实现将大片内存归还给***;
如果有长生命周期UB,则设置MEM_FIX,归属老大片内存的UB将会继续复用,所有长生命周期的UB释放后,其flag设置为MEM_INVALID,该老的大片内存的UB将会不会被复用,这些UB都释放后,该老大片内存将归还给***。
大片内存的释放是在申请UB时,取得空闲队列中的UB,首先检查该UB所归属的大片内存头的flag,如果为MEM_INVALID,则不复用该UB,大片内存头的memUBNum减一,继续寻找下一个空闲UB,当大片内存头的memUBNum为0时,大片内存将被归还给***;如果大片内存的flag不为MEM_INVALID,则可以复用归属它的UB。
也就是说,本发明实施例中的UB可以区分长、短生命周期,比如实体及其维护的数据结构可能就是长生命周期的,而实体间的事件通信可能就是短生命周期的。
线程在调用申请接口申请UB后,根据线程的语义,调用设置长生命周期接口设置长生命周期,该UB所归属的LargeMem头的longLifeUbNum增加1,如果flag标志为MEM_INVALID,则设置为MEM_FIX。
UB释放的时候,同线程释放立刻检查UB,异线程释放,在其归属的内存池复用UB时检查。如果UB是长生命周期的,其归属的LargeMem头的longLifeUbNum减一,当longLifeUbNum不为0时,返回复用该UB,当为0时,如果LargeMem的flag为MEM_FIX,则修改为MEM_INVALID,不复用该UB,进而LargeMem头的memUbNum减一,减为0(意味着UB都释放了),则将LargeMem归还给***。如果LargeMem的flag不为MEM_INVALID,则可以复用归属它的UB。
图4是本发明实施例中UB的结构示意图,如图4所示,本发明实施例的UB头结构中包括:lockSize标识UB的大小;occupied标识UB占用标志,用于防止重复释放(doublefree),isLongLife标识是否为长生命周期,poolObj标识UB所归属的内存池的指针,largeMem标识UB所归属的LargeMem指针,后面的字段用于内存泄露的跟踪,UB申请后放入一个双向链表中,记录申请的文件名和代码行;释放UB时从链表中取出。调测接口收集内存池中占用的UB,按照文件名和代码行统计占用的次数,按照次数由高到低显示,以提供内存泄露的排查线索。UB头之后是应用的内存空间。
下面将通过一个具体例子对本发明实施例UB申请的过程进行说明:
1.将接口的输入参数,即应用所申请UB的大小,转换为一系列预设固定长度中的一个;
2.检查UB大小,如果超过一系列固定长度的最大值,则调用***接口申请预设内存片,返回;
3.如果UB大小在一系列固定长度的范围内,则通过查找静态的数组表,找到相应大小的队列索引;
4.从异线程释放队列迭代式的选择一个异线程的归还队列,从中回收相应大小的UB,放入空闲队列;
5.如果相应大小的空闲队列非空,则弹出一个UB,并检查是否满足复用UB的条件;
6.如果没有空闲UB可被复用,且大片内存没有足够的空间分配UB,首先尝试遍历异线程释放队列中的所有的异线程的归还队列,从相应大小的归还队列回收UB,走检查复用UB的过程。如果仍然没有可复用的空闲UB,则创建新的大片内存;
7.从大片内存中分配第一步计算出的大小的UB,设置UB头,大片内存头的memUBNum加一,将UB指针偏移UB头之后返回给应用。
本发明实施例中,基于所述归还队列和所述空闲队列对所述线程释放内存块进行管理,包括:当有内存块释放时,判断该被释放的内存块是否是同线程释放;如果是同线程释放,则直接检查该被释放的内存块是否符合预设的复用条件;如果是异线程释放,则将所述内存块存放在所述内存块所属的线程的归还队列,并在申请复用该内存块时,检查所述内存块是否符合预设的复用条件。
本发明实施例所述预设的复用条件包括:当释放的内存块是长生命周期内存块时,将该释放的内存块所归属预设内存片的长生命周期内存数量减一,当长生命周期的内存块数量大于0时,该内存块所归属的预设内存片内的所有内存块均可被复用,当长生命周期内存块的数量为0时,则待该预设内存片上的所有内存块都释放后,将该预设内存片归还给***。
本发明实施例中,基于所述归还队列和所述空闲队列,对所述线程释放内存块进行管理,还包括:
判断该释放的内存块是否是同线程释放之前,判断释放的内存块大小是否超过预设的最大内存块阈值,如果是,则直接将释放的内存块归还给***,以有效避免无效占用预设内存片,从而提高内存的使用效率。
下面将通过一个具体的例子详细说明本发明实施例UB释放过程:
1.将应用(即上述的线程)释放的UB指针,经过偏移UB头之后,获取UB头的指针;
2.检查UB头记录的UB大小信息,如果大于一系列固定长度的最大值,直接调用***的释放接口,将UB归还给***后返回;
3.如果是本线程释放,调用检查是否满足UB复用的条件;如果可以复用该UB,则放入相应大小的空闲队列的队首后返回;
4.如果是异线程释放,待归还该UB到本线程内存池的归还队列后,再进一步调用检查是否满足UB复用的条件。
本发明实施例使得复杂的聚合对象的内存的申请和释放高效、无锁、高并发,使得复杂对象通信,既能获得减少拷贝的收益,而异线程释放UB的高性能又使得开销不大,从而大大提升用户体验。
第二实施例
本发明实施例提供了一种管理内存池的装置,参见图5,所述装置包括相互耦合的设置单元和处理单元:
设置单元,用于预设各线程对应的内存池以及各线程对应的归还队列和空闲队列,所述内存池中包含若干内存块,针对任一线程,所述归还队列用于存放该线程提供给其他线程使用后释放的内存块的索引,所述空闲队列用于存放该线程的空闲的内存块的索引;
处理单元,用于基于所述归还队列和所述空闲队列,对各线程申请内存块和释放内存块进行管理。
如图2所示,本发明实施例的空闲队列里包括第一线程(即,thread 1,对应第一内存池对象pool 1)内的所有空闲内存块,归还队列内包括第二线程(即,thread 2,对应第一内存池对象pool 2)以及第三线程(即,thread 3,对应第一内存池对象pool 3)内的所有异线程释放的内存块,并且根据图2可知,空闲队列和归还队列中的内存块都是按照大小不同的一系列预设固定长度来进行保存的,例如,包括128字节长度的一列内存块,256字节长度的一列内存块,等等。
具体实施时,本发明实施例中所述内存池上均设有内存标识ID,所述内存标识用于标识所述内存池内的内存块所对应的内存池。也就是说,本发明实施例通过该内存标识建立线程所对应的内存池里的内存块,与该线程的归还队列和空闲队列的关联关系,即,本发明实施例是通过该内存标识将内存块和线程进行关联,并通过空闲队列和归还队列来对内存块进行管理。
需要说明的是,本发明实施例中所述的内存池为从终端的***中分配给线程的内存,也就是说,本发明实施例也会给线程分配与其相对应的内存,但是本发明的内存可以实现以异线程的共享,而并不会像现有技术将线程与内存进行完全锁定。本发明实施例所述的***为服务器等终端上的操作***。
具体实施时,本发明实施例是为每个线程分配一个或多个预设内存片(也可以称为大片内存LargeMem),而该预设内存片中则进一步包括一系列各种不同大小的多个内存块,以供线程的不同申请情况进行使用。对于具体内存块的划分,本领域技术人员可以根据实际的线程情况预先进行划分。
需要说明的是,为了避免占用过多内存资源,在具体实施时,本发明实施例是为每个线程分配一个预设内存片,该预设内存片为预定大小的内存,例如1M的内存,或者是4M的内存等等。
可以理解为,本发明实施例的内存池包括一个或多个预设内存片,线程所申请的内存块和释放的内存块均在该预设内存片内进行,并通过内存池对象来对申请和释放内存块,以及空闲队列和归还队列进行统一管理。
总体来说,本发明实施例的核心思想就是通过设置线程对应的归还队列和空闲队列,通过归还队列和空闲队列来管理本线程的内存块和异线程释放的内存块,最终实现不同线程之间的内存块的共享,从而提高多线程并发处理性能。
进一步地,本发明实施例中所述处理单元还用于,当任一线程申请内存块时,将该线程所对应的归还队列内的内存块迭代回收到该线程所对应的空闲队列,并从所述空闲队列中为该线程分配内存块。
需要说明的是,本发明实施例的归还队列内异线程释放的内存块的索引,为按照不同异线程以及不同异线程下内存块的不同的预设固定长度系列进行存放。
具体实施时,本发明实施例的处理单元是所述处理单元还用于,设申请内存块的任一线程为内存申请线程,将所述内存申请线程所对应的归还队列内第一异线程释放的各个不同的预设固定长度类别的内存块迭代地从第一个内存块至倒数第二个内存块回收到所述内存申请线程所对应的空闲队列;当在迭代地回收所述第一异线程释放的内存块后,在所述内存申请线程所对应的空闲队列中不包含所述内存申请线程所申请的内存块时,则从所述内存池里的预设内存片中申请内存块,如果在所述预设内存片内没有找到所申请的内存块时,则迭代地回收所述归还队列内第二异线程释放的各个不同的预设固定长度类别的内存块到所述空闲队列,并判断所述内存申请线程所对应的空闲队列中是否有所申请的内存块,如果没有,则继续迭代地回收其他异线程释放的内存块,如果遍历所有归还队列均没有找到所申请的内存块,则从***中申请新的预设内存片,并从该预设内存片中给所述线程分配内存块;其中,所述预设内存片中包含设定数量的内存块。。
也就是说,本发明实施例对异线程释放的UB采用的是两阶段回收复用UB的方法,即,第一阶段,异线程释放UB时,先将UB放入本线程的归还队列。第二阶段,在申请UB时,触发从归还队列中迭代地串接UB回空闲队列,从而完成回收复用UB的过程,整个回收和分配UB过程中不用锁,使得串接UB的算法复杂度为O(1)。
为了便于理解,下面将结合图2对本发明实施例中异线程释放UB的过程进行详细说明:在第一线程申请内存块时,则触发异线程的归还队列内的内存块回收到空闲队列(free Que),在回收过程中,首先回收第一异线程释放的每一系列的预设固定长度的内存块,具体是将每一系列的预设固定长度的内存块的第一个内存块至倒数第二个内存块到空闲队列中相应的长度的内存块队列中,如果回收后,空闲队列还没有找到所要申请的内存块,则从预设内存片中申请内存块,如果在所述预设内存片内没有找到所申请的内存块时(有可能是预设内存片没有足够空间分配),就触发回收第二异线程程释放的每一系列的预设固定长度的内存块,具体也是将每一系列的预设固定长度的内存块的第一个内存块至倒数第二个内存块回收到空闲队列,依次类推,按照线程逐个的迭代回收异线程释放的内存块到归还队列,如果遍历所有归还队列均没有找到所申请的内存块,则从***中申请新的预设内存片,并从该预设内存片中给所述线程分配内存块。
进一步地,本发明实施例所述装置还包括:第一判断单元,用于判断所述内存申请线程所申请的内存块的大小是否超过预设的最大内存块阈值,如果是,则从所述预设内存片中申请内存块,所申请的内存块的大小等于所述内存申请线程所申请内存块的大小,如果否则触发所述处理单元。
即,在接收到线程申请的内存块时,首先要判断所申请的内存块的大小是否超过预设的最大内存块阈值(即,为上述的一系列的预设固定长度的内存块中的最大值),如果是,则直接从***中申请内存块。
可以理解为,当所要申请的内存块超过了预设的内存块的一系列的预设固定长度的最大值,就直接在预设内存片中申请相应的内存块。
需要说明的是,当预设内存片不够分配时,则从***新申请一个预设内存片,该预设内存片可以是一个统一规定好大小的内存,也可以是所申请的内存块的大小。
也就是说,当预设内存片不够分配时,可从***重新申请一个预设内存片,并从该预设内存片中进行内存块分配。该新申请的预设内存片可以是上述所申请的超过预设的最大内存块阈值的内存块的大小,当该内存块释放后,直接将预设内存片归还给***,当然也可以是按照预设申请一个预定大小的预设内存片,再从该预设内存片中进行内存块分配,而该预设内存片的其他部分也可以分配给线程的其他申请进行使用。
即,在具体实施时,本发明实施例可以预设所有预设内存片的大小都是统一的,或者也可以根据实际情况来具体设置所申的预设内存片的大小。本领域技术人员可以根据实际需要进行设置,本发明对此不作具体限定。
本发明实施例中所述处理单元还用于,根据该线程所申请内存块的大小,从该线程对应的空闲队列选择与所申请的内存块大小最接近的内存块分配给该线程。
也就是说,由于本发明实施例中内存块均为一系列预设固定长度的内存块,所以本发明实施例中,根据所述线程所申请内存块UB的大小,从所述空闲队列选择一个内存块分配给所述线程,具体是根据所述线程所申请内存块UB的大小,从所述线程对应的空闲队列选择距所申请的内存块的大小最近的内存块分配给所述线程。
进一步地,本发明实施例所述装置还包括:第二判断单元,用于判断所述线程所申请的内存块是否是长生命周期内存块,如果是,则进一步根据该被申请的内存块所属的预设内存片的生命周期标识判断该预设内存片是否是长生命周期内存;如果所述预设内存片是长生命周期内存,则将所述预设内存片的长生命周期内存数量增加一;否则修改所述预设内存片的生命周期标识,并将所述预设内存片的长生命周期内存数量增加一;其中,所述长生命周期内存块为实体建模的内存块,所述预设内存片为从所述内存池中获取的预设大小的内存,所述预设内存片中包含设定数量的内存块。
具体来说,为了避免微服务架构中某些微服务因冲突占用太多内存,而不归还***给整个***操作内存压力的问题,本发明实施例中,为预设内存片设置了生命周期标识,通过该标识来识别预设内存片的生命周期长短,将长生命周期的预设内存片继续进行复用,而对短生命周期的预设内存片则待所有内存块都释放完毕后,将该预设内存片归还***,从而有效保证整个***的高效率运作。
进一步地,本发明实施例所述装置还包括:第三判断单元,用于当有内存块释放时,判断该被释放的内存块是否是同线程释放;如果是同线程释放,则直接检查该被释放的内存块是否符合预设的复用条件;如果是异线程释放,则将所述内存块存放在所述内存块所属的线程的归还队列,并在申请复用该内存块时,检查所述内存块是否符合预设的复用条件。
其中,本发明实施例的预设的复用条件为:当释放的内存块是长生命周期内存块时,将该释放的内存块所归属预设内存片的长生命周期内存数量减一,当长生命周期的内存块数量大于0时,该内存块所归属的预设内存片内的所有内存块均可被复用,当长生命周期内存块的数量为0时,则待该预设内存片上的所有内存块都释放后,将该预设内存片归还给***。
即,本发明实施例所述方法支持长、短生命周期的UB,使得实体建模和事件通信可以使用同一套内存池机制,方便内存的统一管理。当大片内存(即上述的预设内存片)都消耗完,则开辟新的大片内存。如果老的大片内存有长生命周期的UB,则其上的所有UB都能复用,避免因UB碎片化而导致无效的占用过多的内存;反之,则不能复用,待UB释放完后,老的大片内存即归还给***,从而避免因业务突发占用过多内存而不归还给***。
具体实施时,本发明实施例所述装置还包括:第四判断单元,用于判断该释放的内存块是否是同线程释放之前,判断释放的内存块大小是否超过预设的最大内存块阈值,如果是,则直接将释放的内存块归还给***,如果否则触发所述第三判断单元,以有效避免无效占用预设内存片,从而提高内存的使用效率。
本发明实施例的相关内容可参照本发明第一实施例部分进行理解,在此不做详细论述。
第三实施例
本发明实施例提供了一种计算机可读存储介质,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如本发明第一实施例任一种所述的管理内存池的方法的步骤。具体内容可参照本发明第一实施例部分进行理解,在此不做详细论述。
第四实施例
本发明实施例提供了一种服务器,所述服务器包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如本发明第一实施例任一种所述的管理内存池的方法的步骤。具体内容可参照本发明第一实施例部分进行理解,在此不做详细论述。
尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。
Claims (15)
1.一种管理内存池的方法,其特征在于,所述方法包括:
预设各线程对应的内存池以及各线程对应的归还队列和空闲队列,所述内存池中包含若干内存块;
针对任一线程,所述归还队列用于存放该线程提供给其他线程使用后释放的内存块的索引,所述空闲队列用于存放该线程的空闲的内存块的索引;
基于所述归还队列和所述空闲队列,对各线程的内存池进行管理。
2.如权利要求1所述的方法,其特征在于,
所述内存池上均设有内存标识,所述内存标识用于标识所述内存池内的内存块所对应的内存池。
3.如权利要求1所述的方法,其特征在于,所述基于所述归还队列和所述空闲队列,对各线程的内存池进行管理,包括:
当任一线程申请内存块时,将该线程所对应的归还队列内的内存块迭代地回收到该线程所对应的空闲队列,并从所述空闲队列中为该线程分配内存块。
4.如权利要求3所述的方法,其特征在于,
所述归还队列的内存块的索引为按照不同异线程下内存块的不同的预设固定长度分类进行存放;所述异线程包括不同于本线程的其他线程。
5.如权利要求4所述的方法,其特征在于,当任一线程申请内存块时,将该线程所对应的归还队列内的内存块迭代地回收到该线程所对应的空闲队列,并从所述空闲队列中为该线程分配内存块,包括:
设申请内存块的任一线程为内存申请线程,将所述内存申请线程所对应的归还队列内第一异线程释放的各个不同的预设固定长度类别的内存块迭代地从第一个内存块至倒数第二个内存块回收到所述内存申请线程所对应的空闲队列;
当在迭代地回收所述第一异线程释放的内存块后,在所述内存申请线程所对应的空闲队列中不包含所述内存申请线程所申请的内存块时,则从所述内存池里的预设内存片中申请内存块,如果在所述预设内存片内没有找到所申请的内存块时,则迭代地回收所述归还队列内第二异线程释放的各个不同的预设固定长度类别的内存块到所述空闲队列,并判断所述内存申请线程所对应的空闲队列中是否有所申请的内存块,如果没有,则继续迭代地回收其他异线程释放的内存块,如果遍历所有归还队列均没有找到所申请的内存块,则从***中申请新的预设内存片,并从该预设内存片中给所述线程分配内存块;
其中,所述预设内存片中包含设定数量的内存块。
6.如权利要求3所述的方法,其特征在于,所述基于所述归还队列和所述空闲队列,对各线程的内存池进行管理,还包括:
将所述线程所对应的归还队列内的内存块迭代地回收到所述线程所对应的空闲队列之前,判断所述内存申请线程所申请的内存块的大小是否超过预设的最大内存块阈值,如果是,则从所述预设内存片中申请内存块,所申请的内存块的大小等于所述内存申请线程所申请内存块的大小。
7.如权利要求3所述的方法,其特征在于,
所述空闲队列内的内存块的索引为按照内存块的不同的预设固定长度分类进行存放。
8.如权利要求7所述的方法,其特征在于,所述从所述空闲队列中为该线程分配内存块,包括:
根据该线程所申请内存块的大小,从该线程对应的空闲队列选择与所申请的内存块大小最接近的内存块分配给该线程。
9.如权利要求3所述的方法,其特征在于,所述基于所述归还队列和所述空闲队列,对各线程的内存池进行管理,还包括:
所述将该线程所对应的归还队列内的内存块迭代地回收到该线程所对应的空闲队列之前,判断所述线程所申请的内存块是否是长生命周期内存块,如果是,则进一步根据该被申请的内存块所属的预设内存片的生命周期标识判断该预设内存片是否是长生命周期内存;
如果所述预设内存片是长生命周期内存,则将所述预设内存片的长生命周期内存数量增加一;
否则修改所述预设内存片的生命周期标识,并将所述预设内存片的长生命周期内存数量增加一;
其中,所述长生命周期内存块为实体建模的内存块,所述预设内存片中包含设定数量的内存块。
10.如权利要求1-9中任一项所述的方法,其特征在于,基于所述归还队列和所述空闲队列,对各线程的内存池进行管理,包括:
当有内存块释放时,判断该被释放的内存块是否是同线程释放;
如果是同线程释放,则直接检查该被释放的内存块是否符合预设的复用条件;
如果是异线程释放,则将所述内存块存放在所述内存块所属的线程的归还队列,并在申请复用该内存块时,检查所述内存块是否符合预设的复用条件。
11.如权利要求10所述的方法,其特征在于,所述预设的复用条件包括:
当释放的内存块是长生命周期内存块时,将该释放的内存块所归属预设内存片的长生命周期内存数量减一,当长生命周期的内存块数量大于0时,该内存块所归属的预设内存片内的所有内存块均可被复用,当长生命周期内存块的数量为0时,则待该预设内存片上的所有内存块都释放后,将该预设内存片归还给***。
12.如权利要求10所述的方法,其特征在于,基于所述归还队列和所述空闲队列,对各线程的内存池进行管理,还包括:
判断该释放的内存块是否是同线程释放之前,判断释放的内存块大小是否超过预设的最大内存块阈值,如果是,则直接将释放的内存块归还给***。
13.一种管理内存池的装置,其特征在于,所述装置包括:
设置单元,用于预设各线程对应的内存池以及各线程对应的归还队列和空闲队列,所述内存池中包含若干内存块;针对任一线程,所述归还队列用于存放该线程提供给其他线程使用后释放的内存块的索引,所述空闲队列用于存放该线程的空闲的内存块的索引;
处理单元,用于基于所述归还队列和所述空闲队列,对各线程的内存池进行管理。
14.一种计算机可读存储介质,其特征在于,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至12中任一项所述的方法的步骤。
15.一种终端,其特征在于,所述终端包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至12中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910733930.0A CN112346848A (zh) | 2019-08-09 | 2019-08-09 | 一种管理内存池的方法、装置及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910733930.0A CN112346848A (zh) | 2019-08-09 | 2019-08-09 | 一种管理内存池的方法、装置及终端 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112346848A true CN112346848A (zh) | 2021-02-09 |
Family
ID=74367528
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910733930.0A Pending CN112346848A (zh) | 2019-08-09 | 2019-08-09 | 一种管理内存池的方法、装置及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112346848A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113176896A (zh) * | 2021-03-19 | 2021-07-27 | 中盈优创资讯科技有限公司 | 一种基于单进单出无锁队列的随机取出对象的方法 |
CN117251292A (zh) * | 2023-11-13 | 2023-12-19 | 山东泽赢信息科技服务有限公司 | 内存管理方法、***、终端及存储介质 |
-
2019
- 2019-08-09 CN CN201910733930.0A patent/CN112346848A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113176896A (zh) * | 2021-03-19 | 2021-07-27 | 中盈优创资讯科技有限公司 | 一种基于单进单出无锁队列的随机取出对象的方法 |
CN117251292A (zh) * | 2023-11-13 | 2023-12-19 | 山东泽赢信息科技服务有限公司 | 内存管理方法、***、终端及存储介质 |
CN117251292B (zh) * | 2023-11-13 | 2024-03-29 | 山东泽赢信息科技服务有限公司 | 内存管理方法、***、终端及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8583756B2 (en) | Dynamic configuration and self-tuning of inter-nodal communication resources in a database management system | |
CN106294190B (zh) | 一种存储空间管理方法及装置 | |
CN109690498B (zh) | 内存管理方法和设备 | |
CN112214313A (zh) | 内存分配方法及相关设备 | |
CN112749135B (zh) | 文件***的存储空间的平衡的方法、设备和计算机程序产品 | |
CN114168490A (zh) | 确定内存回收阈值的方法及相关设备 | |
CN101354720B (zh) | 一种分布式内存数据库数据***及其共享方法 | |
CN112346848A (zh) | 一种管理内存池的方法、装置及终端 | |
CN112905342A (zh) | 资源调度方法、装置、设备及计算机可读存储介质 | |
CN114327917A (zh) | 内存管理方法、计算设备及可读存储介质 | |
CN111291018B (zh) | 数据管理方法、装置、设备及存储介质 | |
CN110162395B (zh) | 一种内存分配的方法及装置 | |
CN110795234A (zh) | 一种资源调度方法及装置 | |
CN105469173A (zh) | 一种静态内存进行优化管理的方法 | |
CN110543357B (zh) | 管理应用程序对象的方法,相关装置及*** | |
US20060236065A1 (en) | Method and system for variable dynamic memory management | |
US9619151B2 (en) | Region management apparatus, region management method, and program | |
CN115658561A (zh) | 配电终端内存管理方法、装置、电子设备及存储介质 | |
CN115237607A (zh) | 内存配置方法、装置、电子设备及存储介质 | |
CN114296959A (zh) | 消息入队方法和装置 | |
CN114115744A (zh) | 数据回收任务的控制方法、装置、电子设备及存储介质 | |
CN114077493A (zh) | 一种资源分配方法及相关设备 | |
CN117519988B (zh) | 一种基于raid的内存池动态调配方法、装置 | |
CN117687803B (zh) | 租户资源分配方法、装置、设备及存储介质 | |
CN112817766B (zh) | 一种内存管理方法、电子设备及介质 |
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 |