何时将内存分配给Java中的对象(PO​​JO)

时间:2017-04-11 00:53:59

标签: java jvm

Class Abc {
    Integer a;
    Integer b;
    Integer c;
    getters();
    setters();
}

当我创建对象Abc abc = new Abc(),即12字节(整数为4字节)或我为setA(10).等变量设置一些值时,是否会分配内存?

1 个答案:

答案 0 :(得分:1)

  

当我创建对象时,内存是否被分配Abc abc = new Abc(),即12字节(整数为4字节)。

是。更具体地说,它在调用Abc类的构造函数链之前立即分配。

但是,分配的空间还包括一些标头信息,示例中的数量取决于JVM是使用32位还是64位地址进行引用。 (Integer类型是引用类型!)

(假设32位引用,大小可能是3 x 4字节+ 8字节标头+ 4字节填充;即24字节。但这是特定于JVM实现的。)

  

或当我为setA(10)等变量设置一些值时。

这将取决于setA方法的签名及其实现方式。问题在于是否存在int - >的自动装箱。 Integer以及发生的地点/时间。

但是在所有情况下,(可能)分配的Integer个对象不属于Abc对象。 Abc对象具有用于保存对Integer个对象的引用的字段,这些字段的空间是Abc对象的一部分...这意味着在分配该对象时分配它当字段设置时。