java - ConcurrentLinkedHashMap 已经集成到 Guava 中是什么意思?

标签 java caching guava

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

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

具体是什么意思?

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

最佳答案

What does it mean exactly?

Guava 是长期替代品,大多数时候您应该使用它。历史是 ConcurrentLinkedHashMap 弄清楚了算法,Guava 将其归入,然后专注于添加功能。

The concurrentlinkedhashmap project seems to be still active.

它一直是一个周末项目,如此活跃意味着我有一个抓痒痒或响应变更请求。在 CLHM 中进行实验也比在 Guava 中更容易,因此我倾向于在移植之前先在那里证明想法。我参与 Guava 的比例是 20%。

Was it just a one time integration to bootstrap the Guava cache package?

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

Have the two projects evolved independently since 2010?

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

What are the main differences between them today?

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

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

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


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

关于java - ConcurrentLinkedHashMap 已经集成到 Guava 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15299554/

相关文章:

java - 找不到属性文件 ReloadableResourceBundleMessageSource 错误

java - 如何使用 BigDecimals 进行除法

python - 缓存通过 API 获取的在线价格,除非它们发生变化

FireFox 3.5 缓存的 JSF 问题,wyciwyg ://prefix

java - GlassFish 如何将客户端请求映射到 session

php - Laravel 偶尔无法读取缓存

java - Guava CacheBuilder 最大尺寸

java - Java 中的多集交集操作

java - 如何调用 Function<Void,Void>.apply()?

java - 在 IntelliJ 或其他 IDE 中获取完整的 JDK 源代码