谷歌番石榴缓存弱参考值没有提供驱逐通知

时间:2015-09-18 20:08:24

标签: java caching google-guava-cache

我在我们的应用程序中使用google guava基于下面的弱值。

CacheBuilder
            .newBuilder()
            .weakValues()
            .concurrencyLevel(Runtime.getRuntime().availableProcessors())
            .removalListener(removalListener)
            .build(cacheLoader);

删除缓存弱值后,不会立即调用删除侦听器。我必须基于此清除本机资源,因此我的程序结束时不会在本机端释放内存。这是一个众所周知的问题吗?

2 个答案:

答案 0 :(得分:2)

Google Guava docs中,它说明了以下内容:

  

使用CacheBuilder构建的缓存不会执行清理并逐步驱逐值""或者在价值到期后立即或任何类似的东西。相反,它在写入操作期间执行少量维护,或者在写入很少的情况下偶尔执行读取操作。

还解释了为什么他们采取了这个决定和可用的替代方案。

答案 1 :(得分:0)

如果JVM GC声称weakRef,我认为不会调用侦听器。那个听众应该只在驱逐政策触发驱逐时起作用。例如expireAfterWriter()或expireAfterAccess()