HikariCP性能最高源于深度优化:采用无锁ConcurrentBag、零开销FastList、精简代码(130KB无依赖)、JVM友好内存布局,显著降低CPU、GC及锁竞争开销。

HikariCP 被广泛认为是 Java 中性能最高的 JDBC 连接池,这并非营销口号,而是源于它在多个关键环节的深度优化。它的“快”不是靠堆硬件或绕开规范,而是把每一处微小开销都当作敌人来清除。
零锁连接管理:ConcurrentBag 替代传统队列
多数连接池(如 DBCP2、Tomcat JDBC)依赖带锁的阻塞队列(如 LinkedBlockingQueue)管理空闲连接,高并发下线程争抢锁会造成明显延迟。HikariCP 用自研的 ConcurrentBag 取代它——这是一种无锁(lock-free)结构,内部结合了 ThreadLocal + CopyOnWriteArrayList + SharedList 三层缓存:
- 线程优先从自己的 ThreadLocal 缓存取连接,免锁、零竞争
- 取不到时再查共享列表,使用 CAS 操作更新状态,避免重量级 synchronized
- 连接归还时不入队等待,而是直接标记为可用并唤醒等待线程
零开销集合操作:FastList 消除边界检查
连接池高频操作包括快速遍历、尾部添加/删除。传统 ArrayList 的 get(int) 每次调用都执行范围检查(if (index >= size)),分支预测失败时 CPU 浪费显著。HikariCP 的 FastList 直接用数组索引访问:elementData[index],不校验、不方法调用、无分支——真正“零开销”。实测在每秒数万次连接获取场景下,这项优化可降低 15%+ 的 CPU 时间。
精简到极致的代码与依赖
HikariCP jar 包仅约 130KB,不含任何第三方依赖,全部使用 JDK 原生类和少量字节码增强(Javassist)。相比之下,Druid 接近 2MB,含大量监控、日志、SQL 解析模块。这些功能虽实用,但会带来:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
立即学习“Java免费学习笔记(深入)”;
- 更多类加载与 GC 压力
- 更长的方法调用链与间接引用
- 默认开启的 JMX、Metrics 等后台任务开销
HikariCP 默认关闭所有非核心功能,连连接验证(validation)都懒加载,只在必要时执行。
内存布局与 JVM 友好设计
源码中大量使用 final 字段、紧凑对象结构、避免装箱,让连接对象在堆中连续分配,提升 CPU 缓存命中率;同时控制对象生命周期,减少短期对象生成,显著降低 Young GC 频率。压测中常见现象:相同 QPS 下,HikariCP 的 GC 时间仅为 DBCP2 的 1/3 左右。


















