性能测试
100万次借用/归还(1000线程x1000次),获取时间分布,平均时间对象池名commons-pool2-2.9.0BeeOP0.3_FairBeeOP0.3_Compete平均时间2.6774560.0003470.000187测试配置:PC:I5-4210M(2.6赫兹,双核4线程),12G内存Java:JAVA8_64Pool:初始10,最大10日志文件:https://github.com/Chris2018998/BeeOP/blob/main/doc/temp/ObjectPool.log源码位置:https://github.com/Chris2018998/BeeOP/blob/main/doc/temp/BeeOP_Test.rar范例
publicinterfaceBook{publicStringgetName();publiclonggetNumber();}publicclassJavaBookimplementsBook{privateStringname;privatelongnumber;publicJavaBook(){this("Java核心技术·卷2",System.currentTimeMillis());}publicJavaBook(Stringname,longnumber){this.name=name;this.number=number;}publicStringgetName(){returnname;}publiclonggetNumber(){returnnumber;}publicStringtoString(){returnname;}publicclassJavaBookFactoryimplementsBeeObjectFactory{publicObjectcreate(Propertiesprop)throwsBeeObjectException{returnnewJavaBook("Java核心技术·卷1",System.currentTimeMillis());}publicvoidsetDefault(Objectobj)throwsBeeObjectException{}publicvoidreset(Objectobj)throwsBeeObjectException{}publicvoiddestroy(Objectobj){}publicbooleanisAlive(Objectobj,longtimeout){returntrue;}}publicclassTestBookPool{publicstaticvoidmain(String[]){BeeObjectSourceConfigconfig=newBeeObjectSourceConfig();config.setObjectFactory(newJavaBookFactory()); config.setObjectInterfaces(newClass[]{Book.class});BeeObjectSourceobs=newBeeObjectSource(config);BeeObjectHandlehandle=null;try{handle=obs.getObject();Objectv=handle.call("getName");System.out.println("Bookname:"+v);}catch(BeeObjectExceptione){}finally{if(handle!=null)handle.close();}}}功能支持
1:对象借用超时2:对象借用支持公平与竞争模式3:支持对象安全关闭4:断网对象池自动恢复5:闲置超时和持有超时处理6:若对象发生异常,池自动增补7:对象回收时重置8:对象池重置9:支持JMX配置项说明
配置项描述备注poolName池名如果未赋值则会自动产生一个fairMode是否公平模式默认false,竞争模式initialSize池初始创建对象数默认为0maxActive池最大创建对象数默认为10个borrowSemaphoreSize对象借线程最大并行数默认取最大对象数/2与cpu核心数的最小值maxWait对象借用等待最大时间(毫秒)默认8秒,对象请求最大等待时间idleTimeout对象闲置最大时间(毫秒)默认3分钟,超时会被清理holdTimeout对象被持有不用最大时间(毫秒)默认5分钟,超时会被清理forceCloseObject是否需要暴力关闭对象池关闭或重置,使用,默认false;true:直接关闭使用中对象,false:等待处于使用中归还后再关闭waitTimeToClearPool延迟清理的时候时间(秒)默认3秒,非暴力清理池下,还存在使用中的对象,延迟等待时间再清理idleCheckTimeInterval对象闲置扫描线程间隔时间(毫秒)默认5分钟objectFactoryClassName自定义的对象工厂类名默认为空enableJmxJMX监控支持开关默认false
评论