0

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

我也用下面的代码测试它:

    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);

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

非常感谢 : )

4

1 回答 1

1

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

于 2016-11-29T21:35:58.487 回答