BeeOP高性能 Java 對象池
BeeOP 小蜜蜂對象池是一款輕量高性能Java對象池。
Maven坐標(biāo)(Java7)
dependency> <groupId>com.github.chris2018998</groupId> <artifactId>beeop</artifactId> <version>1.0.3</version> </dependency
性能測試
100萬次借用/歸還(1000線程 x1000次),獲取時間分布,平均時間
| 對象池名 | commons-pool2-2.9.0 | BeeOP0.3_Fair | BeeOP0.3_Compete |
|---|---|---|---|
| 平均時間 | 2.677456 | 0.000347 | 0.000187 |
測試配置:PC:I5-4210M(2.6赫茲,雙核4線程),12G內(nèi)存 Java:JAVA8_64 Pool:初始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
范例
public interface Book { public String getName(); public long getNumber(); } public class JavaBook implements Book{ private String name; private long number; public JavaBook() { this("Java核心技術(shù)·卷2", System.currentTimeMillis()); } public JavaBook(String name, long number) { this.name = name; this.number = number; } public String getName() { return name; } public long getNumber() { return number; } public String toString() { return name; }
public class JavaBookFactory implements BeeObjectFactory { public Object create(Properties prop) throws BeeObjectException { return new JavaBook("Java核心技術(shù)·卷1", System.currentTimeMillis()); } public void setDefault(Object obj) throws BeeObjectException { } public void reset(Object obj) throws BeeObjectException { } public void destroy(Object obj) { } public boolean isAlive(Object obj, long timeout) { return true; } }
public class TestBookPool{ public static void main(String[]){ BeeObjectSourceConfig config = new BeeObjectSourceConfig(); config.setObjectFactory(new JavaBookFactory()); config.setObjectInterfaces(new Class[]{Book.class}); BeeObjectSource obs = new BeeObjectSource(config); BeeObjectHandle handle = null; try { handle = obs.getObject(); Object v=handle.call("getName"); System.out.println("Book name:"+v); } catch (BeeObjectException e) { } finally { if (handle != null) handle.close(); } } }
功能支持
1:對象借用超時
2:對象借用支持公平與競爭模式
3:支持對象安全關(guān)閉
4:斷網(wǎng)對象池自動恢復(fù)
5:閑置超時和持有超時處理
6:若對象發(fā)生異常,池自動增補(bǔ)
7:對象回收時重置
8:對象池重置
9:支持JMX
配置項說明
| 配置項 | 描述 | 備注 |
|---|---|---|
| poolName | 池名 | 如果未賦值則會自動產(chǎn)生一個 |
| fairMode | 是否公平模式 | 默認(rèn)false,競爭模式 |
| initialSize | 池初始創(chuàng)建對象數(shù) | 默認(rèn)為0 |
| maxActive | 池最大創(chuàng)建對象數(shù) | 默認(rèn)為10個 |
| borrowSemaphoreSize | 對象借線程最大并行數(shù) | 默認(rèn)取最大對象數(shù)/2與cpu核心數(shù)的最小值 |
| maxWait | 對象借用等待最大時間(毫秒) | 默認(rèn)8秒,對象請求最大等待時間 |
| idleTimeout | 對象閑置最大時間(毫秒) | 默認(rèn)3分鐘,超時會被清理 |
| holdTimeout | 對象被持有不用最大時間(毫秒) | 默認(rèn)5分鐘,超時會被清理 |
| forceCloseObject | 是否需要暴力關(guān)閉對象 | 池關(guān)閉或重置,使用,默認(rèn)false;true:直接關(guān)閉使用中對象,false:等待處于使用中歸還后再關(guān)閉 |
| waitTimeToClearPool | 延遲清理的時候時間(秒) | 默認(rèn)3秒,非暴力清理池下,還存在使用中的對象,延遲等待時間再清理 |
| idleCheckTimeInterval | 對象閑置掃描線程間隔時間(毫秒) | 默認(rèn)5分鐘 |
| objectFactoryClassName | 自定義的對象工廠類名 | 默認(rèn)為空 |
| enableJmx | JMX監(jiān)控支持開關(guān) | 默認(rèn)false |
評論
圖片
表情
