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 ?
 
     
    