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

abd*_*003 4 java oop heap inheritance

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

场景1:

class A {
  String name;
}

class B extends A {

}
Run Code Online (Sandbox Code Playgroud)

场景2:

class A {
  String name;
}

class B extends A {
  int age;
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 6

看看你的例子:

  • 场景#1:实例A和实例之间的大小应该没有差异B

  • 场景#2:一个实例B 可能占用比实例更多的空间A,但它取决于字对齐,以及是否运行32位或64位JVM和/或启用了"压缩oops".简而言之,答案是JVM特定的.

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

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