java中类的内存分配?

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

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

B myObject = new B(); 

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

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

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

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

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

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

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