首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IMap.delete与IMap.evict的区别

IMap.delete与IMap.evict的区别
EN

Stack Overflow用户
提问于 2019-01-16 17:09:07
回答 1查看 1.4K关注 0票数 0

我目前正在使用一个简单的Hazelcast IMAP<String, byte[]>

如果我使用myMap.delete(key)从映射中删除条目,则该值将成功地从映射中删除。与此并行,我监视JVM,并且我看到对象从未被GC从堆内存中移除(必须仍然有对对象的引用)。

在我看来,似乎只有我们的Hazelcast TTL Eviction policy清除了heap。所以我的问题是,我应该使用myMap.evict(key)而不是delete来清除Java内存吗?如果是,为什么?evictdeleteIMap上的区别是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-06-18 07:53:55

如果Imap由DB表支持

  • 删除:从Imap & DB表中删除条目
  • 驱逐:仅从Imap移除入口。它仍然存在于DB表中。

驱逐是由HZ内部使用,以清除缓存,必须删除根据驱逐策略。

现在,这个驱逐是从Imap中发生的,而不是对应于它的DB表。

以例

案例1:Hz有两个条目:(K1,V1) (K2,V2)

驱逐(K1)

此时,Imap只有一个值(K2,V2),DB表将同时包含两个条目(K1,V1) (K2,V2)。

Get(K1)

查找将以这种方式进行-> NearCache -> DB表

在这里,您将从DB表获得响应,缓存(Iamp)将再次被填充(K1,V1)。

案例2:Hz有两个条目:(K1,V1) (K2,V2)

移除(K1)

条目现在从Imap和DB表中删除。

Get(K1)结果为空

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54222044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档