一种通用对象池实现系统及方法技术方案

技术编号:36605030 阅读:19 留言:0更新日期:2023-02-04 18:25
本发明专利技术公开了一种通用对象池实现系统及方法,系统包括对象操作接口模块,对象工厂模块,老化计数复位器模块和对象队列池模块。通过本发明专利技术提出的通用对象池系统,能同时支持池化多种不同类型的对象;在大并发、多对象类型情况下的命中率计算中取得时间敏感的计算精度和存储空间代价之间的很好平衡;老化对象的释放机制与系统GC机制相关联,同时支持主动释放对象资源和联动系统GC机制释放资源;操作接口简单,外部调用模块只需要使用四步即可完成对象池的初始化、注册和运行工作,同时在运行时,只需要两个接口就可以完成对象池的操作使用。用。用。

【技术实现步骤摘要】
一种通用对象池实现系统及方法


[0001]本专利技术涉及软件设计开发
,尤其涉及一种通用对象池实现系统及方法。

技术介绍

[0002]当前的软件设计开发中面向对象(OOP)技术得到了大量的应用,OOP技术因其设计上的便利性和易于理解被广泛地应用于各种软件设计中。而各种计算机程序设计语言,无论是编译型高级语言还是解释型脚本语言都支持OOP技术。
[0003]在软件设计中,对象会根据需要进行创建,在使用完之后会被删除以释放所占用的系统资源。但是对象在创建和释放的过程中也会占用系统计算资源和内存资源而带来额外的开销,特别是在资源受限和有大量并发的情况下,频繁地进行对象的创建和释放会带来大量的系统开销,同时内存因为频繁的占用和回收也会变得不稳定而产生内存抖动的不利情况,更为严重的是在频繁的对象创建和释放过程中往往会残留一些对象内存数据,这些残留内存数据积累起来会造成内存泄露而影响软件的安全运行。
[0004]为解决上述问题,当前技术上多使用对象池技术,但当前主流使用的对象池技术普遍有以下的不足:(1)不能同时支持池化多种不同类型的对象;(2)面对很大并发访问量和需要池化很多对象类型时计算量和存储空间开销都很大;(3)老化对象的释放机制与系统GC机制无关联,即不能同时支持有主动释放内存的编程语言和没有主动释放内存的编程语言,比如:多数编译型高级语言有主动释放机制,但解释型脚本语言无主动释放内存机制只有系统GC(垃圾回收)机制。

技术实现思路

[0005]为解决上述问题,本专利技术提出了一种通用对象池实现系统及方法。
[0006]第一方面,一种通用对象池实现系统,包括对象操作接口模块,对象工厂模块,老化计数复位器模块和对象队列池模块,所述对象操作接口模块从对象队列池模块中借出空闲对象和回收对象提供给外部模块;所述对象工厂模块创建、释放、初始化、校验对象以及通知系统GC进行垃圾回收;所述对象队列池模块保存当前空闲和已经借出对象以及对应的对象类型和整体命中计数信息。
[0007]进一步,所述对象操作接口模块还包括对象借出子接口子模块和对象回收子接口子模块,通过所述对象借出子接口子模块对外部模块请求借出的对象进行借出,通过所述对象回收子接口子模块将外部模块不需要的对象进行回收。
[0008]进一步,所述对象工厂模块还包括创建对象子模块,初始化对象子模块,释放对象子模块,校验对象合法性子模块,命中计数子模块和GC指示子模块。
[0009]进一步,所述老化计数复位器模块包括默认为100秒的老化计数器,还包括用于维护每个对象类型在对象队列池模块中对应队列中对象命中计数的对象命中计数子模块,以
及计算衰减值并传送给对象工厂模块的老化频次计算子模块,所述老化计数复位器模块中衰减因子参数默认为0.8;所述老化频次计算子模块包括获得对象访问频次数据的W

TinyLFU缓存调度算法,所述W

TinyLFU缓存调度算法包括矫正命中次数的前置小窗口LRU算法叠加Count

