计算地图条目的内存

时间:2013-12-08 20:11:46

标签: java dictionary

我有一个Map(字符串,字符串),我想找到一个条目的内存大小和总共一个Map。我在某处读到了Instrumentation可能有用(Instrumentation)。有没有人有想法?

提前致谢。

2 个答案:

答案 0 :(得分:1)

使用ObjectOutputStream将对象写入ByteArrayOutputstream并检查结果字节数组的长度。

显然你的Map.Entry需要实现Serializable。

public int getSizeInBytes(Serializable someObject) {
    ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
    ObjectOutputStream objectOut = new ObjectOutputStream(byteOut);
    objectOut.writeObject(someObject);
    objectOut.flush();
    return byteOut.toByteArray().length;
}

public int getSizeBits(Serializable someObject) {
    return getSizeInBytes(someObject) * 8;
}

答案 1 :(得分:1)

java.util.AbstractMap.SimpleEntry的空白实例对于64位JVM应为24字节,对于32位JVM应为12字节。这是@PeterLawrey的一项技术,我发现它很有用,基于MemoryUsageExamplesTest

System.out.printf("The average memory used by simple entry is %.1f bytes%n", new SizeofUtil() {
    @Override
    protected int create() {
        Map.Entry<String, String> e = new AbstractMap.SimpleEntry<String, String>(null, null);
        return 1;
    }
}.averageBytes());