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之类的工具(基本上是一个