我在我们的应用程序中使用google guava基于下面的弱值。
CacheBuilder
.newBuilder()
.weakValues()
.concurrencyLevel(Runtime.getRuntime().availableProcessors())
.removalListener(removalListener)
.build(cacheLoader);
删除缓存弱值后,不会立即调用删除侦听器。我必须基于此清除本机资源,因此我的程序结束时不会在本机端释放内存。这是一个众所周知的问题吗?
答案 0 :(得分:2)
在Google Guava docs中,它说明了以下内容:
使用CacheBuilder构建的缓存不会执行清理并逐步驱逐值""或者在价值到期后立即或任何类似的东西。相反,它在写入操作期间执行少量维护,或者在写入很少的情况下偶尔执行读取操作。
还解释了为什么他们采取了这个决定和可用的替代方案。
答案 1 :(得分:0)
如果JVM GC声称weakRef,我认为不会调用侦听器。那个听众应该只在驱逐政策触发驱逐时起作用。例如expireAfterWriter()或expireAfterAccess()