Zuerst einmal: willst du die Größe eines Objektes, oder ein Äquivalent zu size_of()??
size_of in C/C++ wird statisch ausgewertet, kann dir also "nur" die Größe eines Datentyps geben. Wie viel Byte ein String belegt kann es dir nicht sagen (gibt dann "4" oder "8" zurück, je nachdem ob es ein 64 oder 32 Bit Programm werden soll).
Java hat so etwas so weit ich weiß nicht. Aber schau dir mal das
"Eclipse Test & Performance Tools Platform Project" an.
Dort gibt es eine Memory Analysis mit der du dir genau die Instanzen der Klassen aufzählen lassen kannst, mit Größe (auch nur statisch).
Willst du nun wirklich die Größe eines Objektes mit seinen Feldern, so kannst du natürlich über Reflections etwas erreichen. Also alle Felder einer Klasse abgrasen, die Größen der einfachen Typen aufaddieren und bei anderen Rekursiv weitermachen. Beispiel:
for(Field f:anInstance.getClass().getDeclaredFields())
{
if(f.getType().getName().equals("int"))
{
sizeCounter+=4;
continue;
}
//...
sizeCounter+=4;//is eine Referenz
getSizeOf(f.get(anInstance));
}
return sizeCounter;
Vergiss nicht eine Hashtabelle gegen Zyklen einzubauen ;-)
Auf Sourceforge gibts ein Projekt, das genau so etwas umsetzen will, scheint aber noch
nicht ganz ausgereift:
Java.sizeOf