垃圾收集将如何影响存储在堆上的ehcache元素?

时间:2016-03-08 21:35:25

标签: performance hibernate garbage-collection ehcache

我正在使用Hibernate 4.3.11.Final和随附的ehcache版本。我有一个简单的缓存配置,如下所示:

<defaultCache maxElementsInMemory="10000"
     eternal="false"
     timeToIdleSeconds="86400"
     timeToLiveSeconds="86400"
     overflowToDisk="false"
     memoryStoreEvictionPolicy="LRU">
</defaultCache> 
<cache name="main" />

我的问题是,因为内存设置是堆的一部分而且堆定期进行垃圾收集,当我的缓存中的某些条目被垃圾收集时会发生什么?是否与从缓存中逐出的条目相同?

1 个答案:

答案 0 :(得分:0)

垃圾收集(GC)永远不会从具有根路径的缓存中收集条目,因为它们被缓存本身引用。

要回答关于offheap的问题,假设你决定在缓存中有500k映射,每个映射都是10k字节。这相当于近5GB的缓存数据。运行时对GC有影响的数据,因为它需要围绕它执行操作 - 标记,促销和压缩取决于GC impl。因此,offheap通过将对象放置在GC发生的区域之外来解决此问题,以便使应用程序能够以更小的堆运行,从而减少GC暂停。

所有这一切并不矛盾,因为GC永远不会删除缓存条目。相反 - 一旦被驱逐,过期或被替换,只要没有更多的根路径,GC的前映射就变得免费。

这就是this answer中给出的解释所说的。