何时使用Java Cache以及它与HashMap的区别?

时间:2016-06-08 06:50:01

标签: java caching hashmap jcache

我已经通过javax.cache.Cache了解它的用法和行为。据说,

  

JCache是​​一种类似Map的数据结构,提供临时存储   申请数据。

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

3 个答案:

答案 0 :(得分:7)

缓存通常具有比地图更多的管理逻辑,这些只是一个或多或少的简单数据结构。

一些概念,JCaches可以实现

  • 到期:条目可能会在一段时间后或自上次使用后过期并从缓存中删除
  • 驱逐:如果空间有限,则会从缓存中删除元素。可以有不同的驱逐策略。 LRU,FIFO,......
  • 分发:即在群集中,而地图是JVM的本地
  • 持久性:缓存中的元素可以是持久的,并且在重新启动后显示,Map的内容将丢失
  • 更多内存:缓存实现可能使用比JVM Heap提供的内存更多的内存,使用一种名为 BigMemory 的技术,其中对象被序列化为单独分配的bytebuffer。此JVM外部存储器由OS(分页)而非JVM
  • 管理
  • 按值或按引用存储键和值的选项(在地图中您自己处理)
  • 应用安全性的选项

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

答案 1 :(得分:1)

以下是两个对象之间的五个主要差异。

  

与java.util.Map不同,Cache:

     
      
  • 不允许使用null键或值。尝试使用null将导致java.lang.NullPointerException
  •   
  • 提供从javax.cache.integration.CacheLoader(read-through-caching)读取值的能力   请求的值不在缓存中
  •   
  • 提供了在javax.cache.integration.CacheWriter(写入缓存)中写入值的能力   正在创建/更新/从缓存中删除的值
  •   
  • 提供观察缓存条目更改的能力
  •   
  • 可以捕获并衡量运营统计数据
  •   

Source : GrepCode.com

答案 2 :(得分:0)

大多数情况下,缓存实现使那些缓存的对象脱离堆(GC不能访问)。 GC跟踪Java中分配的每个对象。想象一下,您的内存中有数百万个对象。如果没有这些对象,请相信我,GC将使您的应用程序性能变得糟透了。