错误答案一:根据过期策略,过期了就删除
这个是不对的,过期了,表示你get不到这个数据,但是还在内存中,只是对于用户不可见而已。
如何证明:
![](https://img.haomeiwen.com/i7835103/5a2e4b22360cdde3.png)
可以看到过期了,缓存中的数量并没有减少
错误答案二:过期的数据gc回收的时候,就会删除
这个也是不对的,gc只是对weakKeys或者weakValues的情况下才有用,否则是gc是没影响的。
![](https://img.haomeiwen.com/i7835103/596830c0add8d95c.png)
正确答案一: cleanUp的时候会删除过期数据
![](https://img.haomeiwen.com/i7835103/6f0e48296102fdb5.png)
cleanUp方法会清除所有segment的过期数据:
![](https://img.haomeiwen.com/i7835103/f3b2fb83f8afad00.png)
这个时候,很多人就疑问了,我平时并没有执行cleanUp方法啊,我的loadingcache的内存也没有撑爆啊。
正确答案二:put操作的时候,会cleanUp当前segment的数据
![](https://img.haomeiwen.com/i7835103/054e54d4952a5d4c.png)
默认情况下有4个segment,所以可以看到数据变化4次才会删除完
![](https://img.haomeiwen.com/i7835103/e6c4797e6e751bf5.png)
网友评论