See my favorite project, MemoryMeasurer . A tiny example:
long memory = MemoryMeasurer.measureBytes(new HashMap());
:
Footprint footprint = ObjectGraphMeasurer.measure(new HashMap());
, , , , ( ). , , ( ) HashSet, , 1 ( ), 5 int, HashMap ( , HashSet HashMap) ..
. , , , .
Instrumentation Java 1.4 ( , ?!), memoryBytes . . - ( 32- ):
long memory = footprint.getObjects() * 8 + footprint.getReferences() * 4 +
footprint.getPrimitives().count(int.class) * 4 +
footprint.getPrimitives().count(long.class) * 8 + ...;
. 16:
long alignedMemory = (x + 15) & (~0xF);
, , , 16 , , , , ( - ). visitor ( MemoryMeasurer ObjectGraphMeasurer - , ), , , Instrumentation, Java 1.5.