CN112181663A - 一种内存调度方法、装置及计算机设备 - Google Patents

一种内存调度方法、装置及计算机设备 Download PDF

Info

Publication number
CN112181663A
CN112181663A CN202011105222.1A CN202011105222A CN112181663A CN 112181663 A CN112181663 A CN 112181663A CN 202011105222 A CN202011105222 A CN 202011105222A CN 112181663 A CN112181663 A CN 112181663A
Authority
CN
China
Prior art keywords
pointers
pool
pointer
instance
memory
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
Application number
CN202011105222.1A
Other languages
English (en)
Inventor
冯凯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
New H3C Big Data Technologies Co Ltd
Original Assignee
New H3C Big Data Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by New H3C Big Data Technologies Co Ltd filed Critical New H3C Big Data Technologies Co Ltd
Priority to CN202011105222.1A priority Critical patent/CN112181663A/zh
Publication of CN112181663A publication Critical patent/CN112181663A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5022Mechanisms to release resources

Abstract

本说明书提供一种内存调度方法、装置及计算机设备。所述方法应用于运行Linux操作系统的电子设备,所述方法包括:当运行进程时,确定所述进程调用的STL模板所需的实例对象数量M,通过所述进程从已创建的对象池中获得M个对象指针,将M个对象指针缓存至指定存储介质,并通过所述进程向M个对象指针指向的内存中添加M个对象指针对应的实例对象信息;M≥1;当确定已添加的任一实例对象信息满足释放条件时,通过所述进程从内存中清除所述满足释放条件的实例对象信息,并通过所述进程将所述满足释放条件的实例对象信息对应的对象指针放回所述对象池。

Description

