在java中计算HashMap的内存使用情况

时间:2016-03-29 19:10:15

标签: java visualvm

我想用Java计算两个HashMaps的内存使用量,我做了这两个方法。

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

我刚刚问了这个问题,以确保第二个结果是正确的这两个Hashmaps的空间使用值。我是对的吗?

2 个答案:

答案 0 :(得分:2)

IMHO在运行时查找java对象实例内存占用的最佳(精确且易于实现)方法是使用Instrumentation接口并实现简单的java代理。

这是一种常见的做法,Web中有大量的方法和代码示例。 Just one example(您可以将其作为起点)

答案 1 :(得分:2)

请参阅In Java, what is the best way to determine the size of an object?。有一个很简单的例子来说明如何测量任何java对象的大小。