Min Sketch算法的频次过滤器和基于滑动窗口设计的计数衰减机制;所述老化频次计算子模块使用所述对象访问频次数据结合衰减因子参数计算出当前衰减值。
[0010]进一步,所述对象队列池模块根据对象类型维护支持多类型对象池化的复合数据存储结构,所述复合数据存储结构包括:对象类型标识,命中计数,对象队列。
[0011]另一方面,一种通用对象池实现方法,包括对象借出步骤,对象回收步骤以及自动回收步骤,所述对象借出包括以下子步骤:步骤A1:对象消费模块发起借出,通过对象操作接口模块中的对象借出子模块向系统发出借用特定类型对象的申请;步骤A2:对象借出子模块收到申请后调用对象工厂模块中的校验对象合法性子模块,检查所请求对象类型在对象队列池模块中是否有空闲对象可以借出,检查结果通过校验对象合法性子模块发送至对象工厂模块;步骤A3:若检查结果为“无空闲对象”,则对象工厂模块中的创建对象子模块操作对象池队列模块按所需对象类型在队列中创建新对象,再将新对象返回至对象操作接口模块,将新对象借出;步骤A4:若检查结果为“有空闲对象”,则对象工厂模块直接使用命中计数子模块操作老化计数复位器模块,按申请借出对象类型操作对象队列池模块对应类型的对象队列的命中计数器进行命中次数加一,再将空闲对象送至对象操作接口模块借出。
[0012]进一步,所述对象回收步骤还包括以下子步骤:步骤B1:对象消费模块发起回收,通过对象操作接口模块中的对象回收子模块向系统发出归还特定类型对象的申请;步骤B2:对象回收子模块收到申请后调用对象工厂模块中的校验对象合法性子模块,检查所请求对象类型是否有效以及队列是否已满,检查结果通过校验对象合法性子模块发送至对象工厂模块;步骤B3:若检查结果为“该回收对象为无效对象”或“该对象类型在对象队列池模块中队列已满”,则对象工厂模块中的释放对象子模块进行操作,销毁该回收对象;步骤B4:若检查结果为“该回收对象为有效对象且队列未满”,则对象工厂模块直接使用命中计数子模块操作老化计数复位器模块,按申请回收对象类型操作对象队列池模块对应类型的对象队列的命中计数器进行命中次数减一。
[0013]进一步,所述对象回收子步骤B3还包括:对象工厂模块使用GC指示子模块通知系统启动GC操作垃圾回收。
[0014]进一步,所述对象回收子步骤B4还包括:对象工厂模块使用初始化对象子模块将回收对象初始化后归还至对象池队列模块对应对象类型队列供后续使用。
[0015]进一步,所述自动回收步骤由老化计数复位器模块发起自动回收操作,老化计数复位器模块中的老化计数器按照预设时间周期性计数,当老化计数器的计数超时时,开始自动回收检查和执行操作,包括以下子步骤:步骤C1:检查对象队列池模块中是否有对象为无效对象,若有无效对象,则对象工
厂模块中的释放对象子模块和GC指示子模块进行销毁、释放无效对象并通知系统GC进行资源清理,然后更新对象队列池模块,将无效对象从队列中清除并维护队列中的对象命中计数器;步骤C2:检查对象队列池中已借出对象是否超过老化时间,若有超时对象,则该对象已成为无效对象,则重复步骤C1的释放和清理工作,进行清理资源和更新对象队列池模块操作;步骤 C3:根据老化频次计算子模块所计算的衰减值淘汰队列中回收率和命中率低的对象,优化对象队列池中的待命对象类型比例,提高对象队列的命中率,选中需要淘汰的对象后,重复步骤C1进行释放和清理工作。
[0016]进一步,所述通用对象池的实现还包括以下运行步骤:步骤S1:前提设定,设定好需要池化的对象、池化库主控类、池化库工厂类;步骤S2:为需要池化的类设置一个工厂类,包括:定义构造函数构造工厂类设置必要参数,定义解析函数释放资源,定义需要池化对象相关初始化代码和校验代码;步骤S3:为对象池运行实例化一个主控对象,设置必要参数,包括:老化计数器时间,衰减因子,系统GC回调接口;步骤S4:实例化工厂类,注册工厂类;步骤S5:外本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种通用对象池实现系统,其特征在于,包括对象操作接口模块,对象工厂模块,老化计数复位器模块和对象队列池模块,所述对象操作接口模块从对象队列池模块中借出空闲对象和回收对象提供给外部模块;所述对象工厂模块创建、释放、初始化、校验对象以及通知系统GC进行垃圾回收;所述对象队列池模块保存当前空闲和已经借出对象以及对应的对象类型和整体命中计数信息。2.根据权利要求1所述的一种通用对象池实现系统,其特征在于,所述对象操作接口模块还包括对象借出子接口子模块和对象回收子接口子模块,通过所述对象借出子接口子模块对外部模块请求借出的对象进行借出,通过所述对象回收子接口子模块将外部模块不需要的对象进行回收。3.根据权利要求1所述的一种通用对象池实现系统,其特征在于,所述对象工厂模块还包括创建对象子模块,初始化对象子模块,释放对象子模块,校验对象合法性子模块,命中计数子模块和GC指示子模块。4.根据权利要求1所述的一种通用对象池实现系统,其特征在于,所述老化计数复位器模块包括默认为100秒的老化计数器,还包括用于维护每个对象类型在对象队列池模块中对应队列中对象命中计数的对象命中计数子模块,以及计算衰减值并传送给对象工厂模块的老化频次计算子模块,所述老化计数复位器模块中衰减因子参数默认为0.8;所述老化频次计算子模块包括获得对象访问频次数据的W

TinyLFU缓存调度算法,所述W

TinyLFU缓存调度算法包括矫正命中次数的前置小窗口LRU算法叠加Count

Min Sketch算法的频次过滤器和基于滑动窗口设计的计数衰减机制;所述老化频次计算子模块使用所述对象访问频次数据结合衰减因子参数计算出当前衰减值。5.根据权利要求1所述的一种通用对象池实现系统,其特征在于,所述对象队列池模块根据对象类型维护支持多类型对象池化的复合数据存储结构,所述复合数据存储结构包括:对象类型标识,命中计数,对象队列。6.一种通用对象池实现方法,其特征在于,包括对象借出步骤,对象回收步骤以及自动回收步骤,所述对象借出包括以下子步骤:步骤A1:对象消费模块发起借出,通过对象操作接口模块中的对象借出子模块向系统发出借用特定类型对象的申请;步骤A2:对象借出子模块收到申请后调用对象工厂模块中的校验对象合法性子模块,检查所请求对象类型在对象队列池模块中是否有空闲对象可以借出,检查结果通过校验对象合法性子模块发送至对象工厂模块;步骤A3:若检查结果为“无空闲对象”,则对象工厂模块中的创建对象子模块操作对象池队列模块按所需对象类型在队列中创建新对象,再将新对象返回至对象操作接口模块,将新对象借出;步骤A4:若检查结果为“有空闲对象”,则对象工厂模块直接使用命中计数子模块操作老化计数复位器模块,按申请借出对象类型操作对象队列池模块对应类型的对象队列的命中计数器进行命中次数加一,再将空闲对象送至对象操作接口模块借...

【专利技术属性】
技术研发人员:杨宇彤
申请(专利权)人:成都索骥科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1