Ich möchte die Größe eines Objekts schätzen. Um die Größe des Objekts zu erhalten, kann ich einfachSo finden Sie die Objektgröße (einschließlich enthaltener Objekte)
verwenden. Dazu könnte ich Instrumentation.getObjectSize(myObject)
verwenden, aber das wird mir eine "seichte" Größe geben. Ich möchte die Größe des Objekts einschließlich der Größen der Objekte ermitteln, auf die es verweist.
Mein Gedanke ist, dass ich die Größe des Objekts erhalten muss, dann durch alle Felder des Objekts gehen, die nicht statisch oder primitiv sind und die Größe für die Objekte erhalten, auf die sie zeigen, und dies rekursiv tun.
Natürlich möchte ich eine Objektgröße nicht ein paar Mal zählen oder in einer Schleife stecken bleiben, also muss ich mich an die Objekte erinnern, deren Größe wir bereits gezählt haben.
Gibt es eine schnellere oder eine Standardmethode, dies zu tun?
Mein Code sieht wie folgt aus:
public static long getObjectSize(Object obj)
{
return getObjectSize(obj, new HashSet<Object>());
}
private static long getObjectSize(Object obj, Set<Object> encountered)
{
if (encountered.contains(obj))
{
// if this object was already counted - don't count it again
return 0;
}
else
{
// remember to not count this object's size again
encountered.add(obj);
}
java.lang.reflect.Field fields[] = obj.getClass().getFields();
long size = Instrumentation.getObjectSize(obj);
// itereate through all fields
for (Field field : fields)
{
Class fieldType = field.getType();
// only if the field isn't a primitive
if (fieldType != Boolean.class &&
fieldType != Integer.class &&
fieldType != Long.class &&
fieldType != Float.class &&
fieldType != Character.class &&
fieldType != Short.class &&
fieldType != Double.class)
{
// get the field's value
try
{
Object fieldValue = field.get(obj);
size += getObjectSize(obj, encountered);
}
catch (IllegalAccessException e) {}
}
}
return size;
}
möglich Duplikat [In Java, was ist der beste Weg, um die Größe eines Objekts zu bestimmen?] (Http://stackoverflow.com/questions/52353/in-java-what-is-the- best-way-zu-der-Größe-eines-Objekts zu bestimmen) – jlordo
https://code.google.com/p/memory-measurer/ https://github.com/twitter/commons/blob/master /src/java/com/twitter/common/objectsize/ObjectSizeCalculator.java –