子类是否比超类占用更多内存

时间:2014-08-11 23:25:11

标签: java oop inheritance heap

使用继承A类的B类启动的对象是否占用堆中的内存比使用A类启动的对象占用更多内存。以下是我正在考虑的两种情况:

情景1:

class A {
  String name;
}

class B extends A {

}

情景2:

class A {
  String name;
}

class B extends A {
  int age;
}

1 个答案:

答案 0 :(得分:6)

看看你的例子:

  • 场景#1:A的实例与B的实例

  • 之间的大小应该没有差异
  • 场景#2:B 的实例占用的空间比A的实例多,但它取决于字对齐方式,以及是否依赖于运行32位或64位JVM和/或启用“压缩oops”。简而言之,答案是JVM特定的。

通常,子类化本身不需要每个实例额外的内存,但是可能的额外字段可以做,这取决于JVM如何在堆节点中布置实例字段

但我同意这些评论。 Java应用程序程序员不应该关心他/她自己这种事情。大小的差异可能很小,以至于无关紧要......除非您必须创建百万这些对象。即便如此,可能还有更重要的事情需要担心。