Java高并发高性能编程(多线程,协程,Actor,RxJava、Akka、Reactor)

guava的loadingcache什么时候删除过期的数据?

2019-04-19  本文已影响0人  黄云斌huangyunbin
错误答案一:根据过期策略,过期了就删除

这个是不对的,过期了,表示你get不到这个数据,但是还在内存中,只是对于用户不可见而已。
如何证明:


image.png

可以看到过期了,缓存中的数量并没有减少

错误答案二:过期的数据gc回收的时候,就会删除

这个也是不对的,gc只是对weakKeys或者weakValues的情况下才有用,否则是gc是没影响的。


image.png
正确答案一: cleanUp的时候会删除过期数据
image.png

cleanUp方法会清除所有segment的过期数据:


image.png

这个时候,很多人就疑问了,我平时并没有执行cleanUp方法啊,我的loadingcache的内存也没有撑爆啊。

正确答案二:put操作的时候,会cleanUp当前segment的数据
image.png

默认情况下有4个segment,所以可以看到数据变化4次才会删除完

image.png
上一篇下一篇

猜你喜欢

热点阅读