空番石榴缓存大小?

时间:2016-11-29 20:29:26

标签: java caching google-guava-cache

只是想知道系统是否为空番石榴缓存预先分配了空间?我是guava缓存的新手,有人可以帮我理解这个问题吗?

我也用以下代码测试它:

    long preMemUsage = Runtime.getRuntime().totalMemory() -Runtime.getRuntime().freeMemory();
    Cache<String, CountObject> cache = CacheBuilder.newBuilder()
        .maximumSize(12000)
        .expireAfterAccess(7200,TimeUnit.SECONDS)
        .concurrencyLevel(10)
        .recordStats().build();
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    long postMemUsage = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
    System.out.println("Before: " + preMemUsage);
    System.out.println("After: " + postMemUsage);

奇怪的是使用后的内存减少了.....不知道为什么。 有人可以解释一下。

非常感谢:)

1 个答案:

答案 0 :(得分:1)

神秘的是垃圾收集器的方式。它几乎是可能的,你应该在尝试计算已用内存之前明确地调用垃圾收集器。在计算System.gc()preMemUsage之前使用postMemUsage,您应该可以获得更准确的结果。