Я использую пакет java.lang.instrument, чтобы получить объем памяти объекта Java (может быть вложенным).
Я использую ниже, чтобы получить Размер объекта:
import java.lang.instrument.Instrumentation;
public class ObjectSizeFetcher {
private static Instrumentation instrumentation;
public static void premain(String args, Instrumentation inst) {
instrumentation = inst;
}
public static long getObjectSize(Object o) {
return instrumentation.getObjectSize(o);
}
}
У меня есть класс Person с полями ниже:
private String name ;
private int age;
private Addresses addresses [] ;
Теперь нужен размер объекта ниже: Object:
Person person = new Person();
person.setName("aa");
person.setAge(11);
Addresses addresses [] = new Addresses[2000];
for(int i = 0 ; i < 1000 ; i ++){
addresses[i] = new Addresses();
addresses[i].setAddress1("dadadadafasfasf"+i);
addresses[i].setAddress2("dadadadafasfasfdasdsadsd"+i);
}
person.setAddresses(addresses);
System.out.println("size : " + ObjectSizeFetcher.getObjectSize(person));
Теперь, после выполнения этого, я получаю вывод:
размер: 24
Проблема в том, что если я повторяю этот цикл 10 раз, или в 1000 раз, или в 100000 раз, я получаю Размер как 24.
Я ожидаю, что объем памяти объекта персонажа должен увеличиться, если число циклов увеличилось, поскольку объект персона имеет больше адресов.
Почему java.lang.instrument.Instrument не дает правильных результатов?