我想用Java计算两个HashMaps的内存使用量,我做了这两个方法。
1)我使用 visualVM ,我得到了以下结果。
只是Hashmap指针的大小不是这个Hashmap的实际内存使用量吗?
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的空间使用值。我是对的吗?
答案 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对象的大小。