I am using java.lang.instrument package to get the memory size of java object (can be nested ).
I am using below to get Object Size :
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);
}
}
I have Person class having below fields :
private String name ;
private int age;
private Addresses addresses [] ;
Now need size of below person 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));
Now after executing this, I am getting output as :
size : 24
Issue is If i am iterating this loop 10 times, or 1000 times, or 100000 times, i am getting Size as 24.
I am expected that person object memory size should increase if number of times loop increased as person object is having more addresses.
Why java.lang.instrument.Instrumentation is not giving correct results ?