# BeeOP **Repository Path**: vdebug/BeeOP ## Basic Information - **Project Name**: BeeOP - **Description**: BeeOP 小蜜蜂对象池是一款轻量高性能Java对象池 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: https://www.oschina.net/p/beeop - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-03-08 - **Last Updated**: 2024-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README English 小蜜蜂对象池:一款轻量高性能Java对象池 Maven坐标(Java7) ```xml com.github.chris2018998 beeop 0.7 ``` --- ##### 性能测试 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内存 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/ObjectPool.log) 源码位置:[https://github.com/Chris2018998/BeeOP/blob/main/doc/temp/BeeOP_Test.rar](https://github.com/Chris2018998/BeeOP/blob/main/doc/temp/BeeOP_Test.rar) --- ##### 范例 ```java public interface Book { public String getName(); public long getNumber(); } public class JavaBook implements Book{ private String name; private long number; public JavaBook() { this("Java核心技术·卷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; } } ``` ```java public class JavaBookFactory implements BeeObjectFactory { public Object create(Properties prop) throws BeeObjectException { return new JavaBook("Java核心技术·卷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, int timeout) { return true; } } ``` ```java public class TestBookPool{ public static void main(String[]){ BeeObjectSourceConfig config = new BeeObjectSourceConfig(); config.setObjectFactory(new JavaBookFactory()); 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:支持对象安全关闭 4:断网对象池自动恢复 5:闲置超时和持有超时处理 6:若对象发生异常,池自动增补 7:对象回收时重置 8:对象池重置 9:支持JMX --- ##### 配置项说明 | 配置项 | 描述 | 备注 | | --------------------- | ---------------------------- | -----------------------------------------------------------| |poolName |池名 |如果未赋值则会自动产生一个 | | fairMode |是否公平模式 |默认false,竞争模式 | | initialSize |池初始创建对象数 | 默认为0 | | maxActive |池最大创建对象数 | 默认为10个 | | borrowSemaphoreSize |对象借线程最大并行数 |默认取最大对象数/2与cpu核心数的最小值 | | maxWait |对象借用等待最大时间(毫秒) |默认8秒,对象请求最大等待时间 | | idleTimeout |对象闲置最大时间(毫秒) |默认3分钟,超时会被清理 | | holdTimeout |对象被持有不用最大时间(毫秒) |默认5分钟,超时会被清理 | | forceCloseObject |是否需要暴力关闭对象 |池关闭或重置,使用,默认false;true:直接关闭使用中对象,false:等待处于使用中归还后再关闭| | waitTimeToClearPool |延迟清理的时候时间(秒) |默认3秒,非暴力清理池下,还存在使用中的对象,延迟等待时间再清理 | | idleCheckTimeInterval |对象闲置扫描线程间隔时间(毫秒) |默认5分钟 | | objectFactoryClassName |自定义的对象工厂类名 |默认为空 | | enableJmx |JMX监控支持开关 |默认false |