Java GUAVA缓存-动态计算权重 问题

Java GUAVA缓存-动态计算权重 问题,java,guava,Java,Guava,我正在尝试缓存一个集合,如果集合为空,我需要删除该项以节省内存。Guava Cache在创建条目时计算权重,而不是在每次写入/读取时计算权重。是否有任何变通方法或其他库可用于实现此目的? 谢谢你的帮助 缓存实例化 Cache Cache=CacheBuilder.newBuilder() .最大重量(1) .秤((秤)(k,v)->v.尺寸()==0?1:0) .build(); 当集存储在缓存中时,您是否正在更改其大小?如果是这样,我认为需要由代码负责修改集合以删除它,而不是缓存或集合。如果您

我正在尝试缓存一个集合,如果集合为空,我需要删除该项以节省内存。Guava Cache在创建条目时计算权重,而不是在每次写入/读取时计算权重。是否有任何变通方法或其他库可用于实现此目的?
谢谢你的帮助

缓存实例化
Cache Cache=CacheBuilder.newBuilder()
.最大重量(1)
.秤((秤)(k,v)->v.尺寸()==0?1:0)
.build();

集存储在缓存中时,您是否正在更改其大小?如果是这样,我认为需要由代码负责修改集合以删除它,而不是缓存或集合。如果您试图在集合中执行此操作,则必须循环遍历所有条目,以查看哪些条目可以删除。是的,集合正在更改。问题是我必须处理所有的并发性。如果你同时修改集合并假设它们存储在中央回购中,然后通过一些副业流程将它们从回购中删除,我相信你的设计很容易出错。如果逐出过程在另一个线程添加到集合的同时启动,该怎么办。我相信你需要在每个集合的使用上设置阻塞,并在阻塞线程中从共享集合中添加或删除。一个空的
set
非常便宜。试图缓存它的内存/cpu成本更高。相反,您可以考虑同步<代码> SETMultIMAP。如果在写入集合时使用
asMap().compute
函数,就可以实现目标。我不想节省内存或类似的东西。我对基于时间的驱逐感兴趣。
    Cache<String, Set<String>> cache = CacheBuilder.newBuilder()
            .maximumWeight(1)
            .weigher((Weigher<String, Set<String>>) (k, v) -> v.size() == 0 ? 1 : 0)
            .build();