BeeOP高性能 Java 对象池

联合创作 · 2023-09-29 14:04

BeeOP 小蜜蜂对象池是一款轻量高性能Java对象池。

Maven坐标(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内存 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核心技术·卷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核心技术·卷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:支持对象安全关闭

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
浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报