Java 子类比超类占用更多内存吗

Java 子类比超类占用更多内存吗,java,oop,inheritance,heap,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:A的实例和B 场景#2:B的实例可能比A的实例占用更多空间,但这取决于单词对齐方式,以及您运行的是32位还是64位JVM和/或

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

情景1:

class A {
  String name;
}

class B extends A {

}
情景2:

class A {
  String name;
}

class B extends A {
  int age;
}

看看你的例子:

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

  • 场景#2:
    B
    的实例可能比
    A
    的实例占用更多空间,但这取决于单词对齐方式,以及您运行的是32位还是64位JVM和/或启用了“压缩oops”。简而言之,答案是JVM特有的

一般来说,子类化本身并不需要每个实例都有额外的内存,但是额外的字段也可以,这取决于JVM在堆节点中如何布置实例字段


但我同意这些评论。Java应用程序程序员不需要关心这种事情。大小上的差异可能很小,以至于无关紧要。。。除非你必须创建数百万个这样的对象。即使如此,可能还有更重要的事情需要担心。

所讨论的类真的这么简单吗?也许吧。作为一名java开发人员,你不需要负责内存管理,我不认为会有任何明显的区别,或者至少你不应该提防。方法(据我所知?)是由引用引用引用的,因此它们将在同一类的所有实例之间共享(对继承不是很确定)。字段可能是一个值得关注的问题,但实际上,如果这是您在性能方面担心的问题,那么java可能不是适合您的语言:^)