这到底是什么意思?
番石榴是长期替代品,大多数时候你应该使用它。历史是,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 进行现代化改造,并采用我从以前的项目中学到的技术。