Class Abc {
Integer a;
Integer b;
Integer c;
getters();
setters();
}
当我创建对象Abc abc = new Abc()
,即12字节(整数为4字节)或我为setA(10).
等变量设置一些值时,是否会分配内存?
答案 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
对象的一部分...这意味着在分配该对象时分配它当字段设置时。