2013-03-08 47 views
11

我們在項目中使用ConcurrentLinkedHashMap從https://code.google.com/p/concurrentlinkedhashmap/,我看到一張紙條,它被整合到番石榴的地圖製作和CacheBuilder早在2010年的信息是非常簡單的:這是什麼意思,ConcurrentLinkedHashMap已經集成到番石榴?

的算法技術爲地圖製作工具的集成將被釋放谷歌Guava r08和嚴重基於這個版本。

這是什麼意思?

  • concurrentlinkedhashmap項目似乎仍然活動。
  • 難道只是一次性整合來引導Guava緩存包嗎?
  • 這兩個項目自2010年以來是否獨立發展?
  • 如果是這樣,他們今天的主要區別是什麼?

回答

31

這是什麼意思?

番石榴是長期的替代品,大多數時候你應該使用它。歷史是,ConcurrentLinkedHashMap算出算法,番石榴包含它,然後專注於添加功能。

concurrentlinkedhashmap項目似乎仍然活動。

它一直是一個週末項目,所以主動意味着我有一個癢癢或響應變更請求。在CLHM比在番石榴實驗更容易,所以我傾向於在我們將它們移植之前證明那裏的想法。我參與番石榴的比例是20%。

難道只是一次性整合來引導Guava緩存包嗎?

是的。我們首先修改了MapMaker,然後將緩存拆分爲專用的API。這是想法和改進的單向遷移到番石榴。

這兩個項目自2010年以來是否獨立發展?

兩人都一直致力於他們的目標。 ConcurrentLinkedHashMap背後的動機是弄清楚如何編寫真正的併發緩存而不需要使用快捷方式。 Guava背後的目標是提供功能豐富的庫,其中包含一個漂亮的API和可靠的廣泛實施。

今天他們之間的主要區別是什麼?

番石榴具有很多功能,並有一個全職團隊在谷歌支持它。用它!

ConcurrentLinkedHashMap通過裝飾而不是分叉ConcurrentHashMap具有較高的絕對併發性。這允許它與基於新算法的ConcurrentHashMapV8一起使用。CLHM不依​​賴段鎖,這可以提高寫入性能並允許維護單個LRU鏈。我有一個LIRS政策的實驗分支,我希望有一天能完成。

長期的希望是Doug Lea有一天會寫出一個靈感來自我們工作的緩存,並在這個過程中教會我們一些東西。


更新(3/15):Caffeine是番石榴緩存的一個Java 8重寫。它試圖提供最好的ConcurrentLinkedHashMap和Guava,用Java 8進行現代化,並採用自從那些以前的項目以來學到的技術。

+0

答案不能更好! – 2013-03-10 01:12:50

+7

+1最後一句:_長期的希望是,Doug Lea有一天會寫出一個靈感來自我們工作的緩存,並在這個過程中教會我們一些東西._ – Xaerxess 2013-03-11 08:47:44

+0

番石榴不會停下來給我留下深刻的印象閱讀實踐中的Java Concurrency,你會意識到Doug Lea是個人,在這兩種API上都有非常出色的工作,並且能夠快速將想法移植到Guava中。像本說的那樣,使用番石榴。 – 2014-02-26 15:16:27