HikariCP为什么这么快
所属分类 HikariCP
浏览量 827
JDBC连接池
对JDBC中几个核心对象Connection Statement PreparedStatement CallableStatement以及ResultSet的封装与动态代理
优化并精简字节码
Javassist 实现动态代理
比 JDK Proxy 生成的字节码更少,速度更快
更好的并发集合类实现 ConcurrentBag
专门为连接池设计的lock-less集合
比LinkedBlockingQueue LinkedTransferQueue更好的并发性能
ConcurrentBag内部同时使用 ThreadLocal 和 CopyOnWriteArrayList 存储元素
其中CopyOnWriteArrayList是线程共享的
ConcurrentBag采用 queue-stealing 机制获取元素
首先尝试从ThreadLocal中获取 当前线程的元素来避免锁竞争
如果没有可用元素则再从共享的CopyOnWriteArrayList中获取
ThreadLocal和CopyOnWriteArrayList在ConcurrentBag中都是成员变量,线程间不共享,避免伪共享(false sharing)
使用FastList替代ArrayList
FastList List接口的精简实现,只实现了接口中必要的几个方法
JDK ArrayList get 方法 会进行rangeCheck 检查索引是否越界,FastList去除了这一检查
HikariCP使用List来保存打开的Statement,当Statement关闭或Connection关闭时需要将对应的Statement从List中移除
通常情况下,同一个Connection创建了多个Statement时,后打开的Statement会先关闭
ArrayList的remove(Object) 从头遍历数组,而FastList 从数组的尾部开始遍历,因此更为高效
HikariCP VS Druid
druid 有很多监控信息
上一篇
下一篇
C程序设计语言笔记_02_类型运算符与表达式
python Simple HTTP Server
go程序设计语言01_03入门之查找重复的行
Spring事务失效的原因
Lombok的一些坑
GO获取变量类型