2016-11-29 1 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

System.gc()は何の違いもないと思っていますが、正確に、どこで 'preMemUsage'を計算しているのですか? – JiriS

+0

はpostMemUsageと同じです。それはメモリ使用量がまだ低下していることが判明しました。 :) – Nathan