2016-03-29 30 views
3

我想計算Java中兩個HashMap的內存使用情況,並執行了這兩種方法。在java中計算HashMap的內存使用情況

1)我用visualVM我得到如下結果。

它只是Hashmap指針的大小而不是這個Hashmap的實際內存使用量?

因爲它只是使用''67283648''字節。 enter image description here

2)我運行下面的代碼填充兩個HashMaps,結果得到了''576132056''字節。

Runtime runtime = Runtime.getRuntime(); 
    long memory = runtime.totalMemory()- runtime.freeMemory(); 
    HashMap<String, TypePosting> typeInvIndex=qpu.loadInvTypeIndex(); 
    HashMap<Integer,String> map=qpu.loadMapTypeEntityId(); 
    long memory1 = runtime.totalMemory()- runtime.freeMemory(); 
    System.out.println(memory1- memory); 

我剛纔問了這個問題,以確保我的第二個結果是正確的這兩個哈希表的空間使用的正確值。我對麼?

+3

我會在任何情況下信任#2作爲測量技術。 –

+1

並儘可能#1變,那就是在哈希映射,它不佔'HashMap's完整的內存消耗通常直接採取節點對象的字節數。 –

+0

路易,我只是好奇,越來越運行情況足跡哪些方法你在谷歌使用?或者你會如何解決這個問題?提前致謝 – Cootri

回答

2

恕我直言,在運行時查找的java對象實例的內存佔用最好的(精確和易於實施)的方法是使用Instrumentation接口和實現簡單的Java代理。

這是一種常見的做法,Web上有很多方法和代碼示例。 Just one example(您可以用作起點)