HikariCP連接池介紹

一、 性能上的提升

HikariCP是現在比較快,而且輕量的連接池,相比於其他連接池,性能上都有一定的提升,以下是它和一些其他連接池的性能的比較:
在這裏插入圖片描述

關於HikariCP連接池速度快於其他連接池的原因,主要有一下幾個方面:
1.相比於普通連接池,在ConnectionProxy中使用ArrayList來存儲Statement對象,HikariCP改用FatList來存儲對象,而其中的區別是,ArrayList在每次執行get(Index)方法時,都需要對List的範圍進行檢查,而FastList不需要,在能確保範圍的合法性的情況下,可以省去範圍檢查的開銷。
2.另外在Java代碼中,很多關於Connection的操作,都是在使用完之後直接關閉連接,以前都是從頭到尾遍歷,來關閉對應的Connection,而HikariCP則是從尾部對Connection集合進行掃描,整體上來說,從尾部開始的性能更好一些。
3.內部使用一個無鎖的集合來存儲,並對其中的切換操作做了優化。
4.從字節碼指令的角度去優化,連接池使用
PROXY_FACTORY.getProxyPreparedStatement(this, delegate.prepareStatement(sql, columnNames))語句來建立statements,resultset等的實例,將其翻譯成字節碼指令後,會有如下的指令,0: getstatic和15: invokevirtual #69。將上述的方法改爲使用 ProxyFactory.getProxyPreparedStatement(this, delegate.prepareStatement(sql, columnNames)),後,就不在需要0: getstatic指令,並且使用了12: invokestatic #67代替了15: invokevirtual #69,前者invokestatic 更容易被JIT優化。另外從堆棧的角度來說,堆棧大小也從原來的5變成了4。

二、簡單使用

**//直接初始化HikariConfig**
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");
config.setUsername("bart");
config.setPassword("51mp50n");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
HikariDataSource ds = new HikariDataSource(config);

//直接初始化HikariDataSource
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");
ds.setUsername("bart");
ds.setPassword("51mp50n");

//通過文件配置參數
HikariConfig config = new HikariConfig("/some/path/hikari.properties");
HikariDataSource ds = new HikariDataSource(config);
//文件配置例子
dataSourceClassName=org.postgresql.ds.PGSimpleDataSource
dataSource.user=test
dataSource.password=test
dataSource.databaseName=mydb
dataSource.portNumber=5432
dataSource.serverName=localhost

//使用Properties配置
Properties props = new Properties();
props.setProperty("dataSourceClassName", "org.postgresql.ds.PGSimpleDataSource");
props.setProperty("dataSource.user", "test");
props.setProperty("dataSource.password", "test");
props.setProperty("dataSource.databaseName", "mydb");
props.put("dataSource.logWriter", new PrintWriter(System.out));
HikariConfig config = new HikariConfig(props);
HikariDataSource ds = new HikariDataSource(config);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章