With java.SizeOf you can measure the real memory size of your Java objects. Download it here
The project is a little java agent what use the
package java.lang.Instrument introduced in Java 5 and is
released under GPL license.
java.sizeOf is in early stage of development
but it's quite usable and it was very useful for us to
know the memory size of our HttpSession's objects. The best
use of the
library is inside an aspect to avoid dependencies in your
code.
import net.sourceforge.sizeof ... SizeOf.skipStaticField(true); //java.sizeOf will not compute static fields SizeOf.skipFinalField(true); //java.sizeOf will not compute final fields SizeOf.skipFlyweightObject(true); //java.sizeOf will not compute well-known flyweight objects System.out.println(SizeOf.deepSizeOf(<your object>)); //this will print the object size in bytesYou can dump object's size setting the min size to log (if you don't specify an output stream standard out is used):
SizeOf.setMinSizeToLog(1024); //min object size to log in bytes SizeOf.setLogOutputStream(new FileOutputStream("<your log file>"));Use the humanReadable() method to get the object size in byte, kilo or mega (if you need giga your in trouble guy!):
SizeOf.humanReadable(SizeOf.deepSizeOf(<your object>));
2. start your application with the following JVM parameter:
-javaagent:/path_to/sizeOf.jar
3. have fun!
Please
use SourceForge forum for reporting any bug, comment or suggestion.