BeeOP

高性能 Java 对象池
授权协议 GPL-3.0
开发语言 Java
所属分类 程序开发、 数据库连接池
软件类型 开源软件
地区 国产
投 递 者 顾昌翰
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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
 相关资料
  • 网上都说nginx和lighthttpd是高性能web服务器,而tornado也是著名的高抗负载应用,它们间有什么相似处呢?上节提到的ioloop对象是如何循环的呢?往下看。 首先关于TCP服务器的开发上节已经提过,很明显那个三段式的示例是个效率很低的(因为只有一个连接被端开新连接才能被接受)。要想开发高性能的服务器,就得在这accept上下功夫。 首先,新连接的到来一般是经典的三次握手,只有当服

  • 问题内容: 我必须将一棵巨大的对象树(7,000)序列化到磁盘中。最初,我们将这棵树保存在Kodo的数据库中,但是它将花费数以千计的查询将该树加载到内存中,并且将占用本地Universe可用时间的很大一部分。 我为此尝试了序列化,的确可以提高性能。但是,我觉得可以通过编写自己的自定义序列化代码来改善这一点。我需要尽可能快地加载此序列化对象。 在我的机器上,序列化/反序列化这些对象大约需要15秒。从

  • 本文向大家介绍C#高性能动态获取对象属性值的步骤,包括了C#高性能动态获取对象属性值的步骤的使用技巧和注意事项,需要的朋友参考一下 动态获取对象的性能值,这个在开发过程中经常会遇到,这里我们探讨一下何如高性能的获取属性值。为了对比测试,我们定义一个类People 然后通过直接代码调用方式来取1千万次看要花多少时间: 大概花了37ms: 反射 通过反射来获取对象的属性值,这应该是大家常用的方式,但这

  • 我正在寻找更好的性能(转换时间应该非常少)。 本文显示的是来自这个答案的不同API之间的性能统计。 例如,我的发现是我提到的第一个链接(只有很少的记录): null 请帮帮我。

  • 问题内容: 我需要一些想法来实现Java的(真正)高性能内存数据库/存储机制。在存储20,000+个Java对象的范围内,每5秒钟左右更新一次。 我愿意接受的一些选择: 纯JDBC /数据库组合 JDO JPA / ORM /数据库组合 对象数据库 其他存储机制 我最好的选择是什么?你有什么经验? 编辑:我还需要能够查询这些对象 问题答案: 您可以尝试使用Prevayler之类的工具(基本上是一个