2016-11-29 105 views
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); 

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

非常感谢:)

+0

神秘是垃圾收集器的方式。这是非常可能的,你应该在尝试计算已用内存之前明确地调用垃圾回收器。尝试了System.gc()' – JiriS

回答

1

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

+0

。产量仍然下降。 – Nathan

+0

我看不清楚在哪里准确计算'preMemUsage' – JiriS

+0

与postMemUsage相同,尽管我不认为System.gc()有什么区别,我试过了。事实证明,内存使用率仍然下降。 :) – Nathan