EhCache 版本:2.8.4
JVM 版本:11.0.7
缓存配置:
<ehcache>
<cache
name="myCache"
maxBytesLocalHeap="100m"
eternal="true"
overflowToOffHeap="false"
overflowToDisk="true"
diskPersistent="false"
maxEntriesLocalDisk="2000000"
/>
</ehcache>
我注意到当使用溢出到磁盘的缓存时(如在上面的配置中),内存中有一个 DiskStore 对象似乎无限增长。我认为限制磁盘使用的条目数量maxEntriesLocalDisk
可能会阻止这种情况发生,但它似乎没有帮助。
最近我从我的应用程序中查看了一个堆转储,我可以看到 DiskStore 引用了超过 17M 的缓存键,尽管maxEntiresLocalDisk
值设置为 2M。这消耗了超过 2.5GB 的内存,这并不理想,因为应用程序只分配了 4GB 的堆。
有没有办法限制 DiskStore 引用了多少缓存键以防止它变得如此之大?我正在考虑Cache.evictExpiredElements()
制定某种时间表,看看是否有帮助,但希望maxEntriesLocalDisk
能避免这样做。我实际上确定条目是否已过期,因此可能evictExpiredElements
无济于事。