CN117421116A - 业务处理方法、装置及计算机设备、存储介质、程序产品 - Google Patents
业务处理方法、装置及计算机设备、存储介质、程序产品 Download PDFInfo
- Publication number
- CN117421116A CN117421116A CN202311406663.9A CN202311406663A CN117421116A CN 117421116 A CN117421116 A CN 117421116A CN 202311406663 A CN202311406663 A CN 202311406663A CN 117421116 A CN117421116 A CN 117421116A
- Authority
- CN
- China
- Prior art keywords
- memory
- pool
- target
- service
- type
- 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
- 238000003860 storage Methods 0.000 title claims abstract description 52
- 238000003672 processing method Methods 0.000 title claims abstract description 33
- 230000015654 memory Effects 0.000 claims abstract description 2262
- 238000011084 recovery Methods 0.000 claims abstract description 234
- 238000012545 processing Methods 0.000 claims abstract description 174
- 238000000034 method Methods 0.000 claims abstract description 102
- 238000009826 distribution Methods 0.000 claims abstract description 34
- 238000004590 computer program Methods 0.000 claims description 40
- 238000004064 recycling Methods 0.000 claims description 9
- 230000009467 reduction Effects 0.000 claims description 5
- 230000008569 process Effects 0.000 description 68
- 238000010586 diagram Methods 0.000 description 13
- 238000004891 communication Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 10
- 230000007334 memory performance Effects 0.000 description 10
- 238000004422 calculation algorithm Methods 0.000 description 8
- 238000007726 management method Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 7
- 230000008602 contraction Effects 0.000 description 6
- 238000013473 artificial intelligence Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 238000009877 rendering Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 230000002452 interceptive effect Effects 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 230000000903 blocking effect Effects 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000010926 purge Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 238000011946 reduction process Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000012876 topography Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 238000012800 visualization 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
技术领域
本申请涉及计算机技术领域,尤其涉及一种业务处理方法、装置及计算机设备、存储介质、程序产品。
背景技术
目前,一些复杂业务在运行过程中存在内存分配和内存回收的需求。以游戏业务为例,大型多人在线游戏拥有众多地图、复杂华丽的技能系统以及多种多样的玩法,在游戏玩家的游戏过程中,可能涉及到大量的资源加载、场景切换以及角色操作需求,游戏在运行过程中可能会产生大量的内存分配和释放需求。具体来说,游戏中需要频繁分配内存创建临时对象,创建的临时对象用于存储渲染资源(例如,贴图、动画、特效以及UI(UserInterface,游戏玩家界面)元素,等等),而这些临时对象在使用完毕后会变成垃圾,需要进行内存回收;作为一个多人在线游戏,游戏客户端需要不断与游戏服务器进行通信,以同步临近游戏客户端的事件和消息,这些事件和消息也会带来一系列临时对象,这些临时对象在使用完毕后也需要进行内存回收。
值得注意的是,内存回收会暂停业务的运行过程,如果业务中的内存分配不合理,将频繁地触发内存回收,这样会导致业务的运行过程受到影响。例如,在游戏业务中,内存回收需要暂停游戏数百毫秒,频繁地触发内存回收会造成游戏卡顿,严重影响游戏玩家的游戏体验,破坏游戏的可玩性。因此,如何降低内存回收频率,提升业务运行的稳定性,成为当前的研究热点。
发明内容
本申请实施例提供了一种业务处理方法、装置及计算机设备、存储介质、程序产品,可以降低内存回收频率,提升业务运行的稳定性。
一方面,本申请实施例提供了一种业务处理方法,该业务处理方法包括:
接收对象创建请求,对象创建请求用于请求在业务中创建目标对象类型的业务对象,目标对象类型的业务对象用于存储业务中属于目标对象类型的业务数据;业务按照间隔参考时间周期性地进行内存回收,间隔参考时间是指相邻两次内存回收之间的时间间隔;内存回收是指回收业务中不再使用的业务对象所占用的内存;
在对象池中查询属于目标对象类型的候选对象作为目标对象类型的业务对象;对象池包括预先创建好的不同对象类型的候选对象;
若在对象池中未查询到属于目标对象类型的候选对象,且尚未到达当前内存回收周期对应的内存回收时间,则按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存;多层级内存分配策略是基于控制内存回收的频率需求设置得到的,多层级内存分配策略用于定义在间隔参考时间内对内存池进行内存分配所采用的动态分配方式;
基于对象内存,在业务中创建目标对象类型的业务对象。
相应地,本申请实施例提供了一种业务处理装置,该业务处理装置包括:
获取单元,用于接收对象创建请求,对象创建请求用于请求在业务中创建目标对象类型的业务对象,目标对象类型的业务对象用于存储业务中属于目标对象类型的业务数据;业务按照间隔参考时间周期性地进行内存回收,间隔参考时间是指相邻两次内存回收之间的时间间隔;内存回收是指回收业务中不再使用的业务对象所占用的内存;
处理单元,用于在对象池中查询属于目标对象类型的候选对象作为目标对象类型的业务对象;对象池包括预先创建好的不同对象类型的候选对象;
处理单元,还用于若在对象池中未查询到属于目标对象类型的候选对象,且尚未到达当前内存回收周期对应的内存回收时间,则按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存;多层级内存分配策略是基于控制内存回收的频率需求设置得到的,多层级内存分配策略用于定义在间隔参考时间内对内存池进行内存分配所采用的动态分配方式;
处理单元,还用于基于对象内存,在业务中创建目标对象类型的业务对象。
在一种实现方式中,多层级内存分配策略包括多个层级的内存分配策略;处理单元,用于按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行以下任一种:
基于层级顺序依次按照各个层级的内存分配策略,在内存池中为目标对象类型的业务对象分配对象内存;
按照每个层级的内存分配策略,在内存池中为目标对象类型的业务对象并行地进行分配内存,在多个层级的内存分配策略中确定优先成功分配内存的目标内存分配策略,将目标内存分配策略所分配的内存确定为对象内存。
在一种实现方式中,内存池包括第一内存池和第二内存池,第一内存池允许申请的最大内存量为第一内存量,第二内存池允许申请的最大内存量为第二内存量,第二内存量大于第一内存量;创建目标对象类型的业务对象所需的内存量为目标内存量;
处理单元,用于基于层级顺序依次按照各个层级的内存分配策略,在内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行如下步骤:
若目标内存量小于或等于第一内存量,则基于层级顺序依次按照各个层级的内存分配策略,在第一内存池中为目标对象类型的业务对象分配对象内存;
若目标内存量大于第一内存量,则基于层级顺序依次按照各个层级的内存分配策略,在第二内存池中为目标对象类型的业务对象分配对象内存。
在一种实现方式中,第一内存池包括多种内存类型的内存池;处理单元,用于基于层级顺序依次按照各个层级的内存分配策略,在第一内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行如下步骤:
在多种内存类型中确定目标对象类型所属的目标内存类型;
基于层级顺序依次按照各个层级的内存分配策略,在目标内存类型的内存池中为目标对象类型的业务对象分配对象内存。
在一种实现方式中,当在第一内存池中为目标对象类型的业务对象分配对象内存时,各个层级的内存分配策略包括精准匹配策略、模糊匹配策略以及第一内存池扩容策略;其中,精准匹配策略的层级低于模糊匹配策略的层级,模糊匹配策略的层级低于第一内存池扩容策略的层级;
处理单元,用于基于层级顺序依次按照各个层级的内存分配策略,在目标内存类型的内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行如下步骤:
按照第一内存池对应的内存申请粒度对目标内存量进行对齐,得到参考内存量;
按照精准匹配策略,在目标内存类型的内存池中精准匹配内存量等于参考内存量的内存,作为对象内存;
若精准匹配失败,则按照模糊匹配策略,基于参考内存量在目标内存类型的内存池中进行模糊匹配;
若模糊匹配失败,则对目标内存类型的内存池进行扩容处理,并按照精准匹配策略,在扩容处理后的目标内存类型的内存池中精准匹配内存量等于参考内存量的内存,作为对象内存。
在一种实现方式中,模糊匹配策略包括模糊无损匹配策略和模糊有损匹配策略,模糊无损匹配策略的层级低于模糊有损匹配策略的层级;处理单元,用于按照模糊匹配策略,基于参考内存量在目标内存类型的内存池中进行模糊匹配时,具体用于执行如下步骤:
按照模糊无损匹配策略,在目标内存类型的内存池中查询内存量等于第一匹配内存量的内存,第一匹配内存量是参考内存量的整数倍;
若在目标内存类型的内存池中未查询到内存量等于第一匹配内存量的内存,则按照模糊有损匹配策略,在目标内存类型的内存池中查询内存量为第二匹配内存量的内存,第二匹配内存量是参考内存量的非整数倍;
若在目标内存类型的内存池中未查询到内存量为第二匹配内存量的内存,则确定模糊匹配失败。
在一种实现方式中,处理单元,还用于执行如下步骤:
若目标内存类型的内存池中存在内存量等于第一匹配内存量的内存,则从第一匹配内存量的内存中,拆分出内存量等于参考内存量的内存作为对象内存;
若目标内存类型的内存池中存在内存量等于第二匹配内存量的内存,则从第二匹配内存量的内存中,拆分出内存量等于参考内存量的内存作为对象内存;其中,第二匹配内存量的内存中拆分后的剩余内存,被按照第一内存池对应的内存申请粒度进行对齐。
在一种实现方式中,当在第二内存池中为目标对象类型的业务对象分配对象内存时,各个层级的内存分配策略包括小范围模糊匹配策略和大范围模糊匹配策略;其中,小范围模糊匹配策略的层级低于大范围模糊匹配策略的层级;
处理单元,用于基于层级顺序依次按照各个层级的内存分配策略,在第二内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行如下步骤:
按照第二内存池对应的内存申请粒度对目标内存量进行对齐,得到参考内存量;
按照小范围模糊匹配策略,在第二内存池中查询内存量属于第一内存量范围的内存,第一内存量范围是根据参考内存量确定;
若在第二内存池中未查询到内存量属于第一内存量范围的内存,则根据内存剩余阈值对第二内存池的剩余内存量进行检查;内存剩余阈值是根据指定内存的内存量确定的,指定内存是在当前内存回收周期的前序内存回收周期内申请的,指定内存的内存量大于内存量阈值;
若检查结果指示第二内存池的剩余内存量大于或等于内存剩余阈值,则按照大范围模糊匹配策略,在第二内存池中查询内存量属于第二内存量范围的内存,第二内存量范围是根据参考内存量确定的,第二内存量范围大于第一内存量范围;
若在第二内存池中查询到内存量属于第二内存量范围的内存,则在属于第二内存量范围的内存中确定对象内存。
在一种实现方式中,处理单元,还用于执行如下步骤:
若在第二内存池中查询到内存量属于第一内存量范围的内存,则在属于第一内存量范围的内存中确定对象内存;
其中,在属于第一内存量范围的内存中确定对象内存,包括:在属于第一内存量范围的内存中确定第一候选内存,第一候选内存是属于第一内存量范围的内存中,内存量与参考内存量最接近的内存;以及,在第一候选内存中确定对象内存;
在属于第二内存量范围的内存中确定对象内存,包括:在属于第二内存量范围的内存中确定第二候选内存,第二候选内存是属于第二内存量范围的内存中,内存量与参考内存量最接近的内存;以及,在第二候选内存中确定对象内存。
在一种实现方式中,各个层级的内存分配策略还包括第二内存池扩容策略;处理单元,还用于执行如下步骤:
若检查结果指示第二内存池的剩余内存量小于内存剩余阈值,或者,若在第二内存池中未查询到内存量属于第二内存量范围的内存,则按照第二内存池扩容策略,对第二内存池进行扩容处理;
按照大范围模糊匹配策略,在扩容处理后的第二内存池中查询内存量属于第二内存量范围的内存。
在一种实现方式中,处理单元,用于按照第二内存池扩容策略,对第二内存池进行扩容处理时,具体用于执行如下步骤:
在到达当前内存回收周期对应的内存回收时间之前,获取内存扩展指示信息;
若内存扩展指示信息指示允许对第二内存池进行扩容处理,则从系统内存中申请内存对第二内存池进行扩容处理。
在一种实现方式中,处理单元,还用于执行如下步骤:
获取当前内存回收周期的上一内存回收周期的对象池扩容信息;
若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期未进行扩容处理,则在到达当前内存回收周期对应的内存回收时间之前,触发执行按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存的步骤;
若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期进行扩容处理,则获取当前内存回收周期的扩容内存量,根据扩容内存量对对象池进行扩容处理,并在扩容处理后的对象池中创建目标对象类型的候选对象作为目标对象类型的业务对象。
在一种实现方式中,处理单元,还用于执行如下步骤:
在当前内存回收周期进行内存回收之前,获取当前内存回收周期的上一内存回收周期的对象池扩容信息;
若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期进行扩容处理,则保持当前内存回收周期的对象池不变;
若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期未进行扩容处理,则对当前内存回收周期的对象池进行缩容处理。
相应地,本申请实施例提供一种计算机设备,该计算机设备包括:
处理器,适于实现计算机程序;
计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序适于由处理器加载并执行上述的业务处理方法。
相应地,本申请实施例提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被计算机设备的处理器读取并执行时,使得计算机设备执行上述的业务处理方法。
相应地,本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行上述的业务处理方法。
本申请实施例中,业务可以按照间隔参考时间周期性地进行内存回收,间隔参考时间是指相邻两次内存回收之间的时间间隔。当需要在业务中创建目标对象类型的业务对象时,可以在在对象池中查询属于目标对象类型的候选对象作为目标对象类型的业务对象;若在对象池中未查询到属于目标对象类型的候选对象,且尚未到达当前内存回收周期对应的内存回收时间,则可以按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存,并基于分配的对象内存,在业务中创建目标对象类型的业务对象;其中,多层级内存分配策略是基于控制内存回收的频率需求设置得到的,多层级内存分配策略用于定义在间隔参考时间内对内存池进行内存分配所采用的动态分配方式。不难看出,多层级内存分配策略是基于控制内存回收的频率需求设置得到的,这样可以使得业务运行过程中的内存回收频率可控,从而,可以降低内存回收频率,提升业务运行的稳定性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种业务处理系统的架构示意图;
图2是本申请实施例提供的一种业务处理方法的流程示意图;
图3是本申请实施例提供的一种周期性地内存回收示意图;
图4是本申请实施例提供的一种内存管理架构的示意图;
图5是本申请实施例提供的另一种内存管理架构的示意图;
图6是本申请实施例提供的一种动态控制对象池进行扩容处理的示意图;
图7是本申请实施例提供的一种动态控制对象池进行缩容处理的示意图;
图8是本申请实施例提供的另一种业务处理方法的流程示意图;
图9是本申请实施例提供的一种第一内存池的内存分配逻辑示意图;
图10是本申请实施例提供的一种第二内存池的内存分配逻辑示意图;
图11是本申请实施例提供的一种第二内存池的扩容控制示意图;
图12是本申请实施例提供的一种业务处理装置的结构示意图;
图13是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了能够更清楚地理解本申请实施例提供的技术方案,在此先对本申请实施例涉及的关键术语进行介绍。
(1)本申请实施例涉及业务。业务是指在运行过程中需要进行内存分配和内存回收的事务,本申请实施例不对业务的类型进行限定,业务可以包括但不限于以下任一种:游戏业务、在线社交业务、音视频点播业务以及人工智能业务。
其中,游戏是指一种电子游戏产品,电子游戏是指依托于电子设备平台而运行的交互游戏。从电子游戏与互联网的关系来看,电子游戏可以包括单机游戏或网络游戏。其中,网络游戏也可称为在线游戏,一般可以是指以互联网为传播媒介,以游戏服务器(GameServer)和玩家终端为游戏处理设备,以运行在玩家终端中的游戏客户端(Game Client)为信息交互窗口的,旨在实现娱乐、休闲、交流和取得虚拟成就的具有可持续性的个体性多玩家在线游戏;游戏客户端是指与游戏服务器相对应,为参与网络游戏的游戏玩家提供本地游戏服务的程序;游戏服务器是指为游戏客户端提供数据计算、校验、存储和转发功能的服务设备。单机游戏是指使用一台计算机或其他游戏平台便可以独立运行的电子游戏,单机游戏不需要游戏服务器便可以正常运行,也不需要互联网。
对于网络游戏,本申请实施例不对网络游戏的游戏类型进行限定;例如,网络游戏可以是云游戏,或者网络游戏可以是普通网络游戏。其中,普通网络游戏是指直接在玩家终端内安装的游戏客户端中运行的游戏。云游戏(Cloud Gaming)又可称为游戏点播(Gamingon Demand),是指在游戏服务器中运行的游戏;也就是说,在云游戏场景下,所有的云游戏都不在玩家终端的游戏客户端中运行,而是在游戏服务器中运行;游戏服务器将云游戏中的游戏画面、游戏音频压缩编码为媒体流,然后通过网络将媒体流传输给玩家终端中的游戏客户端进行图像显示和音频播放;可见,游戏客户端无需拥有强大的图形处理与数据运算能力,仅仅需要拥有基本的流媒体播放能力,与获取游戏玩家输入的操作指令并将游戏玩家输入的操作指令发送给游戏服务器的能力即可;当游戏玩家在游戏客户端的游戏界面中执行各种操作时,游戏客户端会将这些操作产生的操作数据上报给游戏服务器,由游戏服务器在对应的云游戏中根据操作数据而刷新云游戏的游戏画面,再将刷新后的游戏画面返回至游戏客户端中进行显示,以实现云游戏的游玩。也就是说,普通网络游戏和云游戏的区别在于,普通网络游戏运行在玩家终端内安装的游戏客户端中,而云游戏运行在游戏服务器中,游戏客户端负责呈现游戏画面、播放游戏音频以及接收游戏玩家输入的操作指令。
从电子游戏的呈现维度来看,电子游戏可以包括2D(2Dimensions,2维)游戏、2.5D(2.5Dimensions,2.5维)游戏或3D(3Dimensions,3维)游戏。2D游戏可以理解为是一种二维交互式动画,2D游戏中的美术资源都是以图形文件渲染而成的,2D游戏无法进行视角转换。3D游戏是使用空间立体计算技术实现操作的游戏,从编程实现角度来说,3D游戏中的游戏基础模型(例如,游戏角色、游戏场景以及游戏基础地形,等等)是使用三维立体模型实现的,3D游戏中的游戏角色控制是使用空间立体编程算法实现的。2.5D游戏介于2D游戏和3D游戏之间,通常是指使用2D游戏画面和3D游戏效果的游戏类型,通常在平面画面中添加了一些立体的元素。
特别地,在游戏业务中,游戏业务的内存分配和内存回收由游戏引擎中的虚拟机执行。游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件,这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用从零开始。虚拟机是指游戏引擎中用于执行游戏脚本的部分,作用是解释和执行游戏开发者编写的游戏脚本,从而实现游戏或应用程序中的逻辑、交互、动画等功能。本申请实施例不对游戏引擎的类型进行限定,例如,在3D游戏中,游戏引擎可以为Unity3D,Unity3D是由Unity Technologies(一家软件开发公司)开发的一个让游戏开发者轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台综合型游戏开发工具,是一个全面整合的专业游戏引擎;Unity3D中的虚拟机为C#(一种计算机编程语言)虚拟机,在Unity3D中,游戏开发者可以通过C#编写游戏脚本,C#虚拟机是Unity3D中负责执行C#脚本的部分,作用是解释和执行开发者编写的C#代码,从而实现游戏或应用程序中的逻辑、交互、动画等功能。
除游戏业务的其他业务中,在线社交业务是指用于进行在线社交的业务,在线社交是指不同的社交对象之间通过互联网进行消息交互,以实现在不同的社交对象之间进行社交。音视频点播业务是指用于进行音视频点播的业务,音视频点播是指响应于音视频播放请求,播放请求的音视频。人工智能(Artificial Intelligence,AI)业务是指用于提供人工智能服务的业务,人工智能是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。需要说明的是,本申请实施例以业务是游戏业务为例进行说明,其他业务中的内存分配和内存回收与游戏业务类似,可参见游戏业务的相关描述。
(2)本申请实施例涉及内存分配。内存分配是指在业务运行过程中,分配内存创建业务对象的过程,创建的业务对象可以用于存储业务在运行过程中所需的业务数据。以游戏业务为例,游戏在运行过程中需要创建业务对象存储游戏运行所需的渲染资源,游戏在运行过程中需要创建业务对象存储游戏玩家所需的通信数据,游戏在运行过程中需要创建业务对象存储玩法数据和玩家数据,等等。进一步地,内存分配具体是在指定内存中分配创建业务对象所需的内存,指定内存是从系统内存中划分出的一块内存,用于分配创建业务对象所需的内存,系统内存(也可以称为堆内存)是计算机设备的系统临时存储程序指令和数据的主要区域。
(3)本申请实施例涉及内存回收。内存回收是指在业务运行过程中回收业务中不再使用的业务对象所占用的内存。以游戏业务为例,渲染资源在进行游戏渲染便不再使用,可以回收用于存储渲染资源的业务对象所占用的内存;通信数据在游戏玩家查看后便不再使用,可以回收用于存储通信数据的业务对象所占用的内存;等等。内存回收可以存在多种算法,本申请实施例不对内存回收算法的类型进行限定,例如,内存回收算法可以是GC(Garbage Collection,垃圾回收)算法,GC是一种自动内存管理技术,用于回收程序中不再使用的内存空间。以业务是3D游戏为例,在Unity3D的C#虚拟机使用的GC算法是一种采用标记-清除策略的GC算法,在内存回收的标记阶段,算法会遍历所有的活动对象(即仍在使用的对象),并将它们标记为可达(reachable),在内存回收的清除阶段,对没有被标记的对象进行回收。
基于上述业务、内存分配以及内存释放等关键术语的相关描述,内存回收会暂停业务的运行过程,如果在业务的运行过程中频繁地触发内存回收,将会导致业务的运行过程受到影响,无法稳定地运行。以业务是游戏业务中的大型多人在线游戏为例,游戏中存在展示高清的游戏画面、多种玩法和大量游戏玩家同时在线的需求;为实现这样的效果和玩法,游戏需要加载大量美术资源、玩法数据和玩家数据,并频繁与游戏服务器通信,在这期间会不可避免的创建大量临时对象,进而频繁触发内存回收;流畅的画面和顺滑的操作是游戏的生命线,频繁触发内存回收造成的数百毫秒卡顿(卡顿是指在游戏过程中帧率突然下降,较短时间后恢复的现象)将严重影响玩家体验,破坏游戏的可玩性。
基于此,本申请实施例提出一种业务处理方法,该业务处理方法可以提供对象池,对象池可以包括预先创建好的不同对象类型的空对象,当业务中存在创建目标对象类型的业务对象的需求时,可以在对象池中查询属于目标对象类型的空对象作为目标对象类型的业务对象,通过设置对象池无需额外进行内存分配便可以创建业务对象,可以避免触发内存回收,这样可以降低内存回收频率,提升业务运行的稳定性。此外,业务可以按照间隔参考时间周期性地进行内存回收,间隔参考时间是指相邻两次内存回收之间的时间间隔;该业务处理方法在对象池中未查询到属于目标对象类型的空对象时,可以按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配内存,并基于分配的内存创建目标对象类型的业务对象;其中,多层级内存分配策略是基于控制内存回收的频率需求设置得到的,这样可以使得内存回收的频率可控,可以降低内存回收频率,提升业务运行的稳定性;并且,在每个内存回收周期内,在到达内存回收周期对应的内存回收时间之前,可以采用动态分配方式对内存池进行内存分配,从而避免触发内存回收,可以降低内存回收频率,提升业务运行的稳定性。特别地,在游戏业务中,本申请实施例提出的业务处理方法可以无缝集成至游戏引擎中,无缝集成至游戏引擎中是指本申请实施例提出的业务处理方法可以用于直接替代游戏引擎中的虚拟机原有的内存分配和内存回收方案。
下面结合附图,对本申请实施例提供的业务处理系统进行介绍,业务处理系统适于实现本申请实施例提供的业务处理方法。
如图1所示,业务处理系统可以包括终端101和服务器102,本申请实施例不对终端101和服务器102之间的连接方式进行限定,终端101和服务器102之间可以通过有线通信的方式建立直接的通信连接,或者,终端101和服务器102之间可以通过无线通信的方式建立间接的通信连接。其中:
终端101可以包括但不限于以下任一种:智能手机、平板电脑、笔记本电脑、台式计算机、智能手表、智能家电、智能车载终端、以及飞行器,等等。终端101中可以运行有业务客户端,本申请实施例不对业务客户端的类型进行限定,业务客户端可以包括以下任一种:业务应用程序、业务小程序、业务网页以及业务软件。
服务器102可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器,等等。服务器102与业务客户端对应,可以用于对业务客户端的顺利运行提供支撑。
在业务处理系统中,业务处理方法可以由终端101执行,也就是说,内存分配和内存回收可以由终端101执行。例如,对于游戏业务中的普通网络游戏,普通网络游戏直接在玩家终端内安装的游戏客户端中运行,可以由玩家终端进行内存分配和内存回收。
或者,在业务处理系统中,业务处理方法可以由服务器102执行,也就是说,内存分配和内存回收可以由服务器102执行。例如,对于游戏业务中的云游戏,云游戏在游戏服务器中运行,游戏服务器将云游戏中的游戏画面、游戏音频传输至游戏客户端中进行播放显示,可以由游戏服务器进行内存分配和内存回收。
可以理解的是,本申请实施例描述的业务处理系统是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着系统架构的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
下面结合附图,对本申请实施例提供的业务处理方法进行详细介绍。
本申请实施例提供一种业务处理方法,该业务处理方法主要介绍基于对象池的业务对象创建方式、对象池的扩容处理、对象池的缩容处理以及多层级内存分配策略的内存分配逻辑。该业务处理方法可以由计算机设备执行,计算机设备例如可以是图1所示的业务处理系统中的终端或服务器。如图2所示,该业务处理方法可以包括但不限于以下步骤S201-步骤S204:
S201,接收对象创建请求,对象创建请求用于请求在业务中创建目标对象类型的业务对象,目标对象类型的业务对象用于存储业务中属于目标对象类型的业务数据。
业务在运行过程中所需的业务数据可以存在多种类型,例如,在游戏业务中,游戏运行过程中所需的贴图、动画、特效以及通信数据等业务数据属于不同的类型;与之对应地,业务在运行过程中存在创建不同对象类型的业务对象的需求,不同对象类型的业务对象可以用于存储不同类型的业务数据,例如,贴图类型的业务对象可以用于存储贴图,动画类型的业务对象可以用于存储动画,特效类型的业务对象可以用于存储特效,通信类型的业务对象可以用于存储通信数据;也就是说,任一对象类型的业务对象可以用于存储属于该对象类型的业务数据,通过创建不同对象类型的业务对象,存储属于不同对象类型的业务数据,可以更好地满足不同业务数据的存储需求。在步骤S201中,在业务的运行过程中,可以接收对象创建请求,对象创建请求可以用于请求在业务中创建目标对象类型的业务对象,目标对象类型的业务对象可以用于存储属于目标对象类型的业务数据,目标对象类型可以是业务在运行过程涉及创建的任一种对象类型。
业务可以按照间隔参考时间周期性地进行内存回收,间隔参考时间是指相邻两次内存回收之间的时间间隔,内存回收是指回收业务中不再使用的业务对象所占用的内存。如图3所示,可以进一步理解为,业务每间隔一个间隔参考时间进行一次内存回收,每个间隔参考时间分别对应不同的内存回收周期,每个内存回收周期的截止时间可以作为每个内存回收周期对应的内存回收时间,也就是说,每个内存回收周期在到达每个内存回收周期的截止时间(即每个内存回收周期对应的内存回收时间)时进行内存回收,距离上一次内存回收的时间等于间隔参考时间时进行内存回收;并且,各个内存回收周期之间是连续的,此处的连续可以理解为,当前内存回收周期的开始时间与当前内存回收周期的上一内存回收周期的截止时间(即当前内存回收周期的上一内存回收周期对应的内存回收时间)重合,当前内存回收周期的下一内存回收周期的开始时间与当前内存回收周期的截止时间(即当前内存回收周期对应的内存回收时间)重合。
间隔参考时间的设置与内存回收频率相关,内存回收频率是指单位时间内进行内存回收的次数,间隔参考时间设置的越大,内存回收频率越低,间隔参考时间设置的越小,内存回收频率越高。间隔参考时间可以基于计算机设备的内存性能进行设置,计算机设备的内存性能是指计算机设备的内存容量;计算机设备的内存性能越高,可以将间隔参考时间设置为越大的数值,以降低内存回收频率;计算机设备的内存性能越低,可以将间隔参考时间设置为越小的数值,以提高内存回收频率。通过这种方式,可以使得内存回收频率与计算机设备的内存性能适配,将计算机设备的内存回收频率控制在与计算机设备的内存性能相适配的合适数值。
在介绍本申请实施例中步骤S202-步骤S204关于创建业务对象的相关内容之前,在此先结合图4和图5所示的内存管理架构,对本申请实施例中创建业务对象的整体逻辑进行介绍。正如前文所描述的,从系统内存中划分出的指定内存,可以用于分配创建业务对象所需的内存,指定内存可以被划分为三部分内存,第一部分内存可以用于创建对象池,第二部分内存可以作为第一内存池(也可以称为小内存池),第三部分内存可以作为第二内存池(也可以称为大内存池)。其中:
(1)对象池:
对象池可以是为业务运行过程中高频创建的业务对象所建立的,可以基于业务运行时内存使用的先验知识,为高频创建的对象类型预先创建一定数量的候选对象置于对象池中,通过为高频创建的对象类型建立对象池,可以在业务需要创建高频对象类型的业务对象时,直接使用对象池中预先创建好的候选对象,避免内存分配触发内存回收,降低内存回收频率。
对象池的建立过程可以理解为,可以获取业务运行时内存使用的先验知识,先验知识可以包括业务中创建各种对象类型的创建频率,可以将创建频率高于频率阈值(频率阈值可以根据经验值进行设置)的对象类型确定为参考对象类型,然后,针对每种参考对象类型,均可以创建一定数量的候选对象置于对象池中,为各种参考对象类型创建的候选对象数量可以相同的或者不相同。对于为各种参考对象类型创建的候选对象数量不相同的情况,例如,为各种参考对象类型创建的候选对象数量与各种参考对象类型的创建频率相关,创建频率越高的参考对象类型,为其创建的候选对象数量越多,创建频率越低的参考对象类型,为其创建的候选对象数量越少;通过这种方式,对于业务中创建需求越高的参考对象类型,预先创建的候选对象数量越多,这样可以更好地适应业务运行过程中对高频对象类型的业务对象的创建需求,当业务中需要创建多种参考对象类型的业务对象时,可以避免内存分配触发内存回收,降低内存回收频率。
其中,候选对象是指空对象,空对象可以理解为占用内存但未存储数据的对象。当业务中存在创建目标对象类型的业务对象的需求时,若对象池中存在属于目标对象类型的候选对象则可以直接返回,目标对象类型的业务对象在使用完毕后可以直接归还给对象池。对象池可以队列的形式存储各种参考对象类型的候选对象,每种参考对象类型的候选对象分别保存在各自的队列中;队列是一种特殊的线性表,特殊之处在于它至允许在表的前端进行删除操作,而在表的候选进行插入操作,也就是说,候选对象从队头取出,归还的候选对象会被放入队尾,这样可以提升对象池的多线程性能,对象池可以同时处理多个相同对象类型的业务对象的创建请求,或者可以同时处理多个不同对象类型的业务对象的创建请求。
另外,对象池在业务运行过程中可以按需进行扩容处理或缩容处理,如图5所示,扩容处理或缩容处理的时机,以及扩容处理或缩容处理的规模受动态开关的控制。扩容处理是指扩充对象池内存容量的操作,对象池在进行扩容处理后,可以创建更多参考对象类型的候选对象;缩容处理是指缩减对象池内存容量的操作,在进行缩容处理后,对象池需要删除掉各种参考对象类型中创建频率相对低的一部分参考对象类型的候选对象。
(2)第一内存池(小内存池):
内存池是一种内存管理技术,它预先在系统内存中分配一块连续的内存空间,用于存储大小相似的对象,内存池的目的是提高内存分配和回收性能,减少内存碎片,降低内存管理的开销,本申请实施例中内存池分为第一内存池和第二内存池,第一内存池和第二内存池可以用于处理不同内存量的对象创建请求,在此先对第一内存池进行介绍。第一内存池对应的内存申请粒度可以为16Byte(字节),第一内存池对应的内存申请粒度可以理解为第一内存池的内存申请单位,也就是说,向第一内存池申请的内存量是以内存申请粒度为单位进行计算的,向第一内存池申请的内存量是第一内存池对应内存申请粒度的整数倍。第一内存池可以覆盖0-2048Byte范围内的内存请求,也就是说,第一内存池允许申请的最大内存量(可以称为第一内存量)为2048Byte,第一内存池允许申请的最小内存量为0Byte。当对象池中不存在属于目标对象类型的业务对象,且对象创建请求所请求的内存量小于或等于第一内存量(即第一内存池允许申请的最大内存量)时,可以向第一内存池申请内存创建目标对象类型的业务对象。
如图5所示,第一内存池中可以包括多种内存类型(如图5所示的内存类型1-内存类型n)的内存池,每种内存类型的内存池可以用于处理属于每种内存类型的对象创建请求;其中,内存类型是根据不同对象类型的指针分布情况划分得到的,例如,存在引用的对象类型、存在被引用的对象类型、不存在引用的对象类型、以及不存在被引用的对象类型分别属于不同的内存类型。通过将第一内存池划分为不同内存类型的内存池,一方面,不同内存类型的内存池可以并行处理属于不同内存类型的对象创建请求,并行地进行内存分配,可以提升内存分配效率;另一方面,不同内存类型在内存回收的标记过程中执行不同的计算,不同内存类型有利于在内存回收的标记过程中进行区分。
当对象池中不存在目标对象类型的候选对象,且对象创建请求所请求的内存量不超过第一内存池允许申请的最大内存量(即2048Byte)时,可以向第一内存池请求分配内存,创建目标对象类型的业务对象。第一内存池的内存分配逻辑可以包括:首先,可以将对象创建请求所请求的内存量,向上对齐到第一内存池对应内存申请粒度(即16Byte)的整数倍;然后,在第一内存池中相应内存类型的内存池中匹配合适大小的可用内存,创建目标业务类型的业务对象;匹配过程中采用的策略受到动态开关的控制,依情况进行精准匹配或模糊匹配。
另外,在第一内存池中,相同大小的可用内存以链表的形式保存,不同大小链表的头结点数组构成了各个内存类型的内存池。链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接词序实现的。
(3)第二内存池(大内存池):
第二内存池对应的内存申请粒度可以为4096Byte,第二内存池对应的内存申请粒度可以理解为第二内存池的内存申请单位,也就是说,向第二内存池申请的内存量是以内存申请粒度为单位进行计算的,向第二内存池申请的内存量是第二内存池对应内存申请粒度的整数倍。与第一内存池类似,第二内存池中的可用内存以链表的形式进行保存。
第二内存池中的内存有两个用途。第二内存池的第一个用途是,当对象池中不存在属于目标对象类型的业务对象,且对象创建请求所请求的内存量大于第一内存量(即第一内存池允许申请的最大内存量)时,可以向第二内存池请求分配内存,创建目标对象类型的业务对象;第二内存池的内存分配逻辑可以包括:首先,可以将对象创建请求所请求的内存量,向上对齐到第二内存池对应内存申请粒度(即4096Byte)的整数倍,然后,在第二内存池中匹配合适大小的可用内存,创建目标业务类型的业务对象。第二内存池的第二个用途是,当第一内存池无法分配出所请求内存量的内存时,可以基于第二内存池对第一内存池进行扩容处理,第一内存池的扩容处理具体可以包括:从第二内存池取出一个内存块(内存块的内存量为第二内存池对应的内存申请粒度,即4096Byte),拆分后填充至第一内存池中;其中,第二个用途受到动态开关的控制,业务运行时是否能够拆分第二内存池,将由申请更多的系统内存与触发内存回收之间的优先级决定。
总的来说,本申请实施例在创建业务对象时,从对象池到第一内存池,再到第二内存池,自上而下逐渐尝试。创建业务对象的整体逻辑,可以包括:当业务中需要创建目标对象类型的业务对象时,可以在对象池中查询属于目标对象类型的候选对象作为目标对象类型的业务对象,若在对象池中查询到属于目标对象类型的候选对象,则可以直接将目标对象类型的候选对象作为目标对象类型的业务对象;若在对象池未查询到属于目标对象类型的候选对象,则可以根据对象创建请求所请求的内存量确定向第一内存池或第二内存池请求内存。若在第一内存池中无法分配出对象创建请求所请求内存量的内存,可以向第二内存池申请内存对第一内存池进行扩容处理。若在第二内存池中无法分配出对象创建请求所请求内存量的内存,可以向系统内存请求内存对第二内存池进行扩容处理。
基于上述对本申请实施例在创建业务对象时的整体逻辑介绍,下面结合步骤S202-步骤S204对创建业务对象的具体技术实现细节进行介绍。
S202,在对象池中查询属于目标对象类型的候选对象作为目标对象类型的业务对象,对象池包括预先创建好的不同对象类型的候选对象。
在步骤S202中,在接收到对象创建请求后,响应于对象创建请求,可以在对象池中查询属于目标对象类型的候选对象作为目标对象类型的业务对象,对象池中可以包括预先创建好的不同对象类型(具体是指前文提及的参考对象类型)的候选对象,参考对象类型是根据内存使用的先验知识确定的,在业务中创建频率高于频率阈值的对象类型。
若在对象池中未查询到属于目标对象类型的候选对象,可以对内存池进行扩容处理,尽管对象池具备更佳的性能和更低的内存回收压力,但对象池中某一对象类型的候选对象占用的内存过大时将挤占通用的内存空间,反而增加了全局内存回收压力,因此,需要借助动态开关控制对象池的扩容处理时机和扩容处理规模。此处的动态开关具体是指当前内存回收周期的上一内存回收周期的对象池扩容信息;上一内存回收周期的对象池扩容信息可以用于指示上一内存回收周期的对象池的扩容情况,扩容情况可以包括上一内存回收周期的对象池进行了扩容处理,或者,上一内存回收周期的对象池未进行扩容处理;若上一内存回收周期的对象池扩容信息指示上一内存回收周期的对象池进行了扩容处理,则上一内存回收周期的对象池扩容信息还可以包括上一内存回收周期的对象池扩容量,对象池扩容量是指上一内存回收周期的对象池扩容后增加的内存量。
在此情况下,如图6所示,动态开关控制对象池扩容处理的逻辑,可以包括:可以获取当前内存回收周期的上一内存回收周期的对象池扩容信息;若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期进行扩容处理,则可以获取当前内存回收周期的扩容内存量,扩容内存量是指在当前内存回收周期对对象池进行扩容处理后,能够使得对象池增加的内存量,扩容内存量可以是根据对象池扩容量计算得到的,例如,扩容内存量等于对象池扩容量与第一比例(例如,第一比例为50%)之间的乘积。然后,可以根据扩容内存量对对象池进行扩容处理,在扩容处理后,可以在扩容处理后的对象池中创建目标对象类型的候选对象作为目标对象类型的业务对象。若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期未进行扩容处理,则在到达当前内存回收周期对应的内存回收时间之前,可以按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存,还可以对上一内存回收周期的对象池扩容量进行记录。
基于动态开关对对象池的扩容处理控制逻辑,可以看出,上一内存回收周期的对象池扩容情况可以反应业务对对象池的使用需求,若上一内存回收周期的对象池进行了扩容处理,则可以说明业务对对象池的使用需求变高,可以按照业务对对象池的使用需求,对对象池进行扩容处理,而不是只要对象池中的候选对象不够用时便扩容处理,也不是保持对象池的容量永远不变,这样可以更好地适应业务对对象池的使用需求。并且,基于上一内存回收周期的对象池扩容量确定当前内存周期的对象池扩容量,可以按照使用需求适度地扩容对象池,而不是无限制地扩容内存池。
另外,考虑到创建频率高的对象类型不会在业务运行过程中始终保持一致,因此,对象池需要按需进行缩容处理,以动态地剔除掉对象池中创建频率变低的对象类型,以释放出更多可用内存。对象池的缩容处理时机和缩容处理规模可以借助动态开关控制,此处的动态开关具体是指当前内存回收周期的上一内存回收周期的对象池扩容信息;上一内存回收周期的对象池扩容信息可以用于指示上一内存回收周期的对象池的扩容情况,扩容情况可以包括上一内存回收周期的对象池进行了扩容处理,或者,上一内存回收周期的对象池未进行扩容处理。
在此情况下,如图7所示,动态开关控制对象池缩容处理的逻辑,可以包括:可以在当前内存回收周期进行内存回收之前,获取当前内存回收周期的上一内存回收周期的对象池扩容信息;若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期进行扩容处理,则可以保持当前内存回收周期中对象池的内存容量不变,不进行缩容处理;若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期未进行扩容处理,则可以对当前内存回收周期的对象池进行缩容处理。其中,缩容处理所缩减的内存量(可以称为缩容内存量)可以是根据当前内存回收周期中对象池的内存容量上限与当前内存回收周期中对象池的实际内存使用量确定的,当前内存回收周期中对象池的内存容量上限是指当前内存回收周期中对象池的总内存容量,当前内存回收周期中对象池的实际内存使用量是指当前内存回收周期在对象池中创建业务对象实际使用的内存量;例如,缩容内存量等于目标差值与第二比例(例如,第一比例为50%)之间的乘积,目标差值是当前内存回收周期中对象池的内存容量上限与当前内存回收周期中对象池的实际内存使用量之间的差值。
基于动态开关对对象池的扩容处理控制逻辑,可以看出,当前内存回收周期的上一内存回收周期的对象池扩容情况可以反应业务对对象池的使用需求,若上一内存回收周期的对象池未进行扩容,则可以说明业务对对象池的使用需求变低,可以按照业务对对象池的使用需求,对对象池进行缩容处理,这样可以更好地适应业务对对象池变低的使用需求。
并且,缩容处理所缩减的内存可以是对象池中缩减对象类型的候选对象所占用的内存,缩减对象类型是指在对象池包括的各种对象类型中创建频率变低的对象类型。具体来说,可以统计对象池中各种对象类型(具体是指参考对象类型)的创建频率,统计时间例如可以包括以下任一种:当前内存回收周期,与当前内存回收周期相邻的前序内存回收周期,以上两者(当前内存回收周期以及与当前内存回收周期相邻的前序内存回收周期)的组合周期,等等;然后,可以根据对象池中各种对象类型的创建频率,对对象池中的各种对象类型进行排序,可以根据缩容内存量,在各种对象类型中选择创建频率排列在最后一位或多位的对象类型作为缩减对象类型。可以看出,可以在业务对对象池的使用需求降低时,动态地剔除掉对象池中创建频率变低的对象类型,以释放出更多可用内存,这样可以更好地适应业务在存在创建业务对象的需求时对对象池的使用需求。
S203,若在对象池中未查询到属于目标对象类型的候选对象,且尚未到达当前内存回收周期对应的内存回收时间,则按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存。
在步骤S203中,若在对象池中未查询到属于目标对象类型的候选对象,且尚未到达内存回收周期对应的内存回收时间,且对象池未进行扩容处理,则可以按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存,多层级内存分配策略可以是基于控制内存回收的频率需求设置得到的,多层级内存分配策略可以用于定义在间隔参考时间内对内存池进行内存分配所采用的动态分配方式。
多层级内存分配策略包括多个层级的内存分配策略,多层级内存分配策略定义的动态分配方式是指在多个层级的内存分配策略中动态地选择一个层级的内存分配策略,并基于选择的内存分配策略在内存池中为目标对象类型的业务对象分配对象内存。多层级内存分配策略定义的动态分配方式可以包括以下任一种:逐渐升级的动态分配方式和多层级择优的动态分配方式。其中:
逐渐升级的动态分配方式是指基于层级顺序依次按照各个层级的内存分配策略,在内存池中为目标对象类型的业务对象分配对象内存;各个层级的内存分配策略中,低层级的内存分配策略优先尝试进行内存分配,若分配失败,则尝试更高层级的内存分配策略进行内存分配;各个层级的内存分配策略在进行内存分配的过程中,随着层级的逐渐升高,对内存的利用率逐渐降低,对内存的分配成功率逐渐升高,基于层级顺序依次按照各个层级的内存分配策略进行内存分配,可以优先考虑内存利用率,内存利用率触发内存回收的概率就会降低。多层级择优的动态分配方式是指按照每个层级的内存分配策略,在内存池中为目标对象类型的业务对象并行地进行分配内存,确定优先成功分配内存的目标内存分配策略,将目标内存分配策略所分配的内存确定为对象内存;也就是说,优先成功分配内存的目标内存分配策略是各个层级的内存分配策略中择优的内存分配策略;并行尝试各个层级的内存分配策略,而不是逐个尝试各个层级的内存分配策略,可以提升内存分配效率。需要说明的是,在逐渐升级的动态分配方式和多层级择优的动态分配方式中,多个层级的内存分配策略进行内存分配的方式是相同的。
进一步地,内存池可以包括第一内存池和第二内存池,第一内存池和第二内存池可以用于处理请求不同内存量的对象创建请求。具体来说,第一内存池允许申请的最大内存量为第一内存量,第二内存池允许申请的最大内存量为第二内存量,第二内存量大于第一内存量,创建目标业务类型的业务对象所需的内存量为目标内存量;当目标内存量小于或等于第一内存量时,可以在第一内存池中为目标对象类型的业务对象分配对象内存,当目标内存量大于第一内存量时,可以在第二内存池中为目标对象类型的业务对象分配对象内存。对应到逐渐升级的动态分配方式中,当目标内存量小于或等于第一内存量时,可以基于层级顺序依次按照各个层级的内存分配策略,在第一内存池中为目标对象类型的业务对象分配对象内存;当目标内存量大于第一内存量时,可以基于层级顺序依次按照各个层级的内存分配策略,在第二内存池中为目标对象类型的业务对象分配对象内存。对应到多层级择优的动态分配方式中,当目标内存量小于或等于第一内存量时,可以按照每个层级的内存分配策略,在第一内存池中为目标对象类型的业务对象并行地进行分配内存,确定优先成功分配内存的目标内存分配策略,将目标内存分配策略所分配的内存确定为对象内存;当目标内存量大于第一内存量时,可以按照每个层级的内存分配策略,在第二内存池中为目标对象类型的业务对象并行地进行分配内存,确定优先成功分配内存的目标内存分配策略,将目标内存分配策略所分配的内存确定为对象内存。
S204,基于对象内存,在业务中创建目标对象类型的业务对象。
在步骤S204中,在按照多层级内存分配策略在内存池中为目标对象类型的业务对象成功分配对象内存后,可以基于对象内存,在业务中创建目标对象类型的业务对象。
本申请实施例中,可以基于动态开关对对象池扩容处理的时机和规模进行控制,这样可以更好地适应业务对对象池的使用需求,适度地扩容对象池,而不是无限制地扩容内存池。类似地,可以基于动态开关对对象池缩容处理的时机和规模进行控制,这样可以更好地适应业务对对象池的使用需求,适度地缩小对象池的容量。多层级内存分配策略是基于控制内存回收的频率需求设置得到的,这样可以使得业务运行过程中的内存回收频率可控,从而,可以降低内存回收频率,提升业务运行的稳定性。
本申请实施例提供一种业务处理方法,该业务处理方法主要介绍针对小内存池(即第一内存池)的内存分配逻辑和针对大内存池(即第二内存池)的内存分配逻辑。该业务处理方法可以由计算机设备执行,计算机设备例如可以是图1所示的业务处理系统中的终端或服务器。如图8所示,该业务处理方法可以包括但不限于以下步骤S801-步骤S805:
S801,接收对象创建请求,对象创建请求用于请求在业务中创建目标对象类型的业务对象,目标对象类型的业务对象用于存储业务中属于目标对象类型的业务数据。
本申请实施例中步骤S801的执行过程与上述图2所示实施例中步骤S201的执行过程相同,具体执行过程可以参见上述图2所示实施例中步骤S201的相关描述,在此不再赘述。
S802,在对象池中查询属于目标对象类型的候选对象作为目标对象类型的业务对象,对象池包括预先创建好的不同对象类型的候选对象。
本申请实施例中,步骤S802的执行过程与上述图2所示实施例中步骤S202的执行过程相同,具体执行过程可以参见上述图2所示实施例中步骤S202的相关描述,在此不再赘述。
正如前文所描述的,多层级内存分配策略定义的动态分配方式可以包括逐渐升级的动态分配方式和多层级择优的动态分配方式中的任一种,下面结合步骤S803-步骤S804介绍逐渐升级的动态分配方式的内存分配过程。逐渐升级的动态分配方式和多层级择优的动态分配方式中各个层级的内存分配策略是相同的,多层级择优的动态分配方式中各个层级的内存分配策略的内存分配过程,具体可参见逐渐升级的动态分配方式中各个层级的内存分配策略的内存分配过程,本申请不在多层级择优的动态分配方式中赘述介绍。
S803,若在对象池中未查询到属于目标对象类型的候选对象,且尚未到达当前内存回收周期对应的内存回收时间,则若创建目标业务类型的业务对象所需的目标内存量小于或等于第一内存量,则基于层级顺序依次按照各个层级的内存分配策略,在第一内存池中为目标对象类型的业务对象分配对象内存。
在步骤S803中,第一内存池可以包括多种内存类型的内存池,基于优先级顺序依次按照各个层级的内存分配策略,在第一内存池中为目标对象类型的业务对象分配对象内存,可以包括:在多种内存类型中确定目标对象类型所属的目标内存类型;基于层级顺序依次按照各个层级的内存分配策略,在目标内存类型的内存池中为目标对象类型的业务对象分配对象内存。在第一内存池中,不同内存类型在内存回收的标记过程中执行不同的计算,因此,需要在目标对象类型所属的目标内存类型的内存池中,为目标对象类型的业务对象分配对象内存,这样有利于在内存回收的标记过程中对不同内存类型进行区分。
在第一内存池中为目标对象类型的业务对象分配对象内存时,各个层级的内存分配策略包括精准匹配策略、模糊匹配策略以及第一内存池扩容策略;其中,精准匹配策略的层级低于模糊匹配策略的层级,模糊匹配策略的层级低于第一内存池扩容策略的层级,在逐渐升级的动态分配方式中,可以优先尝试精准匹配策略进行内存分配,精准匹配策略内存分配失败,再尝试模糊匹配策略进行内存分配,模糊匹配策略内存分配失败,再尝试第一内存池扩容策略。基于层级顺序依次按照各个层级的内存分配策略,在目标内存类型的内存池中为目标对象类型的业务对象分配对象内存的过程,具体可以包括:
首先,可以按照第一内存池对应的内存申请粒度(即16Byte)对目标内存量进行对齐,得到参考内存量;此处的对齐具体是指将目标内存量向上对齐至第一内存池对应的内存申请粒度的整数倍,例如,目标内存量为154Byte,可以将目标内存量向上对齐至16Byte的10倍,得到参考内存量160Byte。其次,可以按照精准匹配策略,在目标内存类型的内存池中精准匹配内存量等于参考内存量的内存,作为对象内存;若精准匹配失败,则可以按照模糊匹配策略,基于参考内存量在目标内存类型的内存池中进行模糊匹配。然后,若模糊匹配失败,则可以对目标内存类型的内存池进行扩容处理,并按照精准匹配策略,在扩容处理后的目标内存类型的内存池中精准匹配内存量等于参考内存量的内存,作为对象内存。
在目标内存类型的内存池进行内存分配的过程中,模糊匹配策略可以包括模糊无损匹配策略和模糊有损匹配策略,模糊无损匹配策略的层级低于模糊有损匹配策略的层级,在逐渐升级的动态分配方式中,可以优先尝试模糊无损匹配策略进行内存分配,模糊无损匹配策略内存分配失败,再尝试模糊有损匹配策略进行内存分配。按照模糊匹配策略,基于参考内存量在目标内存类型的内存池中进行模糊匹配的过程,可以包括:按照模糊无损匹配策略,在目标内存类型的内存池中查询内存量等于第一匹配内存量的内存,第一匹配内存量是参考内存量的整数倍;若在目标内存类型的内存池中未查询到内存量等于第一匹配内存量的内存,则可以按照模糊有损匹配策略,在目标内存类型的内存池中查询内存量为第二匹配内存量的内存,第二匹配内存量是参考内存量的非整数倍;若在目标内存类型的内存池中未查询到内存量为第二匹配内存量的内存,则模糊匹配失败,需要对目标内存类型的内存池进行扩容处理。
其中,若在目标内存类型的内存池中查询到内存量等于第一匹配内存量的内存,则可以从第一匹配内存量的内存中,拆分出内存量等于参考内存量的内存作为对象内存,第一匹配内存量的内存中拆分后的剩余内存可以归还至目标内存类型的内存池中;例如,设参考内存量为x,在目标内存类型的内存池中查询到内存量等于3x的内存,可以将内存量为3x的内存拆分为内存量为x的内存和内存量为2x的内存,可以将内存量为x的内存作为对象内存,可以将内存量为2x的内存归还至目标内存类型的内存池中相应内存大小的链表中。类似地,若在目标内存类型的内存池中查询到内存量为第二匹配内存量的内存,可以从第二匹配内存量的内存中,拆分出内存量为参考内存量的内存作为对象内存,第一匹配内存量的内存中拆分后的剩余内存,可以被按照第一内存池对应的内存申请粒度进行对齐,对齐后归还至目标内存类型的内存池中,此处的对齐具体是指将剩余内存向下对齐至第一内存池对应的内存申请粒度的整数倍;例如,设参考内存量为160Byte,在目标内存类型的内存池中查询到内存量等于314Byte的内存,可以将内存量为314Byte的内存拆分为内存量为160Byte的内存和内存量为154Byte的内存,可以将内存量为160Byte的内存作为对象内存,可以将内存量为154Byte的内存向下对齐至16Byte的9倍,得到内存量为144Byte的内存归还至目标内存类型的内存池中相应内存大小的链表中。
在目标内存类型的内存池进行内存分配的过程中,对目标内存类型的内存池进行扩容处理,具体可以包括:可以向第二内存池中申请内存块,内存块的内存大小为第二内存池对应的内存申请粒度所指示的内存量,然后,可以将内存块拆分为内存量等于参考内存量的多个子内存块,将其中一个内存量等于参考内存量的子内存块作为对象内存,将剩余的子内存填充至目标内存类型的内存池中相应内存大小的链表中。
步骤S803在目标内存类型的内存池中进行内存分配时,各个层级的内存分配策略之间的升级受动态开关的控制,此处的动态开关是指间隔参考时间,若距离上一次内存回收的时间小于间隔参考时间,则可以说明未到达当前内存回收周期对应的内存回收时间,若距离上一次内存回收的时间等于间隔参考时间,则可以说明已到达当前内存回收周期对应的内存回收时间。动态开关的控制逻辑为在到达当前内存回收周期对应的内存回收时间之前,通过升级内存管理策略来避免触发内存回收。
如图9所示,在目标内存类型的内存池中进行内存分配时,动态开关的控制过程包括:若在对象池中未查询到属于目标对象类型的候选对象,且对象池未进行扩容处理,则可以优先尝试采用精准匹配策略进行内存分配;若精准匹配策略内存分配失败且未到达当前内存回收周期对应的内存回收时间,则可以尝试采用模糊无损匹配策略进行内存分配,若模糊无损匹配策略内存分配失败,则可以尝试采用模糊有损匹配策略进行内存分配,若模糊有损匹配策略内存分配失败,则可以采用第一内存池扩容策略对目标内存类型的内存池进行扩容处理,若扩容处理失败,则可以触发进行当前内存回收周期的内存回收;若精准匹配策略内存分配失败且已经到达当前内存回收周期对应的内存回收时间,则触发进行当前内存回收周期的内存回收。在进行当前内存回收周期的内存回收后,进入下一内存回收周期,重新在目标内存类型的内存池中进行内存分配。可以看出,在第一内存池中分配内存时,层级越低的内存分配策略的内存利用率越高,层级越高的内存分配策略的内存利用率越低,优先尝试层级低的内存分配策略,可以在保证一定内存分配成功率的前提下,尽可能地提升内存利用率。
S804,若目标内存量大于第一内存量,则基于层级顺序依次按照各个层级的内存分配策略,在第二内存池中为目标对象类型的业务对象分配对象内存。
在步骤S804中,在第二内存池中为目标对象类型的业务对象分配对象内存时,各个层级的内存分配策略包括小范围模糊匹配策略和大范围模糊匹配策略;其中,小范围模糊匹配策略的层级低于大范围模糊匹配策略的层级,在逐渐升级的动态分配方式中,可以优先尝试小范围模糊匹配策略进行内存分配,小范围模糊匹配策略内存分配失败,再尝试大范围模糊匹配策略进行内存分配。基于层级顺序依次按照各个层级的内存分配策略,在第二内存池中为目标对象类型的业务对象分配对象内存的过程,具体可以包括:
首先,可以按照第二内存池对应的内存申请粒度(即4096Byte)对目标内存量进行对齐,得到参考内存量;此处的对齐具体是指将目标内存量向上对齐至第二内存池对应的内存申请粒度的整数倍,例如,目标内存量为40956Byte,则可以将目标内存量向上对齐至4096Byte的10倍,得到参考内存量40960Byte。在对目标内存量进行对齐得到参考内存量后,可以按照小范围模糊匹配策略,在第二内存池中查询内存量属于第一内存量范围的内存;第一内存量范围可以是根据参考内存量确定,例如,设参考内存量为y,则第一内存量范围可以是[y,3y]。若在第二内存池中查询到内存量属于第一内存量范围的内存,则可以在属于第一内存量范围的内存中确定对象内存。其中,在属于第一内存量范围的内存中确定对象内存,可以包括:在属于第一内存量范围的内存中确定第一候选内存,第一候选内存是属于第一内存量范围的内存中,内存量与参考内存量最接近的内存;可以在第一候选内存中确定对象内存,具体可以直接将第一候选内存作为对象内存,或者,可以在第一候选内存中拆分出内存量等于参考内存量的内存作为对象内存。
其次,若在第二内存池中未查询到属于第一内存量范围的内存,则可以按照大范围模糊匹配策略,在第二内存池中查询内存量属于第二内存量范围的内存;第二内存量范围可以是根据参考内存量确定的,例如,设参考内存量为y,则第一内存量范围例如可以是[3y,5y],或者可以是[3y,10y],第二内存量范围大于第一内存量范围。若在第二内存池中查询到属于第一内存量范围的内存,则可以在属于第二内存量范围的内存中确定对象内存。其中,在属于第二内存量范围的内存中确定对象内存,可以包括:在属于第二内存量范围的内存中确定第二候选内存,第二候选内存是属于第二内存量范围的内存中,内存量与参考内存量最接近的内存;可以在第二候选内存中确定对象内存,具体可以在第二候选内存中拆分出内存量等于参考内存量的内存作为对象内存。与第一内存池类似,在第二内存池中分配内存时,层级越低的内存分配策略的内存利用率越高,层级越高的内存分配策略的内存利用率越低,优先尝试层级低的内存分配策略,可以在保证一定内存分配成功率的前提下,尽可能地提升内存利用率。
需要说明的是,在业务运行过程中,可能需要在第二内存池中申请较大内存创建业务对象,为了避免连续的较大内存被拆分后无法有效利用,尽量减少内存碎片,内存块的拆分将受到限制。内存块的拆分限制可以体现在未查询到内存量属于第一内存量范围的内存之后,若在第二内存池中未查询到内存量属于第一内存量范围的内存,则在按照大范围模糊匹配策略,在第二内存池中查询内存量属于第二内存量范围的内存之前,可以对第二内存池的剩余内存量进行检查,以确定第二内存池的剩余内存是否需要作为较大内存预留在第二内存池中,如果第二内存池的剩余内存需要作为较大内存预留在第二内存池中,则需要向系统内存申请内存对第二内存池进行扩容处理,如果第二内存池的剩余内存量还比较充足,暂时不需要作为较大内存预留在第二内存池中,则可以按照大范围模糊匹配策略,在第二内存池中查询内存量属于第二内存量范围的内存,将查询到的内存拆分后作为对象内存。
具体来说,如图10所示,若在第二内存池中未查询到内存量属于第一内存量范围的内存,则可以根据内存剩余阈值对第二内存池的剩余内存量进行检查;若检查结果指示第二内存池的剩余内存量大于或等于内存剩余阈值,则可以按照大范围模糊匹配策略,在第二内存池中查询内存量属于第二内存量范围的内存。否则,各个层级的内存分配策略还包括第二内存池扩容策略,若检查结果指示第二内存池的剩余内存量小于内存剩余阈值,或者,若在第二内存池中未查询内存量属于第二内存量范围的内存,则可以按照第二内存池扩容策略,对第二内存池进行扩容处理,在第二内存池扩容处理成功后,可以按照大范围模糊匹配策略,在第二内存池中查询内存量属于第二内存量范围的内存。其中,内存剩余阈值是根据指定内存的内存量确定的,指定内存是在当前内存回收周期的前序内存回收周期内申请的,指定内存的内存量大于内存量阈值(内存量阈值可以根据经验值确定),内存剩余阈值可以等于前序内存回收周期中指定内存的内存量的平均值;也就是说,可以将当前内存回收周期的前序内存回收周期中申请的大内存总量的平均值,确定为内存剩余阈值,并基于内存剩余阈值来确定当前内存回收周期内第二内存池中是否需要预留的大内存,当第二内存池的内存剩余量低于内存剩余阈值时,第二内存池中剩余内存的拆分将被限制,内存剩余阈值可以用于反映业务运行过程中对大内存的申请需求,这样可以使得当前内存周期内第二内存池中预留的大内存,能够更好地满足业务运行过程中对大内存的申请需求。
另外,对于部分内存有限的计算机设备,控制内存总量的优先级高于控制内存回收频率的优先级,因为需要保证内存有限的计算机设备不会出现OOM(Out Of Memory,因内存不足导致的系统错误),因此,在需要对第二内存池进行扩容处理时,可以通过动态开关控制是否允许第二内存池进行扩容处理。此处的动态开关可以包括间隔参考时间和紧急扩展开关;对于间隔参考时间,若距离上一次内存回收的时间小于间隔参考时间,则可以说明未到达当前内存回收周期对应的内存回收时间,若距离上一次内存回收的时间等于间隔参考时间,则可以说明已到达当前内存回收周期对应的内存回收时间;对于紧急扩展开关,是指用于指示允许或不允许对第二内存池进行扩容处理的内存扩展指示信息。如图11所示,动态开关控制第二内存池扩容处理的逻辑,可以包括:
当需要对第二内存池进行扩容处理时,在到达当前内存周期对应的内存回收时间之前,可以获取内存扩展指示信息;若内存扩展指示信息指示允许对第二内存池进行扩容处理(即紧急扩展开关处于开启状态),则可以从系统内存中申请内存对第二内存池进行扩容处理,若内存扩展指示信息指示不允许对第二内存池进行扩容处理(即紧急扩展开关处于关闭状态),则可以触发进行内存回收。若到达当前内存周期对应的内存回收时间,则可以触发进行内存回收。在进行当前内存回收周期的内存回收后,进入当前内存回收周期的下一内存回收周期,可以重新在第二内存池中进行内存分配。其中,紧急扩展开关(即内存扩展指示信息)可以是根据计算机设备的内存性能设定的,对于内存有限的计算机设备,可以将将紧急扩展开关设置为关(即设置内存扩展指示信息指示不允许对第二内存池进行扩容处理),当需要对第二内存池进行扩容处理时,可以优先控制计算机设备的内存总量,拒绝从系统内存中申请内存对第二内存池扩容,这样可以保证内存性能不高的计算机设备不会出现OOM。
S805,基于对象内存,在业务中创建目标对象类型的业务对象。
本申请实施例中步骤S805的执行过程与上述图2所示实施例中步骤S204的执行过程相同,具体执行过程可以参见上述图2所示实施例中步骤S204的相关描述,在此不再赘述。
本申请实施例中,多层级内存分配策略是基于控制内存回收的频率需求设置得到的,通过动态开关(具体是指间隔参考时间)的控制,可以使得在到达当前内存回收周期对应的内存回收时间之前,通过升级内存管理策略来避免触发内存回收,从而,可以降低内存回收频率,提升业务运行的稳定性。通过动态开关(此处的动态开关具体是指紧急扩展开关)的控制,可以使得在需要对第二内存池进行扩容处理时,内存性能不高的计算机设备优先控制计算机设备的内存容量,拒绝从系统内存中申请内存对第二内存池扩容,这样可以保证内存性能不高的计算机设备不会出现OOM。
上述详细阐述了本申请实施例的方法,为了便于更好地实施本申请实施例的上述方案,相应地,下面提供了本申请实施例的装置。
请参见图12,图12是本申请实施例提供的一种业务处理装置的结构示意图,该业务处理装置可以设置于本申请实施例提供的计算机设备中,计算机设备例如可以是图1所示的业务处理系统中的终端或服务器。图12所示的业务处理装置可以是运行于计算机设备中的一个计算机程序,该业务处理装置可以用于执行图2或图8所示的方法实施例中的部分或全部步骤。请参见图12,该业务处理装置可以包括如下单元:
获取单元1201,用于接收对象创建请求,对象创建请求用于请求在业务中创建目标对象类型的业务对象,目标对象类型的业务对象用于存储业务中属于目标对象类型的业务数据;业务按照间隔参考时间周期性地进行内存回收,间隔参考时间是指相邻两次内存回收之间的时间间隔;内存回收是指回收业务中不再使用的业务对象所占用的内存;
处理单元1202,用于在对象池中查询属于目标对象类型的候选对象作为目标对象类型的业务对象;对象池包括预先创建好的不同对象类型的候选对象;
处理单元1202,还用于若在对象池中未查询到属于目标对象类型的候选对象,且尚未到达当前内存回收周期对应的内存回收时间,则按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存;多层级内存分配策略是基于控制内存回收的频率需求设置得到的,多层级内存分配策略用于定义在间隔参考时间内对内存池进行内存分配所采用的动态分配方式;
处理单元1202,还用于基于对象内存,在业务中创建目标对象类型的业务对象。
在一种实现方式中,多层级内存分配策略包括多个层级的内存分配策略;处理单元1202,用于按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行以下任一种:
基于层级顺序依次按照各个层级的内存分配策略,在内存池中为目标对象类型的业务对象分配对象内存;
按照每个层级的内存分配策略,在内存池中为目标对象类型的业务对象并行地进行分配内存,在多个层级的内存分配策略中确定优先成功分配内存的目标内存分配策略,将目标内存分配策略所分配的内存确定为对象内存。
在一种实现方式中,内存池包括第一内存池和第二内存池,第一内存池允许申请的最大内存量为第一内存量,第二内存池允许申请的最大内存量为第二内存量,第二内存量大于第一内存量;创建目标对象类型的业务对象所需的内存量为目标内存量;
处理单元1202,用于基于层级顺序依次按照各个层级的内存分配策略,在内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行如下步骤:
若目标内存量小于或等于第一内存量,则基于层级顺序依次按照各个层级的内存分配策略,在第一内存池中为目标对象类型的业务对象分配对象内存;
若目标内存量大于第一内存量,则基于层级顺序依次按照各个层级的内存分配策略,在第二内存池中为目标对象类型的业务对象分配对象内存。
在一种实现方式中,第一内存池包括多种内存类型的内存池;处理单元1202,用于基于层级顺序依次按照各个层级的内存分配策略,在第一内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行如下步骤:
在多种内存类型中确定目标对象类型所属的目标内存类型;
基于层级顺序依次按照各个层级的内存分配策略,在目标内存类型的内存池中为目标对象类型的业务对象分配对象内存。
在一种实现方式中,当在第一内存池中为目标对象类型的业务对象分配对象内存时,各个层级的内存分配策略包括精准匹配策略、模糊匹配策略以及第一内存池扩容策略;其中,精准匹配策略的层级低于模糊匹配策略的层级,模糊匹配策略的层级低于第一内存池扩容策略的层级;
处理单元1202,用于基于层级顺序依次按照各个层级的内存分配策略,在目标内存类型的内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行如下步骤:
按照第一内存池对应的内存申请粒度对目标内存量进行对齐,得到参考内存量;
按照精准匹配策略,在目标内存类型的内存池中精准匹配内存量等于参考内存量的内存,作为对象内存;
若精准匹配失败,则按照模糊匹配策略,基于参考内存量在目标内存类型的内存池中进行模糊匹配;
若模糊匹配失败,则对目标内存类型的内存池进行扩容处理,并按照精准匹配策略,在扩容处理后的目标内存类型的内存池中精准匹配内存量等于参考内存量的内存,作为对象内存。
在一种实现方式中,模糊匹配策略包括模糊无损匹配策略和模糊有损匹配策略,模糊无损匹配策略的层级低于模糊有损匹配策略的层级;处理单元1202,用于按照模糊匹配策略,基于参考内存量在目标内存类型的内存池中进行模糊匹配时,具体用于执行如下步骤:
按照模糊无损匹配策略,在目标内存类型的内存池中查询内存量等于第一匹配内存量的内存,第一匹配内存量是参考内存量的整数倍;
若在目标内存类型的内存池中未查询到内存量等于第一匹配内存量的内存,则按照模糊有损匹配策略,在目标内存类型的内存池中查询内存量为第二匹配内存量的内存,第二匹配内存量是参考内存量的非整数倍;
若在目标内存类型的内存池中未查询到内存量为第二匹配内存量的内存,则确定模糊匹配失败。
在一种实现方式中,处理单元1202,还用于执行如下步骤:
若目标内存类型的内存池中存在内存量等于第一匹配内存量的内存,则从第一匹配内存量的内存中,拆分出内存量等于参考内存量的内存作为对象内存;
若目标内存类型的内存池中存在内存量等于第二匹配内存量的内存,则从第二匹配内存量的内存中,拆分出内存量等于参考内存量的内存作为对象内存;其中,第二匹配内存量的内存中拆分后的剩余内存,被按照第一内存池对应的内存申请粒度进行对齐。
在一种实现方式中,当在第二内存池中为目标对象类型的业务对象分配对象内存时,各个层级的内存分配策略包括小范围模糊匹配策略和大范围模糊匹配策略;其中,小范围模糊匹配策略的层级低于大范围模糊匹配策略的层级;
处理单元1202,用于基于层级顺序依次按照各个层级的内存分配策略,在第二内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行如下步骤:
按照第二内存池对应的内存申请粒度对目标内存量进行对齐,得到参考内存量;
按照小范围模糊匹配策略,在第二内存池中查询内存量属于第一内存量范围的内存,第一内存量范围是根据参考内存量确定;
若在第二内存池中未查询到内存量属于第一内存量范围的内存,则根据内存剩余阈值对第二内存池的剩余内存量进行检查;内存剩余阈值是根据指定内存的内存量确定的,指定内存是在当前内存回收周期的前序内存回收周期内申请的,指定内存的内存量大于内存量阈值;
若检查结果指示第二内存池的剩余内存量大于或等于内存剩余阈值,则按照大范围模糊匹配策略,在第二内存池中查询内存量属于第二内存量范围的内存,第二内存量范围是根据参考内存量确定的,第二内存量范围大于第一内存量范围;
若在第二内存池中查询到内存量属于第二内存量范围的内存,则在属于第二内存量范围的内存中确定对象内存。
在一种实现方式中,处理单元1202,还用于执行如下步骤:
若在第二内存池中查询到内存量属于第一内存量范围的内存,则在属于第一内存量范围的内存中确定对象内存;
其中,在属于第一内存量范围的内存中确定对象内存,包括:在属于第一内存量范围的内存中确定第一候选内存,第一候选内存是属于第一内存量范围的内存中,内存量与参考内存量最接近的内存;以及,在第一候选内存中确定对象内存;
在属于第二内存量范围的内存中确定对象内存,包括:在属于第二内存量范围的内存中确定第二候选内存,第二候选内存是属于第二内存量范围的内存中,内存量与参考内存量最接近的内存;以及,在第二候选内存中确定对象内存。
在一种实现方式中,各个层级的内存分配策略还包括第二内存池扩容策略;处理单元1202,还用于执行如下步骤:
若检查结果指示第二内存池的剩余内存量小于内存剩余阈值,或者,若在第二内存池中未查询到内存量属于第二内存量范围的内存,则按照第二内存池扩容策略,对第二内存池进行扩容处理;
按照大范围模糊匹配策略,在扩容处理后的第二内存池中查询内存量属于第二内存量范围的内存。
在一种实现方式中,处理单元1202,用于按照第二内存池扩容策略,对第二内存池进行扩容处理时,具体用于执行如下步骤:
在到达当前内存回收周期对应的内存回收时间之前,获取内存扩展指示信息;
若内存扩展指示信息指示允许对第二内存池进行扩容处理,则从系统内存中申请内存对第二内存池进行扩容处理。
在一种实现方式中,处理单元1202,还用于执行如下步骤:
获取当前内存回收周期的上一内存回收周期的对象池扩容信息;
若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期未进行扩容处理,则在到达当前内存回收周期对应的内存回收时间之前,触发执行按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存的步骤;
若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期进行扩容处理,则获取当前内存回收周期的扩容内存量,根据扩容内存量对对象池进行扩容处理,并在扩容处理后的对象池中创建目标对象类型的候选对象作为目标对象类型的业务对象。
在一种实现方式中,处理单元1202,还用于执行如下步骤:
在当前内存回收周期进行内存回收之前,获取当前内存回收周期的上一内存回收周期的对象池扩容信息;
若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期进行扩容处理,则保持当前内存回收周期的对象池不变;
若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期未进行扩容处理,则对当前内存回收周期的对象池进行缩容处理。
根据本申请的另一个实施例,图12所示的业务处理装置中的各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本申请的实施例的技术效果的实现。上述单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以由多个单元来实现,或者多个单元的功能由一个单元实现。在本申请的其它实施例中,业务处理装置也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。
根据本申请的另一个实施例,可以通过在包括中央处理单元(CPU)、随机存取存储介质(RAM)、只读存储介质(ROM)等处理元件和存储元件的例如计算机的通用计算设备上运行能够执行如图2或图8所示的部分或全部方法所涉及的各步骤的计算机程序,来构造如图12中所示的业务处理装置,以及来实现本申请实施例的业务处理方法。计算机程序可以记载于例如计算机可读存储介质上,并通过计算机可读存储介质装载于上述计算设备中,并在其中运行。
本申请实施例中,业务可以按照间隔参考时间周期性地进行内存回收,间隔参考时间是指相邻两次内存回收之间的时间间隔。当需要在业务中创建目标对象类型的业务对象时,可以在在对象池中查询属于目标对象类型的候选对象作为目标对象类型的业务对象;若在对象池中未查询到属于目标对象类型的候选对象,且尚未到达当前内存回收周期对应的内存回收时间,则可以按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存,并基于分配的对象内存,在业务中创建目标对象类型的业务对象;其中,多层级内存分配策略是基于控制内存回收的频率需求设置得到的,多层级内存分配策略用于定义在间隔参考时间内对内存池进行内存分配所采用的动态分配方式。不难看出,多层级内存分配策略是基于控制内存回收的频率需求设置得到的,这样可以使得业务运行过程中的内存回收频率可控,从而,可以降低内存回收频率,提升业务运行的稳定性。
基于上述方法以及装置实施例,本申请实施例提供了一种计算机设备。请参见图13,图13是本申请实施例提供的一种计算机设备的结构示意图。图13所示的计算机设备至少包括处理器1301、输入接口1302、输出接口1303以及计算机可读存储介质1304。其中,处理器1301、输入接口1302、输出接口1303以及计算机可读存储介质1304可通过总线或其他方式连接。
计算机可读存储介质1304可以存储在计算机设备的存储器中,计算机可读存储介质1304用于存储计算机程序,计算机程序包括计算机指令,处理器1301用于执行计算机可读存储介质1304存储的计算机程序。处理器1301(或称CPU(Central Processing Unit,中央处理器))是计算机设备的计算核心以及控制核心,其适于实现计算机程序,具体适于加载并执行计算机程序从而实现相应方法流程或相应功能。
本申请实施例还提供了一种计算机可读存储介质(Memory),计算机可读存储介质是计算机设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机可读存储介质既可以包括计算机设备中的内置存储介质,当然也可以包括计算机设备支持的扩展存储介质。计算机可读存储介质提供存储空间,该存储空间存储了计算机设备的操作系统。并且,在该存储空间中还存放了适于被处理器加载并执行的计算机程序。需要说明的是,此处的计算机可读存储介质可以是高速RAM存储器,也可以是非不稳定的存储器(Non-VolatileMemory),例如至少一个磁盘存储器;可选的还可以是至少一个位于远离前述处理器的计算机可读存储介质。
计算机设备例如可以是图1所示的业务处理系统中的终端或服务器,具体实现中,可由处理器1301加载并执行计算机可读存储介质1304中存放的计算机程序,以实现上述有关图2或图8所示的业务处理方法中的相应步骤。具体实现中,计算机可读存储介质1304中的计算机程序由处理器1301加载并执行如下步骤:
接收对象创建请求,对象创建请求用于请求在业务中创建目标对象类型的业务对象,目标对象类型的业务对象用于存储业务中属于目标对象类型的业务数据;业务按照间隔参考时间周期性地进行内存回收,间隔参考时间是指相邻两次内存回收之间的时间间隔;内存回收是指回收业务中不再使用的业务对象所占用的内存;
在对象池中查询属于目标对象类型的候选对象作为目标对象类型的业务对象;对象池包括预先创建好的不同对象类型的候选对象;
若在对象池中未查询到属于目标对象类型的候选对象,且尚未到达当前内存回收周期对应的内存回收时间,则按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存;多层级内存分配策略是基于控制内存回收的频率需求设置得到的,多层级内存分配策略用于定义在间隔参考时间内对内存池进行内存分配所采用的动态分配方式;
基于对象内存,在业务中创建目标对象类型的业务对象。
在一种实现方式中,多层级内存分配策略包括多个层级的内存分配策略;计算机可读存储介质1304中的计算机程序由处理器1301加载并执行按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行以下任一种:
基于层级顺序依次按照各个层级的内存分配策略,在内存池中为目标对象类型的业务对象分配对象内存;
按照每个层级的内存分配策略,在内存池中为目标对象类型的业务对象并行地进行分配内存,在多个层级的内存分配策略中确定优先成功分配内存的目标内存分配策略,将目标内存分配策略所分配的内存确定为对象内存。
在一种实现方式中,内存池包括第一内存池和第二内存池,第一内存池允许申请的最大内存量为第一内存量,第二内存池允许申请的最大内存量为第二内存量,第二内存量大于第一内存量;创建目标对象类型的业务对象所需的内存量为目标内存量;
计算机可读存储介质1304中的计算机程序由处理器1301加载并执行基于层级顺序依次按照各个层级的内存分配策略,在内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行如下步骤:
若目标内存量小于或等于第一内存量,则基于层级顺序依次按照各个层级的内存分配策略,在第一内存池中为目标对象类型的业务对象分配对象内存;
若目标内存量大于第一内存量,则基于层级顺序依次按照各个层级的内存分配策略,在第二内存池中为目标对象类型的业务对象分配对象内存。
在一种实现方式中,第一内存池包括多种内存类型的内存池;计算机可读存储介质1304中的计算机程序由处理器1301加载并执行基于层级顺序依次按照各个层级的内存分配策略,在第一内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行如下步骤:
在多种内存类型中确定目标对象类型所属的目标内存类型;
基于层级顺序依次按照各个层级的内存分配策略,在目标内存类型的内存池中为目标对象类型的业务对象分配对象内存。
在一种实现方式中,当在第一内存池中为目标对象类型的业务对象分配对象内存时,各个层级的内存分配策略包括精准匹配策略、模糊匹配策略以及第一内存池扩容策略;其中,精准匹配策略的层级低于模糊匹配策略的层级,模糊匹配策略的层级低于第一内存池扩容策略的层级;
计算机可读存储介质1304中的计算机程序由处理器1301加载并执行基于层级顺序依次按照各个层级的内存分配策略,在目标内存类型的内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行如下步骤:
按照第一内存池对应的内存申请粒度对目标内存量进行对齐,得到参考内存量;
按照精准匹配策略,在目标内存类型的内存池中精准匹配内存量等于参考内存量的内存,作为对象内存;
若精准匹配失败,则按照模糊匹配策略,基于参考内存量在目标内存类型的内存池中进行模糊匹配;
若模糊匹配失败,则对目标内存类型的内存池进行扩容处理,并按照精准匹配策略,在扩容处理后的目标内存类型的内存池中精准匹配内存量等于参考内存量的内存,作为对象内存。
在一种实现方式中,模糊匹配策略包括模糊无损匹配策略和模糊有损匹配策略,模糊无损匹配策略的层级低于模糊有损匹配策略的层级;计算机可读存储介质1304中的计算机程序由处理器1301加载并执行按照模糊匹配策略,基于参考内存量在目标内存类型的内存池中进行模糊匹配时,具体用于执行如下步骤:
按照模糊无损匹配策略,在目标内存类型的内存池中查询内存量等于第一匹配内存量的内存,第一匹配内存量是参考内存量的整数倍;
若在目标内存类型的内存池中未查询到内存量等于第一匹配内存量的内存,则按照模糊有损匹配策略,在目标内存类型的内存池中查询内存量为第二匹配内存量的内存,第二匹配内存量是参考内存量的非整数倍;
若在目标内存类型的内存池中未查询到内存量为第二匹配内存量的内存,则确定模糊匹配失败。
在一种实现方式中,计算机可读存储介质1304中的计算机程序由处理器1301加载并还用于执行如下步骤:
若目标内存类型的内存池中存在内存量等于第一匹配内存量的内存,则从第一匹配内存量的内存中,拆分出内存量等于参考内存量的内存作为对象内存;
若目标内存类型的内存池中存在内存量等于第二匹配内存量的内存,则从第二匹配内存量的内存中,拆分出内存量等于参考内存量的内存作为对象内存;其中,第二匹配内存量的内存中拆分后的剩余内存,被按照第一内存池对应的内存申请粒度进行对齐。
在一种实现方式中,当在第二内存池中为目标对象类型的业务对象分配对象内存时,各个层级的内存分配策略包括小范围模糊匹配策略和大范围模糊匹配策略;其中,小范围模糊匹配策略的层级低于大范围模糊匹配策略的层级;
计算机可读存储介质1304中的计算机程序由处理器1301加载并执行基于层级顺序依次按照各个层级的内存分配策略,在第二内存池中为目标对象类型的业务对象分配对象内存时,具体用于执行如下步骤:
按照第二内存池对应的内存申请粒度对目标内存量进行对齐,得到参考内存量;
按照小范围模糊匹配策略,在第二内存池中查询内存量属于第一内存量范围的内存,第一内存量范围是根据参考内存量确定;
若在第二内存池中未查询到内存量属于第一内存量范围的内存,则根据内存剩余阈值对第二内存池的剩余内存量进行检查;内存剩余阈值是根据指定内存的内存量确定的,指定内存是在当前内存回收周期的前序内存回收周期内申请的,指定内存的内存量大于内存量阈值;
若检查结果指示第二内存池的剩余内存量大于或等于内存剩余阈值,则按照大范围模糊匹配策略,在第二内存池中查询内存量属于第二内存量范围的内存,第二内存量范围是根据参考内存量确定的,第二内存量范围大于第一内存量范围;
若在第二内存池中查询到内存量属于第二内存量范围的内存,则在属于第二内存量范围的内存中确定对象内存。
在一种实现方式中,计算机可读存储介质1304中的计算机程序由处理器1301加载并还用于执行如下步骤:
若在第二内存池中查询到内存量属于第一内存量范围的内存,则在属于第一内存量范围的内存中确定对象内存;
其中,在属于第一内存量范围的内存中确定对象内存,包括:在属于第一内存量范围的内存中确定第一候选内存,第一候选内存是属于第一内存量范围的内存中,内存量与参考内存量最接近的内存;以及,在第一候选内存中确定对象内存;
在属于第二内存量范围的内存中确定对象内存,包括:在属于第二内存量范围的内存中确定第二候选内存,第二候选内存是属于第二内存量范围的内存中,内存量与参考内存量最接近的内存;以及,在第二候选内存中确定对象内存。
在一种实现方式中,各个层级的内存分配策略还包括第二内存池扩容策略;计算机可读存储介质1304中的计算机程序由处理器1301加载并还用于执行如下步骤:
若检查结果指示第二内存池的剩余内存量小于内存剩余阈值,或者,若在第二内存池中未查询到内存量属于第二内存量范围的内存,则按照第二内存池扩容策略,对第二内存池进行扩容处理;
按照大范围模糊匹配策略,在扩容处理后的第二内存池中查询内存量属于第二内存量范围的内存。
在一种实现方式中,计算机可读存储介质1304中的计算机程序由处理器1301加载并执行按照第二内存池扩容策略,对第二内存池进行扩容处理时,具体用于执行如下步骤:
在到达当前内存回收周期对应的内存回收时间之前,获取内存扩展指示信息;
若内存扩展指示信息指示允许对第二内存池进行扩容处理,则从系统内存中申请内存对第二内存池进行扩容处理。
在一种实现方式中,计算机可读存储介质1304中的计算机程序由处理器1301加载并还用于执行如下步骤:
获取当前内存回收周期的上一内存回收周期的对象池扩容信息;
若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期未进行扩容处理,则在到达当前内存回收周期对应的内存回收时间之前,触发执行按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存的步骤;
若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期进行扩容处理,则获取当前内存回收周期的扩容内存量,根据扩容内存量对对象池进行扩容处理,并在扩容处理后的对象池中创建目标对象类型的候选对象作为目标对象类型的业务对象。
在一种实现方式中,计算机可读存储介质1304中的计算机程序由处理器1301加载并还用于执行如下步骤:
在当前内存回收周期进行内存回收之前,获取当前内存回收周期的上一内存回收周期的对象池扩容信息;
若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期进行扩容处理,则保持当前内存回收周期的对象池不变;
若上一内存回收周期的对象池扩容信息指示对象池在上一内存回收周期未进行扩容处理,则对当前内存回收周期的对象池进行缩容处理。
本申请实施例中,业务可以按照间隔参考时间周期性地进行内存回收,间隔参考时间是指相邻两次内存回收之间的时间间隔。当需要在业务中创建目标对象类型的业务对象时,可以在在对象池中查询属于目标对象类型的候选对象作为目标对象类型的业务对象;若在对象池中未查询到属于目标对象类型的候选对象,且尚未到达当前内存回收周期对应的内存回收时间,则可以按照多层级内存分配策略在内存池中为目标对象类型的业务对象分配对象内存,并基于分配的对象内存,在业务中创建目标对象类型的业务对象;其中,多层级内存分配策略是基于控制内存回收的频率需求设置得到的,多层级内存分配策略用于定义在间隔参考时间内对内存池进行内存分配所采用的动态分配方式。不难看出,多层级内存分配策略是基于控制内存回收的频率需求设置得到的,这样可以使得业务运行过程中的内存回收频率可控,从而,可以降低内存回收频率,提升业务运行的稳定性。
根据本申请的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行上述各种可选方式中提供的业务处理方法。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (17)
1.一种业务处理方法,其特征在于,包括:
接收对象创建请求,所述对象创建请求用于请求在业务中创建目标对象类型的业务对象,所述目标对象类型的业务对象用于存储所述业务中属于所述目标对象类型的业务数据;所述业务按照间隔参考时间周期性地进行内存回收,所述间隔参考时间是指相邻两次内存回收之间的时间间隔;所述内存回收是指回收所述业务中不再使用的业务对象所占用的内存;
在对象池中查询属于所述目标对象类型的候选对象作为所述目标对象类型的业务对象;所述对象池包括预先创建好的不同对象类型的候选对象;
若在所述对象池中未查询到属于所述目标对象类型的候选对象,且尚未到达当前内存回收周期对应的内存回收时间,则按照多层级内存分配策略在内存池中为所述目标对象类型的业务对象分配对象内存;所述多层级内存分配策略是基于控制内存回收的频率需求设置得到的,所述多层级内存分配策略用于定义在所述间隔参考时间内对所述内存池进行内存分配所采用的动态分配方式;
基于所述对象内存,在所述业务中创建所述目标对象类型的业务对象。
2.如权利要求1所述的方法,其特征在于,所述多层级内存分配策略包括多个层级的内存分配策略;所述按照多层级内存分配策略在内存池中为所述目标对象类型的业务对象分配对象内存,包括以下任一种:
基于层级顺序依次按照所述各个层级的内存分配策略,在所述内存池中为所述目标对象类型的业务对象分配所述对象内存;
按照每个层级的内存分配策略,在所述内存池中为所述目标对象类型的业务对象并行地进行分配内存,在所述多个层级的内存分配策略中确定优先成功分配内存的目标内存分配策略,将所述目标内存分配策略所分配的内存确定为所述对象内存。
3.如权利要求2所述的方法,其特征在于,所述内存池包括第一内存池和第二内存池,所述第一内存池允许申请的最大内存量为第一内存量,所述第二内存池允许申请的最大内存量为第二内存量,所述第二内存量大于所述第一内存量;创建所述目标对象类型的业务对象所需的内存量为目标内存量;
所述基于层级顺序依次按照所述各个层级的内存分配策略,在所述内存池中为所述目标对象类型的业务对象分配所述对象内存,包括:
若所述目标内存量小于或等于所述第一内存量,则基于层级顺序依次按照所述各个层级的内存分配策略,在所述第一内存池中为所述目标对象类型的业务对象分配所述对象内存;
若所述目标内存量大于所述第一内存量,则基于层级顺序依次按照所述各个层级的内存分配策略,在所述第二内存池中为所述目标对象类型的业务对象分配所述对象内存。
4.如权利要求3所述的方法,其特征在于,所述第一内存池包括多种内存类型的内存池;所述基于层级顺序依次按照所述各个层级的内存分配策略,在所述第一内存池中为所述目标对象类型的业务对象分配所述对象内存,包括:
在所述多种内存类型中确定所述目标对象类型所属的目标内存类型;
基于层级顺序依次按照所述各个层级的内存分配策略,在所述目标内存类型的内存池中为所述目标对象类型的业务对象分配所述对象内存。
5.如权利要求4所述的方法,其特征在于,当在所述第一内存池中为所述目标对象类型的业务对象分配所述对象内存时,所述各个层级的内存分配策略包括精准匹配策略、模糊匹配策略以及第一内存池扩容策略;其中,所述精准匹配策略的层级低于所述模糊匹配策略的层级,所述模糊匹配策略的层级低于所述第一内存池扩容策略的层级;
所述基于层级顺序依次按照所述各个层级的内存分配策略,在所述目标内存类型的内存池中为所述目标对象类型的业务对象分配所述对象内存,包括:
按照所述第一内存池对应的内存申请粒度对所述目标内存量进行对齐,得到参考内存量;
按照所述精准匹配策略,在所述目标内存类型的内存池中精准匹配内存量等于所述参考内存量的内存,作为所述对象内存;
若精准匹配失败,则按照所述模糊匹配策略,基于所述参考内存量在所述目标内存类型的内存池中进行模糊匹配;
若模糊匹配失败,则对所述目标内存类型的内存池进行扩容处理,并按照所述精准匹配策略,在扩容处理后的所述目标内存类型的内存池中精准匹配内存量等于所述参考内存量的内存,作为所述对象内存。
6.如权利要求5所述的方法,其特征在于,所述模糊匹配策略包括模糊无损匹配策略和模糊有损匹配策略,所述模糊无损匹配策略的层级低于所述模糊有损匹配策略的层级;所述按照所述模糊匹配策略,基于所述参考内存量在所述目标内存类型的内存池中进行模糊匹配,包括:
按照所述模糊无损匹配策略,在所述目标内存类型的内存池中查询内存量等于第一匹配内存量的内存,所述第一匹配内存量是所述参考内存量的整数倍;
若在所述目标内存类型的内存池中未查询到内存量等于所述第一匹配内存量的内存,则按照所述模糊有损匹配策略,在所述目标内存类型的内存池中查询内存量为第二匹配内存量的内存,所述第二匹配内存量是所述参考内存量的非整数倍;
若在所述目标内存类型的内存池中未查询到内存量为所述第二匹配内存量的内存,则确定模糊匹配失败。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:
若所述目标内存类型的内存池中存在内存量等于所述第一匹配内存量的内存,则从所述第一匹配内存量的内存中,拆分出内存量等于所述参考内存量的内存作为所述对象内存;
若所述目标内存类型的内存池中存在内存量等于所述第二匹配内存量的内存,则从所述第二匹配内存量的内存中,拆分出内存量等于所述参考内存量的内存作为所述对象内存;其中,所述第二匹配内存量的内存中拆分后的剩余内存,被按照所述第一内存池对应的内存申请粒度进行对齐。
8.如权利要求3所述的方法,其特征在于,当在所述第二内存池中为所述目标对象类型的业务对象分配所述对象内存时,所述各个层级的内存分配策略包括小范围模糊匹配策略和大范围模糊匹配策略;其中,所述小范围模糊匹配策略的层级低于所述大范围模糊匹配策略的层级;
所述基于层级顺序依次按照所述各个层级的内存分配策略,在所述第二内存池中为所述目标对象类型的业务对象分配所述对象内存,包括:
按照所述第二内存池对应的内存申请粒度对所述目标内存量进行对齐,得到参考内存量;
按照所述小范围模糊匹配策略,在所述第二内存池中查询内存量属于第一内存量范围的内存,所述第一内存量范围是根据所述参考内存量确定;
若在所述第二内存池中未查询到内存量属于所述第一内存量范围的内存,则根据内存剩余阈值对所述第二内存池的剩余内存量进行检查;所述内存剩余阈值是根据指定内存的内存量确定的,所述指定内存是在所述当前内存回收周期的前序内存回收周期内申请的,所述指定内存的内存量大于内存量阈值;
若检查结果指示所述第二内存池的剩余内存量大于或等于所述内存剩余阈值,则按照所述大范围模糊匹配策略,在所述第二内存池中查询内存量属于第二内存量范围的内存,所述第二内存量范围是根据所述参考内存量确定的,所述第二内存量范围大于所述第一内存量范围;
若在所述第二内存池中查询到内存量属于所述第二内存量范围的内存,则在属于所述第二内存量范围的内存中确定所述对象内存。
9.如权利要求8所述的方法,其特征在于,所述方法还包括:
若在所述第二内存池中查询到内存量属于所述第一内存量范围的内存,则在属于所述第一内存量范围的内存中确定所述对象内存;
其中,在属于所述第一内存量范围的内存中确定所述对象内存,包括:在属于所述第一内存量范围的内存中确定第一候选内存,所述第一候选内存是属于所述第一内存量范围的内存中,内存量与所述参考内存量最接近的内存;以及,在所述第一候选内存中确定所述对象内存;
在属于所述第二内存量范围的内存中确定所述对象内存,包括:在属于所述第二内存量范围的内存中确定第二候选内存,所述第二候选内存是属于所述第二内存量范围的内存中,内存量与所述参考内存量最接近的内存;以及,在所述第二候选内存中确定所述对象内存。
10.如权利要求8所述的方法,其特征在于,所述各个层级的内存分配策略还包括第二内存池扩容策略;所述方法还包括:
若检查结果指示所述第二内存池的剩余内存量小于所述内存剩余阈值,或者,若在所述第二内存池中未查询到内存量属于所述第二内存量范围的内存,则按照所述第二内存池扩容策略,对所述第二内存池进行扩容处理;
按照所述大范围模糊匹配策略,在扩容处理后的所述第二内存池中查询内存量属于所述第二内存量范围的内存。
11.如权利要求10所述的方法,其特征在于,所述按照所述第二内存池扩容策略,对所述第二内存池进行扩容处理,包括:
在到达所述当前内存回收周期对应的内存回收时间之前,获取内存扩展指示信息;
若所述内存扩展指示信息指示允许对所述第二内存池进行扩容处理,则从系统内存中申请内存对所述第二内存池进行扩容处理。
12.如权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述当前内存回收周期的上一内存回收周期的对象池扩容信息;
若所述上一内存回收周期的对象池扩容信息指示所述对象池在所述上一内存回收周期未进行扩容处理,则在到达所述当前内存回收周期对应的内存回收时间之前,触发执行所述按照多层级内存分配策略在内存池中为所述目标对象类型的业务对象分配对象内存的步骤;
若所述上一内存回收周期的对象池扩容信息指示所述对象池在上一内存回收周期进行扩容处理,则获取所述当前内存回收周期的扩容内存量,根据所述扩容内存量对所述对象池进行扩容处理,并在扩容处理后的所述对象池中创建所述目标对象类型的候选对象作为所述目标对象类型的业务对象。
13.如权利要求1所述的方法,其特征在于,所述方法还包括:
在所述当前内存回收周期进行内存回收之前,获取所述当前内存回收周期的上一内存回收周期的对象池扩容信息;
若所述上一内存回收周期的对象池扩容信息指示所述对象池在所述上一内存回收周期进行扩容处理,则保持所述当前内存回收周期的所述对象池不变;
若所述上一内存回收周期的对象池扩容信息指示所述对象池在所述上一内存回收周期未进行扩容处理,则对所述当前内存回收周期的所述对象池进行缩容处理。
14.一种业务处理装置,其特征在于,包括:
获取单元,用于接收对象创建请求,所述对象创建请求用于请求在业务中创建目标对象类型的业务对象,所述目标对象类型的业务对象用于存储所述业务中属于所述目标对象类型的业务数据;所述业务按照间隔参考时间周期性地进行内存回收,所述间隔参考时间是指相邻两次内存回收之间的时间间隔;所述内存回收是指回收所述业务中不再使用的业务对象所占用的内存;
处理单元,用于在对象池中查询属于所述目标对象类型的候选对象作为所述目标对象类型的业务对象;所述对象池包括预先创建好的不同对象类型的候选对象;
所述处理单元,还用于若在所述对象池中未查询到属于所述目标对象类型的候选对象,且尚未到达当前内存回收周期对应的内存回收时间,则按照多层级内存分配策略在内存池中为所述目标对象类型的业务对象分配对象内存;所述多层级内存分配策略是基于控制内存回收的频率需求设置得到的,所述多层级内存分配策略用于定义在所述间隔参考时间内对所述内存池进行内存分配所采用的动态分配方式;
所述处理单元,还用于基于所述对象内存,在所述业务中创建所述目标对象类型的业务对象。
15.一种计算机设备,其特征在于,包括:
处理器,适于实现计算机程序;
计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序适于由所述处理器加载并执行如权利要求1-13任一项所述的业务处理方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序适于由处理器加载并执行如权利要求1-13任一项所述的业务处理方法。
17.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如权利要求1-13任一项所述的业务处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311406663.9A CN117421116A (zh) | 2023-10-26 | 2023-10-26 | 业务处理方法、装置及计算机设备、存储介质、程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311406663.9A CN117421116A (zh) | 2023-10-26 | 2023-10-26 | 业务处理方法、装置及计算机设备、存储介质、程序产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117421116A true CN117421116A (zh) | 2024-01-19 |
Family
ID=89529813
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311406663.9A Pending CN117421116A (zh) | 2023-10-26 | 2023-10-26 | 业务处理方法、装置及计算机设备、存储介质、程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117421116A (zh) |
-
2023
- 2023-10-26 CN CN202311406663.9A patent/CN117421116A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102240557B1 (ko) | 데이터 저장 방법, 장치 및 시스템 | |
CN103067425B (zh) | 虚拟机创建方法、虚拟机管理系统及相关设备 | |
CN113209633B (zh) | 镜像的处理方法、装置、电子设备及可读存储介质 | |
CN102474531B (zh) | 地址服务器 | |
US20180027061A1 (en) | Method and apparatus for elastically scaling virtual machine cluster | |
CN110247984B (zh) | 业务处理方法、装置及存储介质 | |
CN103370691A (zh) | 管理缓冲器溢出状况 | |
CN110347651A (zh) | 基于云存储的数据同步方法、装置、设备及存储介质 | |
CN108089912A (zh) | 一种虚拟机与容器超融合系统构建方法及装置 | |
CN111737168A (zh) | 一种缓存系统、缓存处理方法、装置、设备及介质 | |
US20180357166A1 (en) | Method and apparatus for system resource management | |
CN110334069A (zh) | 多进程间的数据共享方法及相关装置 | |
CN113806300A (zh) | 数据存储方法、系统、装置、设备及存储介质 | |
KR102114245B1 (ko) | 그래픽스 상태 관리 장치 및 방법 | |
CN115712500A (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
US11741081B2 (en) | Method and system for data handling | |
CN102724301B (zh) | 云数据库系统以及云数据读写处理方法、设备 | |
CN105469173A (zh) | 一种静态内存进行优化管理的方法 | |
CN111857992B (zh) | 一种Radosgw模块中线程资源分配方法和装置 | |
CN110750363B (zh) | 计算机存储管理方法和装置、电子设备和存储介质 | |
CN117421116A (zh) | 业务处理方法、装置及计算机设备、存储介质、程序产品 | |
CN111078119B (zh) | 一种数据重建方法、系统、装置及计算机可读存储介质 | |
CN106970830A (zh) | 一种分布式虚拟机的存储控制方法、及虚拟机 | |
CN111737166A (zh) | 数据对象的处理方法、装置及设备 | |
US10209909B1 (en) | Storage element cloning in presence of data storage pre-mapper |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |