guava的loadingcache什么时候删除过期的数据?
2019-04-19 本文已影响0人
黄云斌huangyunbin
错误答案一:根据过期策略,过期了就删除
这个是不对的,过期了,表示你get不到这个数据,但是还在内存中,只是对于用户不可见而已。
如何证明:
image.png
可以看到过期了,缓存中的数量并没有减少
错误答案二:过期的数据gc回收的时候,就会删除
这个也是不对的,gc只是对weakKeys或者weakValues的情况下才有用,否则是gc是没影响的。
image.png
正确答案一: cleanUp的时候会删除过期数据
image.pngcleanUp方法会清除所有segment的过期数据:
image.png
这个时候,很多人就疑问了,我平时并没有执行cleanUp方法啊,我的loadingcache的内存也没有撑爆啊。
正确答案二:put操作的时候,会cleanUp当前segment的数据
image.png默认情况下有4个segment,所以可以看到数据变化4次才会删除完
image.png