Calculate memory of a Map Entry

后端 未结 2 1164
花落未央
花落未央 2021-01-14 21:09

I have a Map(String, String) and I want to find the memory size of an Entry and the Map in total. I read somewhere that Instrumentation might be useful (Instrumentation). Do

相关标签:
2条回答
  • 2021-01-14 21:59

    Use ObjectOutputStream to write the object to a ByteArrayOutputstream and check the length of the resultant byte array.

    Obviously your Map.Entry will need to implement 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;
    }
    
    0 讨论(0)
  • 2021-01-14 22:07

    A blank instance of java.util.AbstractMap.SimpleEntry should be 24 bytes for 64-bit JVM and 12 bytes for 32-bit JVM. Here is a technique by @PeterLawrey I found useful, based on 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());
    
    0 讨论(0)
提交回复
热议问题