一种内存调度方法、装置及计算机设备
技术领域
本说明书涉及存储调度技术领域,尤其涉及一种内存调度方法、装置及计算机设备。
背景技术
在Linux操作系统中进行C++开发时,通常使用标准模板库(Standard TemplateLibrary,STL)中的模板进行编程开发,例如map、list或vector。在运行包含模板的程序时,Linux操作系统需要针对模板分配对应的内存,在分配的内存中针对模板构建实例对象。
根据Linux操作系统针对STL的底层内存分配规则,程序对应的进程在使用完STL中的模板后,并不会将分配给模板的内存立即归还给Linux操作系统,而是由进程继续持有这些内存,以便于进程在重新使用模板的情况下,可以重复使用这些内存。
但在实际使用中发现,这一针对STL的底层内存分配规则没有真正实现,进程在重新使用模板的情况下,并不会重复使用已分配的内存,而是由Linux操作系统额外再分配新的内存。
因此,在进程多次使用模板的情况下,Linux操作系统为该进程不断分配新的内存,直到所分配的内存大小超出操作系统的规定上限,导致该进程被强制中止。
发明内容
本实施例公开了一种内存调度方法、装置及计算机设备,以避免进程因为内存分配超出上限,导致被Linux操作系统强制中止。
本实施例提供了如下方案:
一种内存调度方法,应用于运行Linux操作系统的电子设备,所述方法包括:
当运行进程时,确定所述进程调用的STL模板所需的实例对象数量M,通过所述进程从已创建的对象池中获得M个对象指针,将M个对象指针缓存至指定存储介质,并通过所述进程向M个对象指针指向的内存中添加M个对象指针对应的实例对象信息;M≥1;
当确定已添加的任一实例对象信息满足释放条件时,通过所述进程从内存中清除所述满足释放条件的实例对象信息,并通过所述进程将所述满足释放条件的实例对象信息对应的对象指针放回所述对象池。
优选地,根据上述方法,所述通过所述进程从已创建的对象池中获得M个对象指针,包括:
判断所述对象池中剩余对象指针的数量是否小于M;
如果否,通过所述进程从所述对象池中获得M个对象指针;
如果是,创建对象指针,将创建的对象指针添加到所述对象池中,以使所述对象池中剩余对象指针的数量大于或等于M,所述创建的对象指针指向对应的内存,通过所述进程从所述对象池中获得M个对象指针。
优选地,根据上述方法,该方法之前进一步包括:
为所述STL模板创建所述对象池;
创建预设数量的对象指针,为创建的对象指针确定对应的内存,将创建的对象指针指向对应的内存;
将创建的对象指针添加到所述对象池中。
优选地,根据上述方法,所述方法还包括:
在进程运行过程中,若检测到所述对象池中对象指针的数量超过预设阈值,则通过所述进程从所述对象池中确定待删除的至少一个对象指针,从所述对象池中删除确定的对象指针,以使所述对象池中对象指针的数量小于或等于预设阈值,并释放被删除的对象指针指向的内存。
优选地,根据上述方法,所述通过所述进程从所述对象池中确定待删除的至少一个对象指针,包括:
通过所述进程从所述对象池中确定创建时间最早的至少一个对象指针为待删除的对象指针;或者
通过所述进程从所述对象池中随机确定至少一个对象指针为待删除的对象指针。
优选地,根据上述方法,所述STL模板被封装在指定结构体中,所述指定结构体被设置有对应的第一成员函数和第二成员函数,所述第一成员函数用于从已创建的对象池中获得对象指针,所述第二成员函数用于向已创建的对象池中存放对象指针;
所述从已创建的对象池中获得M个对象指针包括:通过调用所述第一成员函数从已创建的对象池中获得M个对象指针;
所述将所述满足释放条件的实例对象信息对应的对象指针放回所述对象池包括:通过调用第二成员函数将所述满足释放条件的实例对象信息对应的对象指针放回所述对象池;所述第二成员函数至少包括所述指定结构体的析构函数。
优选地,根据上述方法,所述确定所述进程调用的STL模板所需的实例对象数量M包括:
判断所述STL模板所需的实例对象占用内存大小是否大于128字节;如果是,则:
将为所述进程分配的实例对象数量确定为所述实例对象数量M,或者,将预设值确定为所述实例对象数量M。
优选地,根据上述方法,所述对象池的数据结构通过链表表示;所述链表由对象指针组成;
所述从已创建的对象池中获得M个对象指针,包括:获得所述链表中的前M个对象指针;
在获得所述链表中的前M个对象指针之后,该方法进一步包括:将所述链表中存放前M个对象指针的结构删除;
所述将所述满足释放条件的实例对象信息对应的对象指针放回所述对象池,包括:在所述链表的指定位置添加所述满足释放条件的实例对象信息对应的对象指针。
一种内存调度装置,应用于运行Linux操作系统的电子设备,所述装置包括:
对象指针获取单元:用于当运行进程时,确定所述进程调用的STL模板所需的实例对象数量M,通过所述进程从已创建的对象池中获得M个对象指针,将M个对象指针缓存至指定存储介质,并通过所述进程向M个对象指针指向的内存中添加M个对象指针对应的实例对象信息;M≥1;
对象指针放回单元:用于当确定已添加的任一实例对象信息满足释放条件时,通过所述进程从内存中清除所述满足释放条件的实例对象信息,并通过所述进程将所述满足释放条件的实例对象信息对应的对象指针放回所述对象池。
优选地,根据上述装置,所述对象指针获取单元具体用于:
判断所述对象池中剩余对象指针的数量是否小于M;
如果否,通过所述进程从所述对象池中获得M个对象指针;
如果是,创建对象指针,将创建的对象指针添加到所述对象池中,以使所述对象池中剩余对象指针的数量大于或等于M,所述创建的对象指针指向对应的内存,通过所述进程从所述对象池中获得M个对象指针。
优选地,根据上述装置,所述装置之前还包括:
对象池创建单元:用于为所述STL模板创建所述对象池;创建预设数量的对象指针,为创建的对象指针确定对应的内存,将创建的对象指针指向对应的内存;将创建的对象指针添加到所述对象池中。
优选地,根据上述装置,所述装置还包括:
检测单元:用于在进程运行过程中,若检测到所述对象池中对象指针的数量超过预设阈值,则通过所述进程从所述对象池中确定待删除的至少一个对象指针,从所述对象池中删除确定的对象指针,以使所述对象池中对象指针的数量小于或等于预设阈值,并释放被删除的对象指针指向的内存。
优选地,根据上述装置,所述检测单元具体用于:
通过所述进程从所述对象池中确定创建时间最早的至少一个对象指针为待删除的对象指针;或者通过所述进程从所述对象池中随机确定至少一个对象指针为待删除的对象指针。
优选地,根据上述装置,所述STL模板被封装在指定结构体中,所述指定结构体被设置有对应的第一成员函数和第二成员函数,所述第一成员函数用于从已创建的对象池中获得对象指针,所述第二成员函数用于向已创建的对象池中存放对象指针;
所述对象指针获取单元具体用于:通过调用所述第一成员函数从已创建的对象池中获得M个对象指针;
所述对象指针放回单元具体用于:通过调用第二成员函数将所述满足释放条件的实例对象信息对应的对象指针放回所述对象池;所述第二成员函数至少包括所述指定结构体的析构函数。
优选地,根据上述装置,所述对象指针获取单元具体用于:
判断所述STL模板所需的实例对象占用内存大小是否大于128字节;如果是,则:将为所述进程分配的实例对象数量确定为所述实例对象数量M,或者,将预设值确定为所述实例对象数量M。
优选地,根据上述装置,所述对象池的数据结构通过链表表示;所述链表由对象指针组成;
所述对象指针获取单元具体用于:获得所述链表中的前M个对象指针;
在获得所述链表中的前M个对象指针之后,所述装置还包括删除单元:用于将所述链表中存放前M个对象指针的结构删除;
所述对象指针放回单元具体用于:在所述链表的指定位置添加所述满足释放条件的实例对象信息对应的对象指针。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现上述方法。
本说明书的实施例提供的技术方案可以至少包括以下有益效果:通过进程在已构建的对象池中获取和放回对象指针,进程可以重复使用对象指针以及对象指针所指向的内存。在重复使用模板时,进程不会重复向Linux操作系统申请分配新的内存,也不会因为分配的内存大小超出规定上限而将进程强制中止,而是重复使用对象指针所指向的内存存放实例对象信息,并且在实例对象信息释放后将对象指针归还,保证了进程的稳定运行。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是本说明书提供的一种内存调度方法的流程示意图;
图2是本说明书提供的一种对象池的结构示意图;
图3是本说明书提供的一种内存调度装置的结构示意图;
图4是本说明书提供的另一种内存调度装置的结构示意图;
图5是用于配置本说明书实施例方法的一种设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
为了使本领域技术人员更好地理解本说明书实施例提供的技术方案,并使本说明书实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本说明书实施例中技术方案作进一步详细的说明。
本说明书提供了一种内存调度方法。如图1所示,为本说明书提供的一种内存调度方法的流程示意图。该方法可以应用于运行有Linux操作系统的电子设备。该方法可以至少包括以下步骤。
S101:当运行进程时,确定进程调用的STL模板所需的实例对象数量M。
本实施例并不限定具体的确定实例对象数量的方法。可选地,作为一种实施例,确定进程所需的实例对象数量可以是根据进程的需求确定的。具体可以是以下两种情况:在进程针对调用的STL模板指定所需的实例对象数量的情况下,将为进程分配的实例对象数量确定为实例对象数量M,或者,在进程未指定所需的实例对象数量的情况下,将预设的固定值确定为实例对象数量M。
可选地,实例对象数量M可以是为进程分配的实例对象数量,也可以是预设的固定值。其中,M可以是大于或等于1的自然数。
此外,由于Linux操作系统中,STL内置的内存分配器有2个级别,当实例对象的内存占用小于128字节时,可以通过现有的内存分配器解决内存用尽导致进程停止的问题。
因此,可选地,作为一种实施例,确定进程调用的STL模板所需的实例对象数量M具体可以是:可以判断STL模板所需的实例对象占用内存大小是否大于128字节;如果是,则可以将为进程分配的实例对象数量确定为实例对象数量M,或者,将预设的固定值值确定为实例对象数量M。
需要注意的是,运行进程时,进程可以在不同运行时刻重复调用STL模板所需的实例对象,并且,不同运行时刻调用的实例对象数量可以并不相同。本实施例主要描述的可以是单次确定调用STL模板所需的实例对象数量的情况,可以理解的是,即使在所确定的实例对象数量不同的情况下,重新确定所需的实例对象数量M后,都可以用本实施例的方法实现内存调度。
S102:通过进程从已创建的对象池中获得M个对象指针,将M个对象指针缓存至指定存储介质,并通过进程向M个对象指针指向的内存中添加M个对象指针对应的实例对象信息。
对象池具体可以是存放多个对象指针的一个结构,进程可以从对象池中获取和放回对象指针。
对象指针具体可以是指向一块内存的指针。可选地,对象指针所指向的内存中可以预先构建一个STL模板的实例对象,所构建的实例对象中可以并不包含信息或数据,以便于进程使用;对象指针所指向的内存也可以用于由进程构建STL模板的实例对象。
可选地,作为一种实施例,通过进程从对象池中获得对象指针,具体实现的时候,可以是通过进程从对象池中获得对象指针的标识,以便于利用对象指针标识访问对象指针所指向的内存。这里为了方便描述和理解,使用对象指针来表示对象指针标识。
为了便于理解,下面给出一种对象池的结构示例。如图2所示,为本说明书提供的一种对象池的结构示意图。其中,对象池包括3个对象指针,每个对象指针分别指向一块内存,内存可以用于存放实例对象信息。当然,图2所示的对象池结构仅仅用于示例性说明,并不用于限定。
而关于对象池的具体创建方法、以及对象池具体的数据结构在下文中本实施例后面进行解释,此处暂不赘述。
对应于S101中确定的实例对象数量M,S102中可以通过进程从已创建的对象池中获得M个对象指针。
可选地,作为一种实施例,从对象池中获得M个对象指针具体可以是:判断对象池中剩余对象指针的数量是否小于M;如果否,通过进程从对象池中获得M个对象指针;如果是,创建对象指针,将创建的对象指针添加到对象池中,以使对象池中剩余对象指针的数量大于或等于M,创建的对象指针指向对应的内存,通过进程从对象池中获得M个对象指针。
而具体的获得对象指针的过程可以参见下文中本实施例后面的解释,此处暂不赘述。
S103:当确定任一实例对象信息满足释放条件时,通过进程从内存中清除满足释放条件的实例对象信息,并通过进程将满足释放条件的实例对象信息对应的对象指针放回对象池。
其中,本说明书并不限定具体的释放条件。可选地,释放条件可以是进程中暂时不需要处理实例对象信息;也可以是实例对象信息使用完毕;也可以是进程指示需要释放实例对象信息。
需要注意的是,S103中描述的是针对单个满足释放条件的实例对象信息进行的处理,可以理解的是,针对多个满足释放条件的实例对象信息,可以都执行S103完成清除信息和将对象指针放回对象池。
而具体的将对象指针放回对象池的过程可以参见下文中本实施例后面的解释,此处暂不赘述。
至此,完成图1所示的方法流程。
通过上述方法实施例,进程在已构建的对象池中获取和放回对象指针,进程可以重复使用对象指针以及对象指针所指向的内存。在重复使用模板时,进程不会重复向Linux操作系统申请分配新的内存,也不会因为分配的内存大小超出规定上限而将进程强制中止,而是重复使用对象指针所指向的内存存放实例对象信息,并且在实例对象信息释放后将对象指针归还,保证了进程的稳定运行。
需要注意的是,上述方法实施例中可以是针对一个STL模板所执行的,可以理解的是,如果进程需要调用多个STL模板生成实例对象,可以都利用上述方法实施例实现内存调度。
下面对S102中对象池的创建过程进行描述。本说明书并不限定具体的创建方法。
可选地,作为一种实施例,具体的创建对象池的方法可以是:在S101执行之前,可以为STL模板创建对象池;可以创建预设数量的对象指针,为创建的对象指针确定对应的内存,可以将创建的对象指针指向对应的内存,并可以将创建的对象指针添加到对象池中。
对应于S102中对象指针的一种解释,对象指针所指向的内存中可以预先构建一个STL模板的实例对象,在将创建的对象指针指向对应的内存之后,可以预先针对STL模板在创建的对象指针所对应的内存中构建多个实例对象。所构建的实例对象数量可以是预设的固定值,也可以是根据进程需求动态确定的值,也可以是进程指定的值。
通过本实施例可以使得进程无需即时构建实例对象,节省了构建实例对象时的内存开销、以及计算资源的开销。
当然,上述创建对象池的实施例仅仅用于示例性说明,并不用于限定。
下面针对S102中对象池的数据结构进行解释。本说明书并不限定具体的对象池的数据结构。
可选地,作为一种实施例,对象池的数据结构可以通过链表表示。链表可以由对象指针组成。
对应于S102中从对象池中获得对象指针,从已创建的对象池中获得M个对象指针,具体可以是:获得链表中的前M个对象指针。
而在获得链表中的前M个对象指针之后,可以将链表中存放前M个对象指针的结构删除;链表中存放对象指针的结构可以是链表的结点。
对应于S103中将满足释放条件的实例对象信息对应的对象指针放回对象池,具体可以是:在链表的指定位置添加满足释放条件的实例对象信息对应的对象指针。
本实施例并不限定链表中用于添加对象指针的指定位置,具体可以是链表末尾、链表头部、链表中间。
而在添加对象指针之前,可以在链表的指定位置预先创建一个存放对象指针的结构。
需要注意的是,本实施例仅仅描述了单个对象指针如何放回对象池,而对于多个需要放回对象池的对象指针,都可以使用本实施例的方法放回对象池。
本实施例中,可以通过获得对象指针后删除结构、并创建结构用于放入对象指针,将对象指针通过链表结构循环使用,避免存在一直空闲的对象指针,造成浪费,同时可以每次直接获取链表中前面的对象指针,无需进行查找。
当然,上述链表结构的对象池的实施例仅仅用于示例性说明,并不用于限定。
下面针对S102中从对象池中获得对象指针、以及S103中将对象指针放回对象池的具体实现进行描述。
可选地,作为一种实施例,STL模板可以被封装在指定结构体中,指定结构体可以被设置有对应的第一成员函数和第二成员函数,第一成员函数可以用于从已创建的对象池中获得对象指针,第二成员函数可以用于向已创建的对象池中存放对象指针。
STL模板所需的实例对象可以是根据该指定结构体构建的。
而具体实现S102中从对象池获得对象指针,可以是通过调用第一成员函数从已创建的对象池中获得M个对象指针。
而具体实现S103中将对象指针放回对象池,可以是通过调用第二成员函数将满足释放条件的实例对象信息对应的对象指针放回对象池;第二成员函数可以至少包括指定结构体的析构函数。
显然,由于实例对象是根据指定结构体构建的,在实例对象使用完毕后,可以调用析构函数,将实例对象信息清除,并将对应的对象指针放回对象池。
当然,上述通过封装有STL模板的指定结构体实现在对象池中获得和放回对象指针的实施例仅仅用于示例性说明,并不用于限定。
对应于S102中从对象池中获得M个对象指针的解释,可能在对象池中增加对象指针。而对象池中对象指针的数量如果太多,可能依然存在为进程分配的内存太多导致进程被强制停止的问题,还可能存在对象指针浪费的问题,因此,需要将对象池中对象指针的数量保持在一定范围之内。
可选地,作为一种实施例,在进程运行过程中,若检测到对象池中对象指针的数量超过预设阈值,则可以通过进程从对象池中确定待删除的至少一个对象指针,从对象池中删除确定的对象指针,以使对象池中对象指针的数量小于或等于预设阈值,并可以释放被删除的对象指针指向的内存。
其中,本实施例并不限定确定待删除的对象指针数量的方法,只要满足删除后对象池中对象指针的剩余数量小于或等于预设阈值即可。
本实施例也不限定确定待删除的对象指针的方法。可选地,具体可以是通过进程从对象池中确定创建时间最早的至少一个对象指针为待删除的对象指针;或者通过进程从对象池中随机确定至少一个对象指针为待删除的对象指针。
可选地,作为另一种实施例,在进程运行过程中,若检测到当前为进程分配的内存大小总和超过预设阈值,则可以通过进程从对象池中确定待删除的至少一个对象指针,从对象池中删除确定的对象指针,以使当前为进程分配的内存大小总和小于或等于预设阈值,并可以释放被删除的对象指针指向的内存。
通过上述实施例,可以将对象池中对象指针的数量保持在一定范围内,从而避免对象指针浪费、或者分配内存太多导致进程强制停止等问题。
当然,上述两个将对象池中对象指针的数量保持在一定范围内的实施例仅仅用于示例性说明,并不用于限定。
至此,本说明书的方法实施例解释完毕,本说明书还提供了一种内存调度装置,如图3所示,为本说明书提供的一种内存调度装置的结构示意图,该装置可以应用于运行有Linux操作系统的电子设备。该装置可以至少包括以下单元。
对象指针获取单元201:用于当运行进程时,确定进程调用的STL模板所需的实例对象数量M,通过进程从已创建的对象池中获得M个对象指针,将M个对象指针缓存至指定存储介质,并通过进程向M个对象指针指向的内存中添加M个对象指针对应的实例对象信息;M≥1。
对象指针放回单元202:用于当确定任一实例对象信息满足释放条件时,通过进程从内存中清除满足释放条件的实例对象信息,并通过进程将满足释放条件的实例对象信息对应的对象指针放回对象池。
对象指针获取单元201可以具体用于:判断对象池中剩余对象指针的数量是否小于M;如果否,通过进程从对象池中获得M个对象指针;如果是,创建对象指针,将创建的对象指针添加到对象池中,以使对象池中剩余对象指针的数量大于或等于M,创建的对象指针指向对应的内存,通过进程从对象池中获得M个对象指针。
装置之前还可以包括对象池创建单元203:可以用于为STL模板创建对象池;创建预设数量的对象指针,为创建的对象指针确定对应的内存,将创建的对象指针指向对应的内存;将创建的对象指针添加到对象池中。
装置还可以包括检测单元204:可以用于在进程运行过程中,若检测到对象池中对象指针的数量超过预设阈值,则通过进程从对象池中确定待删除的至少一个对象指针,从对象池中删除确定的对象指针,以使对象池中对象指针的数量小于或等于预设阈值,并释放被删除的对象指针指向的内存。
检测单元204具体可以用于:通过进程从对象池中确定创建时间最早的至少一个对象指针为待删除的对象指针;或者通过进程从对象池中随机确定至少一个对象指针为待删除的对象指针。
STL模板可以被封装在指定结构体中,指定结构体被设置有对应的第一成员函数和第二成员函数,第一成员函数用于从已创建的对象池中获得对象指针,第二成员函数用于向已创建的对象池中存放对象指针。
基于上述指定结构体,对象指针获取单元201具体可以用于:通过调用第一成员函数从已创建的对象池中获得M个对象指针。对象指针放回单元202具体可以用于:通过调用第二成员函数将满足释放条件的实例对象信息对应的对象指针放回对象池;第二成员函数至少包括指定结构体的析构函数。
对象指针获取单元201具体可以用于:判断STL模板所需的实例对象占用内存大小是否大于128字节;如果是,则:将为进程分配的实例对象数量确定为实例对象数量M,或者,将预设值确定为实例对象数量M。
此外,对象池的数据结构可以通过链表表示;链表可以由对象指针组成。
基于链表结构的对象池,对象指针获取单元201具体可以用于:获得链表中的前M个对象指针。
在获得链表中的前M个对象指针之后,装置还可以包括删除单元205:用于将链表中存放前M个对象指针的结构删除。
对象指针放回单元202具体可以用于:在链表的指定位置添加满足释放条件的实例对象信息对应的对象指针。
为了体现上述装置实施例中完整的装置结构,如图4所示,为本说明书提供的另一种内存调度装置的结构示意图。该装置除了包括对象指针获取单元201、对象指针放回单元202,还包括对象池创建单元203在对象指针获取单元201之前,检测单元204在对象指针放回单元202之后,删除单元205在对象指针获取单元201和对象指针放回单元202之间。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现一种如图1所示的内存调度方法。
图5示出了本说明书实施例所提供的一种更为具体的计算机设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现一种如图1所示的内存调度方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护。

