java中类的内存分配?

时间:2011-10-06 08:54:42

标签: java memory inheritance object

B类继承了A类。现在,当我们创建一个B类型的对象时,为B分配的内存是多少?是包括A和B,还是内存分配的任何其他程序?

3 个答案:

答案 0 :(得分:1)

是。 B类对象在分配时包含A的一部分。无需担心(即无需分配B和A)。

答案 1 :(得分:1)

当您通过new B()实例化B时,对A的构造函数进行隐式(或显式)调用。因此,对两个类都进行了内存分配。

更具体地说,如果A声明三个整数成员而B(扩展A)声明2个浮动成员,则每个新B将分配三个整数和两个浮点数。

答案 2 :(得分:1)

当你创建对象B时,让我们说通过调用默认构造函数

B myObject = new B();

然后JVM分配一个或多或少的对象:

  • B中显式声明的每个字段都有足够的内存(每个字段通常大约4-8个字节,但它与类型和主机系统的区别很大)
  • A及其祖先继承的每个最终字段都有足够的内存
  • 足够的内存包含对调度向量的引用(也应该在4-8字节左右)

编译器使用调度向量来存储可以在给定对象上调用的每个方法的地址,它依赖于对象的类而不是对象本身的实例(每个对象B都具有相同的界面毕竟!)

所以你不需要分配A,因为没有单独的对象A.你没有实例化2个独立的对象。当你创建B时,你正在创建一个A的“专用”版本,它可以被视为A以及更多东西。所以只需要分配B(但请记住,B也有其祖先拥有的一切)