Some years back Javaworld had an article on determining the size of composite and potentially nested Java objects, they basically walk through creating a sizeof() implementation in Java. The approach basically builds on other work where people experimentally identified the size of primitives and typical Java objects and then apply that knowledge to a method that recursively walks an object graph to tally the total size.
It is always going to be somewhat less accurate than a native C implementation simply because of the things going on behind the scenes of a class but it should be a good indicator.
Alternatively a SourceForge project appropriately called sizeof that offers a Java5 library with a sizeof() implementation.
P.S. Do not use the serialization approach, there is no correlation between the size of a serialized object and the amount of memory it consumes when live.