Claims (10)

1.一种内存调度方法,其特征在于,应用于运行Linux操作系统的电子设备,所述方法包括:
当运行进程时,确定所述进程调用的STL模板所需的实例对象数量M,通过所述进程从已创建的对象池中获得M个对象指针,将M个对象指针缓存至指定存储介质,并通过所述进程向M个对象指针指向的内存中添加M个对象指针对应的实例对象信息;M≥1;
当确定已添加的任一实例对象信息满足释放条件时,通过所述进程从内存中清除所述满足释放条件的实例对象信息,并通过所述进程将所述满足释放条件的实例对象信息对应的对象指针放回所述对象池。
2.根据权利要求1所述的方法,其特征在于,所述通过所述进程从已创建的对象池中获得M个对象指针,包括:
判断所述对象池中剩余对象指针的数量是否小于M;
如果否,通过所述进程从所述对象池中获得M个对象指针;
如果是,创建对象指针,将创建的对象指针添加到所述对象池中,以使所述对象池中剩余对象指针的数量大于或等于M,所述创建的对象指针指向对应的内存,通过所述进程从所述对象池中获得M个对象指针。
3.根据权利要求1所述的方法,其特征在于,该方法之前进一步包括:
为所述STL模板创建所述对象池;
创建预设数量的对象指针,为创建的对象指针确定对应的内存,将创建的对象指针指向对应的内存;
将创建的对象指针添加到所述对象池中。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在进程运行过程中,若检测到所述对象池中对象指针的数量超过预设阈值,则通过所述进程从所述对象池中确定待删除的至少一个对象指针,从所述对象池中删除确定的对象指针,以使所述对象池中对象指针的数量小于或等于预设阈值,并释放被删除的对象指针指向的内存。
5.根据权利要求4所述的方法,其特征在于,所述通过所述进程从所述对象池中确定待删除的至少一个对象指针,包括:
通过所述进程从所述对象池中确定创建时间最早的至少一个对象指针为待删除的对象指针;或者
通过所述进程从所述对象池中随机确定至少一个对象指针为待删除的对象指针。
6.根据权利要求1所述的方法,其特征在于,所述STL模板被封装在指定结构体中,所述指定结构体被设置有对应的第一成员函数和第二成员函数,所述第一成员函数用于从已创建的对象池中获得对象指针,所述第二成员函数用于向已创建的对象池中存放对象指针;
所述从已创建的对象池中获得M个对象指针包括:通过调用所述第一成员函数从已创建的对象池中获得M个对象指针;
所述将所述满足释放条件的实例对象信息对应的对象指针放回所述对象池包括:通过调用第二成员函数将所述满足释放条件的实例对象信息对应的对象指针放回所述对象池;所述第二成员函数至少包括所述指定结构体的析构函数。
7.根据权利要求1所述的方法,其特征在于,所述确定所述进程调用的STL模板所需的实例对象数量M包括:
判断所述STL模板所需的实例对象占用内存大小是否大于128字节;如果是,则:
将为所述进程分配的实例对象数量确定为所述实例对象数量M,或者,将预设值确定为所述实例对象数量M。
8.根据权利要求1所述的方法,其特征在于,所述对象池的数据结构通过链表表示;所述链表由对象指针组成;
所述从已创建的对象池中获得M个对象指针,包括:获得所述链表中的前M个对象指针;
在获得所述链表中的前M个对象指针之后,该方法进一步包括:将所述链表中存放前M个对象指针的结构删除;
所述将所述满足释放条件的实例对象信息对应的对象指针放回所述对象池,包括:在所述链表的指定位置添加所述满足释放条件的实例对象信息对应的对象指针。
9.一种内存调度装置,其特征在于,应用于运行Linux操作系统的电子设备,所述装置包括:
对象指针获取单元:用于当运行进程时,确定所述进程调用的STL模板所需的实例对象数量M,通过所述进程从已创建的对象池中获得M个对象指针,将M个对象指针缓存至指定存储介质,并通过所述进程向M个对象指针指向的内存中添加M个对象指针对应的实例对象信息;M≥1;
对象指针放回单元:用于当确定任一实例对象信息满足释放条件时,通过所述进程从内存中清除所述满足释放条件的实例对象信息,并通过所述进程将所述满足释放条件的实例对象信息对应的对象指针放回所述对象池。
10.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1-8任一项所述方法。
CN202011105222.1A 2020-10-15 2020-10-15 一种内存调度方法、装置及计算机设备 Pending CN112181663A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011105222.1A CN112181663A (zh) 2020-10-15 2020-10-15 一种内存调度方法、装置及计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011105222.1A CN112181663A (zh) 2020-10-15 2020-10-15 一种内存调度方法、装置及计算机设备

