CN117251292B - 内存管理方法、系统、终端及存储介质 - Google Patents
内存管理方法、系统、终端及存储介质 Download PDFInfo
- Publication number
- CN117251292B CN117251292B CN202311500546.9A CN202311500546A CN117251292B CN 117251292 B CN117251292 B CN 117251292B CN 202311500546 A CN202311500546 A CN 202311500546A CN 117251292 B CN117251292 B CN 117251292B
- Authority
- CN
- China
- Prior art keywords
- memory
- thread
- memory block
- multiplexing
- array
- 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 407
- 238000007726 management method Methods 0.000 title claims abstract description 83
- 238000011084 recovery Methods 0.000 claims abstract description 40
- 238000000034 method Methods 0.000 claims description 39
- 230000008569 process Effects 0.000 claims description 18
- 238000004064 recycling Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 7
- 238000004458 analytical method Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007334 memory performance Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012795 verification Methods 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
-
- 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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及服务器技术领域,具体提供一种内存管理方法、系统、终端及存储介质,包括:第一线程将已分配的内存中的,已完成使用的内存块设置为复用内存块;第二线程使用所述复用内存块,在所述第二线程对所述复用内存块使用完成后,第一线程回收所述复用内存块;创建管理队列,并指定所述管理队列的最大长度,通过所述管理队列对数据回收进行管理。本发明降低了内存回收和再分配的频率,降低了计算资源的压力。
Description
技术领域
本发明属于服务器技术领域,具体涉及一种内存管理方法、系统、终端及存储介质。
背景技术
内存是计算机的重要部件,它用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。如何高效率的使用内存就成为计算机程序的一个重要性能指标。
在程序中,一个报表的查询往往需要创建大量的内存空间存储数据,举一个例子:通过数据系统查询目标信息时,数据系统中全部数据大约有十万条,每一条数据都代表了一条信息,每一条数据都需要在内存中开辟一块内存存储信息数据,用于后续的操作。但是大部分场景下都是通过分页的方式一页页的查询信息,很少有情况一次性把信息全部查询出来。
在查询过程中就会导致大量数据占用内存,而系统在内存不足时就会对内存数据进行回收。后续线程再次需要内存时就需要再次为线程分配内存并将数据从磁盘读取出来保存至内存。频繁的内存回收和分配加重了计算资源的负担。
发明内容
针对现有技术的上述不足,本发明提供一种内存管理方法、系统、终端及存储介质,以解决上述技术问题。
第一方面,本发明提供一种内存管理方法,包括:
第一线程将已分配的内存中的,已完成使用的内存块设置为复用内存块;
第二线程使用所述复用内存块,在所述第二线程对所述复用内存块使用完成后,第一线程回收所述复用内存块;
创建管理队列,并指定所述管理队列的最大长度,通过所述管理队列对数据回收进行管理。
在一个可选的实施方式中,第一线程将自身内存中已完成使用的内存块设置为复用内存块,包括:
第一线程在创建的时候会在线程对象内部创建一个数组和一个链表;数组存放回收的由自己创建的内存块,链表存放由其他线程回收的由第一线程创建的复用内存块的数组指针。
在一个可选的实施方式中,所述方法还包括:
接收到线程发送的数据回收请求,判断管理队列中的内存块长度是否达到最大队列长度,所述内存块为存储数据块的内存区域;
若管理队列中的内存块长度达到最大队列长度,则将数据回收请求涉及的数据块交由系统进行垃圾内存释放回收;
若管理队列中的内存块长度未达到最大队列长度,则将数据回收请求涉及的数据块插入管理队列的空闲内存块中。
在一个可选的实施方式中,第二线程使用所述复用内存块,在所述第二线程对所述复用内存块使用完成后,第一线程回收所述复用内存块,包括:
第二线程在使用完所述复用内存块后,将所述复用内存块的内存指针放入第二线程的关联内存中,所述关联内存与所述第一线程的链表具有关联关系;
第一线程需要新的内存块时,首先判断自身数组是否有缓存的内存块指针,如果有则优先使用自身数组内部的内存块指针;如果自身数组没有内存块指针,则通过链表节点查找具有关联关系的其他线程回收的数组内部的内存块指针。
第二方面,本发明提供一种内存管理系统,包括:
内存复用模块,用于第一线程将已分配的内存中的,已完成使用的内存块设置为复用内存块;
内存回收模块,用于第二线程使用所述复用内存块,在所述第二线程对所述复用内存块使用完成后,第一线程回收所述复用内存块;
内存管理模块,用于创建管理队列,并指定所述管理队列的最大长度,通过所述管理队列对数据回收进行管理。
在一个可选的实施方式中,所述内存复用模块包括:
第一线程在创建的时候会在线程对象内部创建一个数组和一个链表;数组存放回收的由自己创建的内存块,链表存放由其他线程回收的由第一线程创建的复用内存块的数组指针。
在一个可选的实施方式中,所述系统还包括:
接收到线程发送的数据回收请求,判断管理队列中的内存块长度是否达到最大队列长度,所述内存块为存储数据块的内存区域;
若管理队列中的内存块长度达到最大队列长度,则将数据回收请求涉及的数据块交由系统进行垃圾内存释放回收;
若管理队列中的内存块长度未达到最大队列长度,则将数据回收请求涉及的数据块插入管理队列的空闲内存块中。
在一个可选的实施方式中,所述内存回收模块包括:
第二线程在使用完所述复用内存块后,将所述复用内存块的内存指针放入第二线程的关联内存中,所述关联内存与所述第一线程的链表具有关联关系;
第一线程需要新的内存块时,首先判断自身数组是否有缓存的内存块指针,如果有则优先使用自身数组内部的内存块指针;如果自身数组没有内存块指针,则通过链表节点查找具有关联关系的其他线程回收的数组内部的内存块指针。
第三方面,提供一种终端,包括:
处理器、存储器,其中,
该存储器用于存储计算机程序,
该处理器用于从存储器中调用并运行该计算机程序,使得终端执行上述的终端的方法。
第四方面,提供了一种计算机存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
本发明的有益效果在于,本发明提供的内存管理方法、系统、终端及存储介质,减少了内存分配的开销,计算机分配内存需要消耗性能,该方案可以让分配的内存得到复用,大大降低了计算机分配内存的次数,可以提高程序的性能与响应速度;计算机大量创建内存块,在使用完毕后会出现大量的内存垃圾,系统需要消耗性能去回收这些垃圾,大量的过期内存块会让系统花费更多的时间以及性能去收集垃圾释放内存,利用该设计方案可以大大降低垃圾的生成,减少系统垃圾内存会后次数,大大提升程序性能。
本发明提供的内存管理方法、系统、终端及存储介质,通过为查询任务构建管理队列,以队列的方式对查询任务涉及的内存区域进行复用和回收管理,并在队列内存已满的时候将需要回收的内存数据直接交由系统作为垃圾回收。如此进一步降低了内存回收与再分配的频率。此外计算机大量创建内存块,在使用完毕后会出现大量的内存垃圾,系统需要消耗性能去回收这些垃圾,大量的过期内存块会让系统花费更多的时间以及性能去收集垃圾释放内存,利用该设计方案可以大大降低垃圾的生成,减少系统垃圾内存会后次数,大大提升程序性能。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例的方法的示意性流程图。
图2是本发明一个实施例的方法的管理队列的示意图。
图3是本发明一个实施例的方法的线程处理的示意性流程图。
图4是本发明一个实施例的方法的管理队列的示意性流程图。
图5是本发明一个实施例的系统的示意性框图。
图6为本发明实施例提供的一种终端的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
下面对本发明中出现的关键术语进行解释。
内存回收指的是对用户空间中的堆段和文件映射段进行回收(用户使用 malloc、mmap 等分配出去的空间)。用户可以手动地使用free()等进行内存释放。当没有空闲的物理内存时,内核就会开始自动地进行回收内存工作。回收的方式主要是两种:后台内存回收和直接内存回收。
后台内存回收(kswapd):在物理内存紧张的时候,会唤醒 kswapd 内核线程来回收内存,这个回收内存的过程异步的,不会阻塞进程的执行。
直接内存回收(direct reclaim):如果后台异步回收跟不上进程内存申请的速度,就会开始直接回收,这个回收内存的过程是同步的,会阻塞进程的执行。
如果直接内存回收后,空闲的物理内存仍然无法满足此次物理内存的申请,那么内核就会触发 OOM (Out of Memory)机制,根据算法选择一个占用物理内存较高的进程,然后将其杀死,释放内存资源,直到释放足够的内存。
可被回收的内存类型
主要有两类内存可以被回收,而且它们的回收方式也不同。
文件页(File-backed Page):内核缓存的磁盘数据(Buffer)和内核缓存的文件数据(Cache)都叫作文件页。大部分文件页,都可以直接释放内存,以后有需要时,再从磁盘重新读取就可以了。而那些被应用程序修改过,并且暂时还没写入磁盘的数据(也就是脏页),就得先写入磁盘,然后才能进行内存释放。所以,回收干净页的方式是直接释放内存,回收脏页的方式是先写回磁盘后再释放内存。
匿名页(Anonymous Page):这部分内存没有实际载体,不像文件缓存有硬盘文件这样一个载体,比如堆、栈数据等。这部分内存很可能还要再次被访问,所以不能直接释放内存,它们回收的方式是通过操作系统的 Swap 机制,把不常访问的内存先写到磁盘中,然后释放这些内存,给其他更需要的进程使用。再次访问这些内存时,重新从磁盘读入内存就可以了。
文件页和匿名页的回收都是基于 LRU (最近最少使用)算法的。回收内存的操作基本都会发生磁盘 I/O,如果回收内存的操作很频繁,意味着磁盘 I/O 次数会很多,会影响系统的性能。
本发明实施例提供的内存管理方法由计算机设备执行,相应地,内存管理系统运行于计算机设备中。
图1是本发明一个实施例的方法的示意性流程图。其中,图1执行主体可以为一种内存管理系统。根据不同的需求,该流程图中步骤的顺序可以改变,某些可以省略。
如图1所示,该方法包括:
步骤110,第一线程将已分配的内存中的,已完成使用的内存块设置为复用内存块;
步骤120,第二线程使用所述复用内存块,在所述第二线程对所述复用内存块使用完成后,第一线程回收所述复用内存块;
步骤130,创建管理队列,并指定所述管理队列的最大长度,通过所述管理队列对数据回收进行管理。
为了便于对本发明的理解,下面以本发明内存管理方法的原理,结合实施例中对内存进行管理的过程,对本发明提供的内存管理方法做进一步的描述。
具体的,所述内存管理方法包括:
S1、为查询任务创建管理队列。
,例如,通过学生系统查询学生信息,全部数据大约有十万条,每一条数据都代表了一个学生的信息,每一条数据都需要在内存中开辟一块内存存储该学生的信息数据,用于后续的操作,全部数据就需要十万个这样的内存块存储学生数据,但是大部分场景下都是通过分页的方式一页页的查询学生信息,很少有情况一次性把10万个学生信息全部查询出来。在这种场景下,主线程逐页查询学生信息,其它线程对主线程查询出的学生信息进行分析。
根据实际应用场景以及计算机内存大小的实际情况设计一个复用内存大小,举个例子,每个学生信息需要1mb大小的内存块用于存储信息,最大能承受1GB大小的缓存用于存储学生信息。
如图2所示,设计一个队列用于存储学生信息内存块,根据步骤一的设计,队列中最多可以存储1024个内存块,也就是队列的最大长度是1024。
S2、内存复用。
请参考图3,在线程所属的内存空间内开辟一块内存用于存储可以复用的内存块,把开辟的这块内存叫做“复用内存空间”。当内存是在该线程内申请操作系统开立的,内存使用完毕回收时判断线程内部“复用内存空间”是否还有空间可以存放被回收使用的内存,如果空间足够直接存储进去,如果不足够则将该块内存交给操作系统进行回收。
例如,在气象分析系统内有一个线程(线程A)每个小时负责采集一个城市的20个检测站的气象数据,线程A采集完数据后在进行校验无误之后会交给线程B(负责湿度分析)、线程C(负责空气质量分析)、线程D(负责风速分析)进行相应的数据分析,然后由线程B、C、D上传到气象展示系统中。
首先气象数据由线程A进行采集,那么初始的内存块由线程A创建,然后在经过线程A校验,校验通过的气象数据内存块分发给线程B,C,D;校验没有通过的气象数据内存块则线程A可以将其回收处理,但是系统申请内存耗费的性能比较高,为了提高系统性能,线程A在处理内存回收的时候不需要将其交给操作系统进行内存释放,而是将其放到线程A自身关联的内存中,方便下次需要内存块存储新的气象数据时直接从关联内存中拿出使用,无需在通过操作系统重新申请内存。
线程A在创建的时候会在线程对象内部创建一个数组Array,一个链表Link;数组存放回收的由自己创建的内存块,链表存放由其他线程回收的由线程A创建的内存块的数组指针。
S3、复用内存块的管理。
从管理队列中查询与线程的查询对象匹配的目标数据块;若管理队列中存在所述目标数据块,则将目标数据块所属的目标复用内存块地址和目标复用内存块所属的原线程地址保存至所述线程,以建立所述线程与目标复用内存块的绑定关系;若管理队列中不存在所述目标数据块,则为所述线程分配新的内存块,以存储所述查询对象对应的数据块。
例如,如图4所示,当需要分页查询学生数据的时候比如每页支持查询20个学生数据,首先判断队列中有没有可以复用的内存块,如果有则取出用于反序列化成学生信息,这样就可以复用内存,如果没有则创建一块新的内存用于反序列化学生信息暂存与内存中。
S4、内存回收。
接收到线程发送的数据回收请求,判断管理队列中的内存块长度是否达到最大队列长度,所述内存块为存储数据块的内存区域;若管理队列中的内存块长度达到最大队列长度,则将数据回收请求涉及的数据块交由系统进行垃圾内存释放回收;若管理队列中的内存块长度未达到最大队列长度,则将数据回收请求涉及的数据块插入管理队列的空闲内存块中。
具体的,当内存不是在该线程内部创建的,线程使用完毕该内存进行回收时需要判断线程“复用内存空间”是否足够,当足够时除了存储内存引用地址外,还需要与创建他的线程地址做关联,方便创建线程的回收使用。即内存空间是在哪个线程内申请开辟的,哪个线程才可以负责回收。
线程内部操作内存申请步骤如下
(1)首先判断线程内部的“复用内存空间”是否有直接可以使用的回收内存,如果有的话直接通过存储的内存引用地址将该块内存取出来使用;
例如,由线程A创建的内存并由线程A进行回收的情况,考虑数组的长度,最大数组长度为一个线程可以缓存内存的最大大小,这个根据系统内存大小以及业务场景情况自行判断,比如我们设置数组长度为1024,即最多能存储1024个复用内存块,超过了线程A就无需在进行缓存,直接交给操作系统进行释放即可。
当线程刚刚创建的时候,数组内部是空的,当随着业务的进行不断会有内存块回收,那么这个时候就会填充数组,当填充满的时候,系统内部就会有1024mb的内存指针进入了线程内部的数组缓存中,这个是一个递增的过程。当然为了防止线程臃肿,数组内部只会存储内存块的引用地址,即填充满的时候数组的大小为1024*8字节+数组结构本身占用内存大小。
(2)如果没有的话则查找“复用内存空间”中的“其他线程回收内存引用”是否存储了被其他线程回收的由该线程申请的内存块,如果有的话首先将该块内存引用地址移动到线程1私有内存块内部,然后取出使用,如果回收引用地址上也没有则通过操作系统直接申请内存。
(一)例如,由线程A创建的内存并由其他线程进行回收的情况:
(1)首先线程B(负责湿度分析),线程C(负责空气质量分析),线程D(负责风速分析)在进行数据处理完毕之后需要对对应的气象内存进行回收,以线程B(负责湿度分析)为例进行分析,在线程B用完气象内存块的时候首先判断该气象对象内存块是否由B线程创建(注:对象块内部保存了线程A的链接指针),如果不是则将气象对象块的内存指针放入线程b的关联内存中,注意线程b的关联内存与线程A的关联内存是有区别的,这里用Array_A 表示,也就是说这块关联内存是需要与其他线程的链表关联的,方便生产线程回收。
(2)线程A需要新的内存块的时候,首先判断自身数组:数组Array是否有缓存的内存块指针,如果有则优先使用自身Array数组内部的,如果没有的话,需要通过链表节点连接的其他线程回收的其他数组Array_xxx内部的内存块指针,一次性回收一个数组的Array_xxx,还是按照上面的线程B举例,当线程A发现自已的Array数组内部没有可用的内存块指针之后则通过链表上的节点查询其他线程的回收内存块数组Array_xxx,如果线程B内部的Array_A存在可用的空闲内存块,则回收Array_A的空闲内存块到线程A的Array数组中,如果线程B的Array_A内部没有则顺着链表节点查询线程C内部的Array_A,以此类推。
(3)如果线程A找了一圈没有找到,那么线程A需要通过操作系统申请新的内存块
如果线程B,线程C线程的生命周期结束了,线程A需要主动回收线程B,线程C内部的可用内存块指针。
上述方法减少了内存分配的开销,计算机分配内存需要消耗性能,该方案可以让分配的内存得到复用,大大降低了计算机分配内存的次数,可以提高程序的性能与响应速度。计算机大量创建内存块,在使用完毕后会出现大量的内存垃圾,系统需要消耗性能去回收这些垃圾,大量的过期内存块会让系统花费更多的时间以及性能去收集垃圾释放内存,利用该设计方案可以大大降低垃圾的生成,减少系统垃圾内存会后次数,大大提升程序性能。
例如,参考图4,当学生信息使用完毕,内存中的学生信息不再使用时,我们将其回收,首先判断队列中的存储的内存块长度是否超过1024个,如果超过则直接放弃回收,交由系统进行垃圾内存释放回收,如果队列中的内存块长度不超过1024,那么将该内存块直接存储到队列中,方便下次取出使用。
在一些实施例中,所述内存管理系统可以包括多个由计算机程序段所组成的功能模块。所述内存管理系统中的各个程序段的计算机程序可以存储于计算机设备的存储器中,并由至少一个处理器所执行,以执行(详见图1描述)内存回收的功能。
本实施例中,所述内存管理系统根据其所执行的功能,可以被划分为多个功能模块,如图5所示。系统500的功能模块可以包括:内存复用模块510、内存回收模块520、内存管理模块530。本发明所称的模块是指一种能够被至少一个处理器所执行并且能够完成固定功能的一系列计算机程序段,其存储在存储器中。在本实施例中,关于各模块的功能将在后续的实施例中详述。
内存复用模块,用于第一线程将已分配的内存中的,已完成使用的内存块设置为复用内存块;
内存回收模块,用于第二线程使用所述复用内存块,在所述第二线程对所述复用内存块使用完成后,第一线程回收所述复用内存块;
内存管理模块,用于创建管理队列,并指定所述管理队列的最大长度,通过所述管理队列对数据回收进行管理。
可选地,作为本发明一个实施例,所述内存复用模块包括:
第一线程在创建的时候会在线程对象内部创建一个数组和一个链表;数组存放回收的由自己创建的内存块,链表存放由其他线程回收的由第一线程创建的复用内存块的数组指针。
可选地,作为本发明一个实施例,所述系统还包括:
接收到线程发送的数据回收请求,判断管理队列中的内存块长度是否达到最大队列长度,所述内存块为存储数据块的内存区域;
若管理队列中的内存块长度达到最大队列长度,则将数据回收请求涉及的数据块交由系统进行垃圾内存释放回收;
若管理队列中的内存块长度未达到最大队列长度,则将数据回收请求涉及的数据块插入管理队列的空闲内存块中。
可选地,作为本发明一个实施例,所述内存回收模块包括:
第二线程在使用完所述复用内存块后,将所述复用内存块的内存指针放入第二线程的关联内存中,所述关联内存与所述第一线程的链表具有关联关系;
第一线程需要新的内存块时,首先判断自身数组是否有缓存的内存块指针,如果有则优先使用自身数组内部的内存块指针;如果自身数组没有内存块指针,则通过链表节点查找具有关联关系的其他线程回收的数组内部的内存块指针。
图6为本发明实施例提供的一种终端600的结构示意图,该终端600可以用于执行本发明实施例提供的内存管理方法。
其中,该终端600可以包括:处理器610、存储器620及通信单元630。这些组件通过一条或多条总线进行通信,本领域技术人员可以理解,图中示出的服务器的结构并不构成对本发明的限定,它既可以是总线形结构,也可以是星型结构,还可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
其中,该存储器620可以用于存储处理器610的执行指令,存储器620可以由任何类型的易失性或非易失性存储终端或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。当存储器620中的执行指令由处理器610执行时,使得终端600能够执行以下上述方法实施例中的部分或全部步骤。
处理器610为存储终端的控制中心,利用各种接口和线路连接整个电子终端的各个部分,通过运行或执行存储在存储器620内的软件程序和/或模块,以及调用存储在存储器内的数据,以执行电子终端的各种功能和/或处理数据。所述处理器可以由集成电路(Integrated Circuit,简称IC) 组成,例如可以由单颗封装的IC 所组成,也可以由连接多颗相同功能或不同功能的封装IC而组成。举例来说,处理器610可以仅包括中央处理器(Central Processing Unit,简称CPU)。在本发明实施方式中,CPU可以是单运算核心,也可以包括多运算核心。
通信单元630,用于建立通信信道,从而使所述存储终端可以与其它终端进行通信。接收其他终端发送的用户数据或者向其他终端发送用户数据。
本发明还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本发明提供的各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(英文:read-only memory,简称:ROM)或随机存储记忆体(英文:random access memory,简称:RAM)等。
因此,本发明通过在线程的自用内存空间内预留复用内存块,将复用内存块的数据共享给其他线程,以降低内存回收和再分配的频率,降低了计算资源的压力,本实施例所能达到的技术效果可以参见上文中的描述,此处不再赘述。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中如U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质,包括若干指令用以使得一台计算机终端(可以是个人计算机,服务器,或者第二终端、网络终端等)执行本发明各个实施例所述方法的全部或部分步骤。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于终端实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,系统或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。
尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (8)
1.一种内存管理方法,其特征在于,包括:
第一线程将自身已分配的内存中的,已完成使用的内存块设置为复用内存块;
第二线程使用所述复用内存块,在所述第二线程对所述复用内存块使用完成后,第一线程回收所述复用内存块;
创建管理队列,并指定所述管理队列的最大长度,通过所述管理队列对数据回收进行管理;
第二线程使用所述复用内存块,在所述第二线程对所述复用内存块使用完成后,第一线程回收所述复用内存块,包括:
第二线程在使用完所述复用内存块后,将所述复用内存块的内存指针放入第二线程的关联内存中,所述关联内存与所述第一线程的链表具有关联关系;
第一线程需要新的内存块时,首先判断自身数组是否有缓存的内存块指针,如果有则优先使用自身数组内部的内存块指针;如果自身数组没有内存块指针,则通过链表节点查找具有关联关系的其他线程回收的数组内部的内存块指针。
2.根据权利要求1所述的方法,其特征在于,第一线程将自身内存中已完成使用的内存块设置为复用内存块,包括:
第一线程在创建的时候会在线程对象内部创建一个数组和一个链表;数组存放回收的由自己创建的内存块,链表存放由其他线程回收的由第一线程创建的复用内存块的数组指针。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收到线程发送的数据回收请求,判断管理队列中的内存块长度是否达到最大队列长度,所述内存块为存储数据块的内存区域;
若管理队列中的内存块长度达到最大队列长度,则将数据回收请求涉及的数据块交由系统进行垃圾内存释放回收;
若管理队列中的内存块长度未达到最大队列长度,则将数据回收请求涉及的数据块插入管理队列的空闲内存块中。
4.一种内存管理系统,其特征在于,包括:
内存复用模块,用于第一线程将自身已分配的内存中的,已完成使用的内存块设置为复用内存块;
内存回收模块,用于第二线程使用所述复用内存块,在所述第二线程对所述复用内存块使用完成后,第一线程回收所述复用内存块;
内存管理模块,用于创建管理队列,并指定所述管理队列的最大长度,通过所述管理队列对数据回收进行管理;
所述内存回收模块包括:
第二线程在使用完所述复用内存块后,将所述复用内存块的内存指针放入第二线程的关联内存中,所述关联内存与所述第一线程的链表具有关联关系;
第一线程需要新的内存块时,首先判断自身数组是否有缓存的内存块指针,如果有则优先使用自身数组内部的内存块指针;如果自身数组没有内存块指针,则通过链表节点查找具有关联关系的其他线程回收的数组内部的内存块指针。
5.根据权利要求4所述的系统,其特征在于,所述内存复用模块包括:
第一线程在创建的时候会在线程对象内部创建一个数组和一个链表;数组存放回收的由自己创建的内存块,链表存放由其他线程回收的由第一线程创建的复用内存块的数组指针。
6.根据权利要求4所述的系统,其特征在于,所述系统还包括:
接收到线程发送的数据回收请求,判断管理队列中的内存块长度是否达到最大队列长度,所述内存块为存储数据块的内存区域;
若管理队列中的内存块长度达到最大队列长度,则将数据回收请求涉及的数据块交由系统进行垃圾内存释放回收;
若管理队列中的内存块长度未达到最大队列长度,则将数据回收请求涉及的数据块插入管理队列的空闲内存块中。
7.一种终端,其特征在于,包括:
存储器,用于存储内存回收程序;
处理器,用于执行所述内存回收程序时实现如权利要求1-3任一项所述内存管理方法的步骤。
8.一种存储有计算机程序的计算机可读存储介质,其特征在于,所述可读存储介质上存储有内存回收程序,所述内存回收程序被处理器执行时实现如权利要求1-3任一项所述内存管理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311500546.9A CN117251292B (zh) | 2023-11-13 | 2023-11-13 | 内存管理方法、系统、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311500546.9A CN117251292B (zh) | 2023-11-13 | 2023-11-13 | 内存管理方法、系统、终端及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117251292A CN117251292A (zh) | 2023-12-19 |
CN117251292B true CN117251292B (zh) | 2024-03-29 |
Family
ID=89133520
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311500546.9A Active CN117251292B (zh) | 2023-11-13 | 2023-11-13 | 内存管理方法、系统、终端及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117251292B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101226487A (zh) * | 2008-01-30 | 2008-07-23 | 中国船舶重工集团公司第七〇九研究所 | 基于嵌入式Linux操作系统的内核级线程库的实现方法 |
CN105845182A (zh) * | 2016-03-18 | 2016-08-10 | 华南理工大学 | 文件系统级的非挥发性存储器磨损均衡空闲块管理方法 |
CN109271327A (zh) * | 2017-07-18 | 2019-01-25 | 杭州海康威视数字技术股份有限公司 | 内存管理方法及装置 |
CN112346848A (zh) * | 2019-08-09 | 2021-02-09 | 中兴通讯股份有限公司 | 一种管理内存池的方法、装置及终端 |
CN113485822A (zh) * | 2020-06-19 | 2021-10-08 | 中兴通讯股份有限公司 | 内存管理方法、系统、客户端、服务器及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11797344B2 (en) * | 2020-10-30 | 2023-10-24 | Red Hat, Inc. | Quiescent state-based reclaiming strategy for progressive chunked queue |
-
2023
- 2023-11-13 CN CN202311500546.9A patent/CN117251292B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101226487A (zh) * | 2008-01-30 | 2008-07-23 | 中国船舶重工集团公司第七〇九研究所 | 基于嵌入式Linux操作系统的内核级线程库的实现方法 |
CN105845182A (zh) * | 2016-03-18 | 2016-08-10 | 华南理工大学 | 文件系统级的非挥发性存储器磨损均衡空闲块管理方法 |
CN109271327A (zh) * | 2017-07-18 | 2019-01-25 | 杭州海康威视数字技术股份有限公司 | 内存管理方法及装置 |
CN112346848A (zh) * | 2019-08-09 | 2021-02-09 | 中兴通讯股份有限公司 | 一种管理内存池的方法、装置及终端 |
CN113485822A (zh) * | 2020-06-19 | 2021-10-08 | 中兴通讯股份有限公司 | 内存管理方法、系统、客户端、服务器及存储介质 |
Non-Patent Citations (1)
Title |
---|
基于Linux的动态内存检测工具的设计与实现;何杭军, 朱利, 李青山, 谢海江;计算机工程(第21期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117251292A (zh) | 2023-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210240636A1 (en) | Memory Management Method and Apparatus | |
CN105893269B (zh) | 一种Linux系统下内存管理方法 | |
CN101189584B (zh) | 内存页面管理 | |
CN110109873B (zh) | 一种用于消息队列的文件管理方法 | |
EP3504628A1 (en) | Memory management method and device | |
CN111061752B (zh) | 数据处理方法、装置及电子设备 | |
CN113778662B (zh) | 内存回收方法及装置 | |
CN113590509B (zh) | 一种页交换的方法、存储系统和电子设备 | |
CN112445767A (zh) | 内存管理方法及装置、电子设备、存储介质 | |
CN108121813A (zh) | 数据管理方法、装置、系统、存储介质及电子设备 | |
CN108304259B (zh) | 内存管理方法及系统 | |
CN115168259A (zh) | 一种数据存取方法、装置、设备和计算机可读存储介质 | |
CN115712500A (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN108664217B (zh) | 一种降低固态盘存储系统写性能抖动的缓存方法及系统 | |
CN111858393B (zh) | 内存页面管理方法、内存页面管理装置、介质与电子设备 | |
CN117251292B (zh) | 内存管理方法、系统、终端及存储介质 | |
CN111061652B (zh) | 一种基于mpi-io中间件的非易失内存管理方法与系统 | |
CN111694806A (zh) | 一种事务日志的缓存方法、装置、设备和存储介质 | |
CN116610444A (zh) | 流计算系统和用于流计算系统的内存回收方法及计算设备 | |
CN116302598A (zh) | 共享内存的处理方法、装置、计算机设备及存储介质 | |
CN113568581A (zh) | 一种嵌入式设备的多应用资源回收方法及系统 | |
CN113742253A (zh) | 存储介质管理方法、装置、设备以及计算机可读存储介质 | |
CN114461405B (zh) | 一种内存中锁定页面的存储方法及相关装置 | |
Pleszkun et al. | An architecture for efficient Lisp list access | |
CN117251286A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |