加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – ehcache在驱逐时不会从内存中删除元素

发布时间:2020-12-14 05:02:19 所属栏目:Java 来源:网络整理
导读:ehcache 2.5 timeToIdleSeconds =“1800”(30分钟),所以我希望元素在空闲30分钟后逐出 最后一个元素使用30分钟我仍然可以看到缓存中充满了元素 强制GC并进行堆转储显示,这些元素仍然在内存中 getSize()返回正数,getKeys()按预期方式返回键(getKeys()不检查元
> ehcache 2.5
> timeToIdleSeconds =“1800”(30分钟),所以我希望元素在空闲30分钟后逐出
>最后一个元素使用30分钟我仍然可以看到缓存中充满了元素
>强制GC并进行堆转储显示,这些元素仍然在内存中
> getSize()返回正数,getKeys()按预期方式返回键(getKeys()不检查元素到期)
>获取特定元素,尽管结果为NULL值,意味着它已过期.
> getKeysWithExpiryCheck()显示,该缓存为空,所有元素都已被删除
>强制GC和采取堆转储显示,从内存收集的元素.
maxEntriesLocalHeap="10000"
eternal="false"
statistics="true"
overflowToDisk="false"
timeToIdleSeconds="1800"
memoryStoreEvictionPolicy="LFU"
transactionalMode="off"

从上面我看到,这个ehcache让人印象深刻,那些元素过期了,这可能导致我的代码逻辑刷新,但是在引擎内存中直到被元素污染,直到我调用特定元素或getKeysWithExpiryCheck(),这不让我使用ehcache作为有效的记忆管理器

如何使元素成为GS后的TimeToIdleSeconds时间?如果元素没有被使用超过timeToIdleSeconds,我想要清理内存.

迈克尔

解决方法

Ehcache只会在放置元素并且缓存高于阈值时驱逐元素.否则,访问那些过期的元素将导致它们被过期(并从缓存中删除).没有线程从后台从缓存中收集和删除过期的元素.即使我不推荐它,因为这将影响缓存的性能(但如果内存使用更重要,这可能是一个公平的权衡),您可以有一个后台线程在一定的时间间隔内执行getKeysWithExpiryCheck().

另外,如果内存消耗是一个重要的一点,您可能需要查看新的Ehcache 2.5,即使在CacheManager级别也可以指定多少堆使用…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读