Publications (1)

Publication Number Publication Date
CN112181663A true CN112181663A (zh) 2021-01-05

Family

ID=73950412

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011105222.1A Pending CN112181663A (zh) 2020-10-15 2020-10-15 一种内存调度方法、装置及计算机设备

Country Status (1)

Country Link
CN (1) CN112181663A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113076556A (zh) * 2021-03-29 2021-07-06 北京中电华大电子设计有限责任公司 一种eUICC签约数据文件的管理方法
CN114670206A (zh) * 2022-05-07 2022-06-28 法奥意威(苏州)机器人系统有限公司 机器人控制方法、装置、协作机器人和存储介质
CN116069585A (zh) * 2021-11-02 2023-05-05 慧与发展有限责任合伙企业 检测计算机系统中的内存使用尖峰
CN116302571A (zh) * 2023-05-17 2023-06-23 北京趋动智能科技有限公司 内存释放方法、装置、客户端、服务端及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010056522A1 (en) * 1998-06-29 2001-12-27 Raju Satyanarayana Methods and apparatus for memory allocation for object instances in an object-oriented software environment
KR20030055714A (ko) * 2001-12-27 2003-07-04 한국전자통신연구원 웹 기반 응용 시스템의 메모리 상에서 비즈니스 객체 관리장치 및 그 방법
CN106250242A (zh) * 2016-08-10 2016-12-21 西安诺瓦电子科技有限公司 基于操作系统的内存复用方法及装置
CN108255608A (zh) * 2018-01-10 2018-07-06 武汉斗鱼网络科技有限公司 一种内存池的管理方法
CN110018912A (zh) * 2018-01-10 2019-07-16 武汉斗鱼网络科技有限公司 具备通知功能的数据缓存方法、存储介质、设备及系统
CN110471763A (zh) * 2019-07-29 2019-11-19 平安科技(深圳)有限公司 基于共享对象池的调度方法、系统、介质及电子设备
CN111273968A (zh) * 2020-01-17 2020-06-12 上海米哈游天命科技有限公司 一种对象调用方法、装置、设备及介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010056522A1 (en) * 1998-06-29 2001-12-27 Raju Satyanarayana Methods and apparatus for memory allocation for object instances in an object-oriented software environment
KR20030055714A (ko) * 2001-12-27 2003-07-04 한국전자통신연구원 웹 기반 응용 시스템의 메모리 상에서 비즈니스 객체 관리장치 및 그 방법
CN106250242A (zh) * 2016-08-10 2016-12-21 西安诺瓦电子科技有限公司 基于操作系统的内存复用方法及装置
CN108255608A (zh) * 2018-01-10 2018-07-06 武汉斗鱼网络科技有限公司 一种内存池的管理方法
CN110018912A (zh) * 2018-01-10 2019-07-16 武汉斗鱼网络科技有限公司 具备通知功能的数据缓存方法、存储介质、设备及系统
CN110471763A (zh) * 2019-07-29 2019-11-19 平安科技(深圳)有限公司 基于共享对象池的调度方法、系统、介质及电子设备
CN111273968A (zh) * 2020-01-17 2020-06-12 上海米哈游天命科技有限公司 一种对象调用方法、装置、设备及介质

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113076556A (zh) * 2021-03-29 2021-07-06 北京中电华大电子设计有限责任公司 一种eUICC签约数据文件的管理方法
CN116069585A (zh) * 2021-11-02 2023-05-05 慧与发展有限责任合伙企业 检测计算机系统中的内存使用尖峰
CN114670206A (zh) * 2022-05-07 2022-06-28 法奥意威(苏州)机器人系统有限公司 机器人控制方法、装置、协作机器人和存储介质
CN116302571A (zh) * 2023-05-17 2023-06-23 北京趋动智能科技有限公司 内存释放方法、装置、客户端、服务端及存储介质
CN116302571B (zh) * 2023-05-17 2023-10-20 北京趋动智能科技有限公司 内存释放方法、装置、客户端、服务端及存储介质

