小编Mic*_*ael的帖子

使用MapMaker创建缓存

我想使用MapMaker创建一个缓存大对象的映射,如果内存不足,应该从缓存中删除.这个小小的演示程序似乎工作正常:

public class TestValue {
    private final int id;
    private final int[] data = new int[100000];

    public TestValue(int id) {
        this.id = id;
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("finalized");
    }  
}  


public class Main {

    private ConcurrentMap<Integer, TestValue> cache;
    MemoryMXBean memoryBean;

    public Main() {
        cache = new MapMaker()
                .weakKeys()
                .softValues()
                .makeMap();
        memoryBean = ManagementFactory.getMemoryMXBean();
    }

    public void test() {
        int i = 0;
        while (true) {
            System.out.println("Etntries: " + cache.size() + " heap: "  
                + memoryBean.getHeapMemoryUsage() …
Run Code Online (Sandbox Code Playgroud)

guava

8
推荐指数
2
解决办法
5902
查看次数

标签 统计

guava ×1