Nesne tarafından alınan boyutu tahmin etmek istiyorum. yüzden sadece Instrumentation.getObjectSize(myObject)
kullanabilir yapmak içinNesne boyutu (dahil olan nesneler dahil) nasıl bulunur?
kullanabilirsiniz nesnenin boyutunu elde etmek için, ama bu bana "sığ" boyutunu verecektir. Başvurduğu nesnelerin boyutları da dahil olmak üzere Nesnenin boyutunu almak istiyorum.
Düşüncem şu ki, nesnenin boyutunu elde etmem gerekiyor, sonra tüm nesnenin statik veya ilkel olmayan alanlarını geçiyor ve işaret ettikleri nesnelerin boyutunu bulup yinelemeli olarak yapıyorlar.
Elbette, bir nesne boyutunu birkaç kez saymak ya da bir döngüye takılmak istemiyorum. Bu yüzden, zaten saydığımız boyuttaki nesneleri hatırlamak zorundayım.
Bunu yapmak için daha hızlı veya daha standart bir yol var mı?
Benim kod şöyle görünür:
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;
}
olası yinelenen [Java da, bir nesnenin boyutunu belirlemek için en iyi yolu nedir?] (Http://stackoverflow.com/questions/52353/in-java-what-is-the- bir nesnenin boyutunu belirlemek için en iyi yol) – jlordo
https://code.google.com/p/memory-measurer/ https://github.com/twitter/commons/blob/master /src/java/com/twitter/common/objectsize/ObjectSizeCalculator.java –