Similar Documents

Publication Publication Date Title
CN112181663A (zh) 一种内存调度方法、装置及计算机设备
US10324734B2 (en) Application containers
CN111158879B (zh) 一种系统资源的调度方法,装置、机器可读介质和系统
CN109144619B (zh) 图标字体信息处理方法、装置及系统
CN113760543A (zh) 资源管理方法、装置、电子设备及计算机可读存储介质
CN106250061A (zh) 文件下载处理方法及装置
CN113010265A (zh) Pod的调度方法、调度器、存储插件及系统
CN115421787A (zh) 指令执行方法、装置、设备、系统、程序产品及介质
CN109102200B (zh) 一种定时任务处理方法及装置
CN110188975B (zh) 一种资源获取方法及装置
CN110968333B (zh) 配置信息替换方法和装置、机器可读存储介质及处理器
US9405470B2 (en) Data processing system and data processing method
CN108334317A (zh) 图形引擎、图形引擎构建方法、更新方法及装置
CN111475277A (zh) 一种资源分配方法、系统、设备及机器可读存储介质
CN115185458A (zh) 一种数据写入方法、装置、存储介质和计算机设备
CN110032404B (zh) 一种刷新任务的管理方法及装置
CN114244898A (zh) 基于服务网格的工作负载预热方法及装置
CN111427682A (zh) 任务分配方法、系统、装置及设备
CN111967767A (zh) 一种业务风险识别方法、装置、设备及介质
CN111221648A (zh) 一种基于鲲鹏处理器的应用共享方法及设备、介质
CN110633181B (zh) 可视化显示方法和装置
CN110554922A (zh) 一种系统资源分配方法及装置
CN117130776A (zh) 一种任务处理方法及系统
US11474720B1 (en) Systems and methods for implementing a custom heap memory manager to optimize compute kernel performance
CN111625192B (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20210105