强制GC并进行堆转储显示,这些元素是从内存中收集的。
maxEntriesLocalHeap="10000"
eternal="false"
statistics="true"
overflowToDisk="false"
timeToIdleSeconds="1800"
memoryStoreEvictionPolicy="LFU"
transactionalMode="off"
从上面我看到,ehcache给人的印象是,元素已过期,这可能会导致我的代码逻辑刷新它们但在引擎盖下内存会被元素污染,直到我调用特定元素或getKeysWithExpiryCheck(),这不会让我使用ehcache作为有效的记忆管理器
如何在timeToIdleSeconds时间后将元素设为GS?如果在timeToIdleSeconds之上没有使用元素,我希望清理内存。
迈克尔
答案 0 :(得分:20)
Ehcache只会在放置元素并且缓存高于阈值时逐出元素。否则,访问这些过期元素将导致它们过期(并从缓存中删除)。没有线程在后台从Cache中收集和删除过期的元素。即使我不推荐它,因为这会影响Cache的性能(但如果内存使用更重要,这可能是一个公平的权衡),你可以让一个后台线程定期执行getKeysWithExpiryCheck()。
此外,如果内存消耗是主要问题,您可能需要查看新的Ehcache 2.5,它允许您(甚至在CacheManager级别)指定应该使用多少堆...