何时使用Java Cache,以及它与HashMap有何不同



我已经了解了javax.cache.Cache的用法和行为。据称,

JCache是一种类似Map的数据结构,它提供应用程序数据。

JCache和HashMap将元素存储在本地堆内存中,默认情况下不具有持久性行为。通过实现自定义的CacheLoaderCacheWriter,我们可以实现持久性。除此之外,什么时候使用?

缓存通常比映射有更多的管理逻辑,映射只是一个或多或少简单的数据结构。

一些概念,JCaches可能实现

  • 过期:条目可能在一段时间后或上次使用后过期并从缓存中删除
  • 逐出:如果空间有限,将从缓存中删除元素。可以有不同的驱逐策略,例如LRU、FIFO
  • 分布:即在集群中,而映射是JVM的本地映射
  • 持久性:缓存中的元素可以是持久的,并且在重新启动后存在,Map的内容只是丢失
  • 更多内存:缓存实现可能使用比JVM堆提供的内存更多的内存,使用一种名为BigMemory的技术,其中对象被序列化到单独分配的字节缓冲区中。这个JVM外部内存由操作系统(分页)管理,而不是JVM
  • 通过值或引用存储键和值的选项(在地图中,您可以自己处理)
  • 应用安全性的选项

其中一些是JCache的一般概念,一些是缓存提供程序的具体实现细节

以下是两个对象之间的五个主要区别。

与java.util.Map不同,缓存:

  • 不允许空键或值。尝试使用null将导致java.lang.NullPointerException
  • 当请求的值不在缓存中
  • 当正在从缓存中创建/更新/删除的值
  • 提供观察缓存项更改的能力
  • 可以捕获和测量操作统计数据

来源:GrepCode.com

大多数情况下,缓存实现会使那些缓存的对象远离堆(GC无法访问)。GC跟踪在java中分配的每个对象。想象一下,你的内存中有数百万个对象。如果这些对象不是堆外的,相信我,GC会让你的应用程序性能变得糟糕。

相关内容

  • 没有找到相关文章

最新更新