【问题标题】:What does it mean that ConcurrentLinkedHashMap has been integrated into Guava?ConcurrentLinkedHashMap 已经集成到 Guava 中是什么意思?
【发布时间】:2013-03-08 17:11:27
【问题描述】:

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

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

具体是什么意思?

  • concurrentlinkedhashmap 项目似乎仍处于活动状态。
  • 是否只是一次性集成来引导 Guava 缓存包?
  • 自 2010 年以来,这两个项目是否独立发展?
  • 如果是这样,它们之间的主要区别是什么?

【问题讨论】:

    标签: java caching guava


    【解决方案1】:

    具体是什么意思?

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

    concurrentlinkedhashmap 项目似乎仍处于活动状态。

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

    引导 Guava 缓存包是否只是一次性集成?

    是的。我们首先彻底检查了 MapMaker,然后将缓存拆分为专用 API。这是将想法和改进单向迁移到 Guava。

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

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

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

    Guava 拥有丰富的功能,并且在 Google 有一个全职团队为其提供支持。使用它!

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

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


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

    【讨论】:

    • 答案再好不过了!
    • +1 最后一句:长期的希望是 Doug Lea 有一天会根据我们的工作编写缓存,并在此过程中教给我们一些东西。 ;)
    • Guava 并没有停下来给我留下深刻的印象,在阅读了 Java 并发实践之后,您意识到 Doug Lea 是一个人,在 API 和将想法快速移植到 Guava 方面都非常出色。就像 Ben 说的,使用 Guava。
    猜你喜欢
    • 2018-09-15
    • 2020-05-14
    • 2015-09-23
    • 1970-01-01
    • 2019-08-08
    • 2012-11-27
    • 2016-04-19
    • 2022-11-08
    相关资源
    最近更新 更多