【问题标题】:will Guava Map Cache shrink when keys are removed删除键时 Guava Map Cache 会缩小吗
【发布时间】:2018-05-26 17:01:57
【问题描述】:
private Cache<Object, String> cache = CacheBuilder.newBuilder()
        .concurrencyLevel(4)
        .expireAfterAccess(24, TimeUnit.HOURS)
        .initialCapacity(1024)
        .maximumSize(1_00_000)
        .build();
private ConcurrentMap<Object, String> cacheMap = cache.asMap();

这是我的代码,它很简单,它只是创建一个 Guava 地图缓存。 问题是,如果我从这个映射中删除()键,GC 是否能够从这个映射中收回内存?不使用弱引用(我不存储嵌套对象,如 Set 或 Map 等...)?

【问题讨论】:

    标签: garbage-collection guava


    【解决方案1】:

    是的

    来自Guava's Cache.asMap javadoc(强调我的):

    将存储在此缓存中的条目的视图作为线程安全映射返回。 对地图的修改直接影响缓存。

    来自Guava's Cache Explained wiki page

    在任何时候,您都可以显式地使缓存条目无效,而不是等待条目被驱逐。

    您可能想查看整个 wiki 页面,而不是我突出显示的部分。

    【讨论】:

    • 谢谢,但 invalidate() 用于驱逐功能,而不是我问的问题。我想知道在幕后,Guava 缓存的 impl 将 arrayRef 的大小缩小到对象,在它之前扩展之后。
    • @linehrr Yes, according to the source code: LocalManualCache 返回内部 ConcurrentMapasMap。所以底层地图确实缩小了。
    猜你喜欢
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2016-02-06
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多