我在基于weakValues的应用程序中使用了google guava,如下所示。
CacheBuilder
.newBuilder()
.weakValues()
.concurrencyLevel(Runtime.getRuntime().availableProcessors())
.removalListener(removalListener)
.build(cacheLoader);删除缓存弱值后,不会立即调用删除侦听器。我必须基于此来清除本机资源,因此我的程序在本机结束时不会释放内存。这是一个已知的问题吗?
发布于 2015-09-19 05:20:41
在Google Guava docs中,它显示以下内容:
使用CacheBuilder构建的
缓存不会“自动”执行清理和逐出值,也不会在值过期后立即执行任何操作。取而代之的是,它在写操作期间执行少量维护,或者在偶尔的读操作期间(如果很少写操作)。
还解释了他们为什么做出这一决定以及可用的替代方案。
发布于 2017-12-13 04:33:45
如果JVM声明了weakRef,我不认为监听程序会被调用。只有当逐出策略触发逐出时,该监听程序才能工作。例如expireAfterWriter()或expireAfterAccess()
https://stackoverflow.com/questions/32660230
复制相似问题