tags: Java
Common 概念
- 介於應用程式與資料庫之間
- 減少create、destroy動作的次數
- 減少 GC.Collect 被觸動的頻率
- pool 的取出、收回兩個動作來代替一般物件的create、destroy
- 使用時機:
- 若初始化、實例化的代價高
- 有需求需要經常實例化
Connection Pool
-
介於應用程式與資料庫之間
-
集中管理資料庫的連線
-
優點:
- Pool會keep住與DB的連線,降低向資料庫建立 connection 的頻率
- pool 中的 connection 可重複使用,不用再重複地跟DB建立連線然後又釋放掉
- 減少了用戶必須等待建立與數據庫的連接的時間
- pool 可設定初始的連線數、最大連線數、閒置處理,避免超過DB所能負擔的連線數
- 可作為緩衝區,當程式需要取用大量連線時,由 pool 按照設定好的策略來處理,避免拖垮DB的效能
Example
- JDBC
Thread Pool
- 元素
- thread
- task
- queue
- 需要使用執行緒時,在一個執行緒池中尋找可用的執行緒
- 執行緒使用完畢後,留在池中重複使用
- Thread的數目永遠不會超過最大值,超過最大值的Thread必須排隊,他們要等到其他Thread完成後才啟動
String Pool
- Flyweight Pattern 享元
- 一般的字串比對底層是以Byte為基礎的方式去比對
- 用String pool,只需比對兩者是否指到相同的物件實體
Integer Pool
-
pool裡面存放的value範圍為 -128~127
-
比較
Integer int 型態 wrapper type
(reference type)primitive type 包裝類別 基本資料類別 運算 慢 快 相等 equals()
但-128~127可用==== -
使用 Collection 時,建議使用 Integer (wrapper type)
- 若使用 int (primitive type) 會 auto-boxing 成 Integer (wrapper type)
參考資料
- 連接池(Connection Pool)介紹:
http://peggg327.blogspot.com/2014/11/connection-pool.html - JDBC 再升級 — 使用 connection pool:
http://blog.appx.tw/2017/05/19/jdbc-connection-pool/ - wiki:https://en.wikipedia.org/wiki/Connection_pool
- [Unity] 物件池的實現 – Practicing of Object Pool
https://douduck08.wordpress.com/2017/08/01/practicing-of-object-pool/ - 百度:https://baike.baidu.com/item/Java Pool/4715004
- Thread Pool:https://popcornylu.gitbooks.io/java_multithread/content/threadpool/threadpool.html
- Thread Pool:https://openhome.cc/Gossip/DesignPattern/ThreadPool.htm
- [.Net Concept]理解並善用String pool
https://dotblogs.com.tw/larrynung/archive/2011/06/30/30763.aspx - Java Integer Pool:http://blog.kenyang.net/2013/01/05/java-integer-pool
沒有留言:
張貼留言