ConcurrentLinkedHashMap已被整合到番石榴中意味着什么?

2022-09-05 00:20:29

我们在一个项目中使用了来自 https://code.google.com/p/concurrentlinkedhashmap/ 的ConcurcurrentLinkedHashMap,我看到一个说明,它在2010年被集成到Guava的MapMaker和CacheBuilder中。信息非常简短:

将算法技术集成到MapMaker中将在Google Guava r08中发布,并且在很大程度上基于此版本。

这到底是什么意思?

  • 并发链接哈希映射项目似乎仍然处于活动状态。
  • 它只是一次性集成来引导Guava缓存包吗?
  • 自2010年以来,这两个项目是否独立发展?
  • 如果是这样,它们今天的主要区别是什么?

答案 1

这到底是什么意思?

番石榴是长期替代品,大多数时候你应该使用它。历史是,ConcurrentLinkedHashMap找出了算法,Guava将其纳入其中,然后专注于添加功能。

并发链接哈希映射项目似乎仍然处于活动状态。

它一直是一个周末项目,如此活跃意味着我有一个挠痒痒或响应更改请求。在CLHM中进行实验也比番石榴更容易,所以我倾向于在移植它们之前证明那里的想法。我对番石榴的参与度是20%的。

它只是一次性集成来引导Guava缓存包吗?

是的。我们首先对MapMaker进行了大修,然后将缓存拆分为专用的API。这是将想法和改进单向迁移到番石榴。

自2010年以来,这两个项目是否独立发展?

两人都致力于自己的目标。ConcurrentLinkedHashMap背后的动机是弄清楚如何在不走捷径的情况下编写真正的并发缓存。番石榴背后的目标是提供一个功能丰富的库,具有漂亮的API和可靠的实现,以供广泛使用。

今天它们之间的主要区别是什么?

番石榴功能丰富,并在谷歌有一个全职团队支持它。使用它!

ConcurrentLinkedHashMap通过装饰而不是分叉ProperatHashMap具有更高的绝对并发性。这允许它与基于新算法的 ConcurrentHashMapV8 一起使用。CLHM 不依赖于段锁,这提高了写入性能并允许维护单个 LRU 链。我有一个关于LIRS政策的实验分支,我希望有一天能完成。

长期的希望是,Doug Lea有一天会写一个受我们工作的启发的缓存,并在此过程中教给我们一些东西。


更新(3/15):Caffeine是Guava缓存的Java 8重写。它试图提供最好的 ConcurrentLinkedHashMap 和 Guava,使用 Java 8 进行现代化改造,并采用我从以前的项目中学到的技术。


答案 2