站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
程式Java

【Java】常用 Pool:Connection、Thread、String、Integer

tags: Java

Common 概念

  1. 介於應用程式與資料庫之間
  2. 減少create、destroy動作的次數
  3. 減少 GC.Collect 被觸動的頻率
  4. pool 的取出、收回兩個動作來代替一般物件的create、destroy
  5. 使用時機:
    • 若初始化、實例化的代價高
    • 有需求需要經常實例化

Connection Pool

  1. 介於應用程式與資料庫之間

  2. 集中管理資料庫的連線

  3. 優點:

    • Pool會keep住與DB的連線,降低向資料庫建立 connection 的頻率
    • pool 中的 connection 可重複使用,不用再重複地跟DB建立連線然後又釋放掉
    • 減少了用戶必須等待建立與數據庫的連接的時間
    • pool 可設定初始的連線數、最大連線數、閒置處理,避免超過DB所能負擔的連線數
    • 可作為緩衝區,當程式需要取用大量連線時,由 pool 按照設定好的策略來處理,避免拖垮DB的效能

Example

  1. JDBC

Thread Pool

  1. 元素
    • thread
    • task
    • queue
  2. 需要使用執行緒時,在一個執行緒池中尋找可用的執行緒
  3. 執行緒使用完畢後,留在池中重複使用
  4. Thread的數目永遠不會超過最大值,超過最大值的Thread必須排隊,他們要等到其他Thread完成後才啟動

String Pool

  1. Flyweight Pattern 享元
  2. 一般的字串比對底層是以Byte為基礎的方式去比對
  3. 用String pool,只需比對兩者是否指到相同的物件實體

Integer Pool

  1. pool裡面存放的value範圍為 -128~127

  2. 比較

    Integer int
    型態 wrapper type
    (reference type)
    primitive type
    包裝類別 基本資料類別
    運算
    相等 equals()
    但-128~127可用==
    ==
  3. 使用 Collection 時,建議使用 Integer (wrapper type)

    • 若使用 int (primitive type) 會 auto-boxing 成 Integer (wrapper type)

參考資料

  1. 連接池(Connection Pool)介紹:
    http://peggg327.blogspot.com/2014/11/connection-pool.html
  2. JDBC 再升級 — 使用 connection pool:
    http://blog.appx.tw/2017/05/19/jdbc-connection-pool/
  3. wiki:https://en.wikipedia.org/wiki/Connection_pool
  4. [Unity] 物件池的實現 – Practicing of Object Pool
    https://douduck08.wordpress.com/2017/08/01/practicing-of-object-pool/
  5. 百度:https://baike.baidu.com/item/Java Pool/4715004
  6. Thread Pool:https://popcornylu.gitbooks.io/java_multithread/content/threadpool/threadpool.html
  7. Thread Pool:https://openhome.cc/Gossip/DesignPattern/ThreadPool.htm
  8. [.Net Concept]理解並善用String pool
    https://dotblogs.com.tw/larrynung/archive/2011/06/30/30763.aspx
  9. Java Integer Pool:http://blog.kenyang.net/2013/01/05/java-integer-pool

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