当前位置: 首页 > 知识库问答 >
问题:

HashMap vs ConcurrentHashMap vs LoadingCache(番石榴)

景仲渊
2023-03-14

要在spring boot应用程序中本地缓存一些数据,在读/写操作方面哪种技术更好?HashMap vs ConcurrentHashMap vs LoadingCache(Guava library)我试着在每一个上面写和读操作,HashMap是最快的,LoadingCache是最慢的,那么我们为什么要使用LoadingCache,目的是什么?

编辑:应用程序是多线程的。此外,缓存的最大大小、过期时间等功能也可能受到影响。此外,主要目的是提高读取速度。

共有1个答案

万修为
2023-03-14

如果应用程序是多线程的,并且缓存由线程共享,则HashMap不是一个选项。它不是线程安全的,如果您使用锁等来保护它,那么锁定很容易成为并发瓶颈。

如果您的应用程序需要缓存为LRU,或者有一些其他“智能”策略来决定驱逐什么,那么并发HashMap并不提供这样做的好方法。如果您希望您的缓存对内存压力敏感(例如使用弱引用键),那么ConnettHashMap也不会这样做。

这就是GuavaCache类的用武之地。阅读本文,了解它们提供的功能。

底线是,虽然HashMap在单线程基准测试中性能最强,但它可能无法提供您需要的所有功能。性能不是一切。

我的建议是先让代码正常工作。。。然后看看如何优化它。偶尔中断或填满内存的超高速缓存实现不是一个好主意。而且,缓存读/写性能很有可能不会很关键。

 类似资料:
  • 问题内容: 刚刚发现了Guava库项目。 这些与GWT兼容吗? 问题答案: 从该页面的介绍性PDF中, 您可以在…上使用这些库。 在JDK 6上 在Android上, 我们认为。需要志愿者来帮助我们进行测试。 在Google App Engine上, 我们认为。需要志愿者来帮助我们进行测试。 在GWT上-参差不齐! 由于GWT的JDK库支持 可能参差不齐,也许是2/3,所以到目前为止,这些库中的东

  • 问题内容: 我想知道哪个更有效,为什么? 1) 要么 2) 问题答案: 我看不出您为什么要在此处使用builder的任何原因: 比在这种情况下制作一个更具可读性, 不会推断通用类型,并且在用作单行代码时必须自己指定类型, (来自docs) 在与另一个不可变集合调用时 做得很好( 尝试避免在安全的情况下实际复制数据 ), (从源) 调用以前创建的,同时避免为零元素和一元素集合创建任何列表(分别返回空

  • 我想为番石榴设个坑(http://pitest.org/)进行突变熟练度测试,但我在尝试运行时出现以下错误。这是我得到的错误: 基本上,要么PIT没有检测到测试,要么测试在PIT中运行不正常,所有测试都失败了。我读了这篇文章:JUnit测试通过,但PIT说套件不是绿色的,我认为“您的代码库是否包含可变静态状态?(例如在单例中)”是问题所在,但我不知道如何修复它。如果测试套件有一些隐藏的顺序依赖关系

  • 我的 Spark 版本是 2.2.0,它在本地工作,但在具有相同版本的 EMR 上,它给出了以下异常。

  • 问题内容: 在我的Java代码中,我通过以下方式使用Guava的Multimap(com.google.common.collect.Multimap): 此处,Multimap键是URL的一部分,而值是URL的另一部分(转换为整数)。现在,我分配了JVM 2560 Mb(2.5 GB)堆空间(通过使用Xmx和Xms)。但是,它只能存储900万个这样的(键,值)整数对(大约1000万个)。但是,理

  • 问题内容: 我在commons- lang中使用了简单的DTO。现在,我尝试使用Google Guava代替Apache Commons库。我在番石榴找到了。但是如果班上有很多成员,这太冗长了。例如: 如果我使用commons-lang,则简单得多: 有什么更好的方法可以用Guava而不是commons-lang 来实现? 番石榴文件 问题答案: 我有番石榴的小招。我将 IntelliJ IDEA