java - 在 Java 中实现回写缓存

标签 java caching soft-references

我正在尝试实现回写缓存。我正在尝试使用软引用,但在执行事后回写时遇到问题,因为引用在添加到 gcQueue 之前已被清除,因此我无法访问引用对象。

解决方案?

最佳答案

你可以试试Guava's Mapmaker .

例子:

final ConcurrentMap<Long, Integer> cache = new MapMaker()
        .softValues().expiration(20,TimeUnit.MINUTES)
        .makeComputingMap(new Function<Long, Integer>() {
              @Override
            public Integer apply(Long arg0) {
                return null;
            }
            });

关于 MapMaker 的问题:

备选方案:

使用供应商类的 memoizeWithExpiration这也是 guava 库的一部分。

关于java - 在 Java 中实现回写缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4130684/

相关文章:

java - EhCache DiskStore在内存中

c++ - 为什么这个递归 C++ 函数有如此糟糕的缓存行为?

java - 第一次执行时缓慢的 Hibernate 查询

java - Java 中的 map 大小不正确。如果我将 Key 和 Value 包装在 WeakReference 中,然后添加到 HashMap 中,打印的大小与预期不同

android - 使用 LruCache 并避免 OutOfMemoryException

java - 当我们需要实现 Runnable 以及子类 Thread 时的场景

java - 文件下载时出错

java - 在 Spring Security 中列出内存中的用户?

java - Java中将数据实时存储在二维数组中

java - Soft Reference中GC在java中的作用