inheritance中的Java内存使用情况

扩展基类时,Java中的内存使用情况如何?

子类是否包含基类的实例(具有它自己的开销和所有)或它是否只有16字节的开销?

class Foo { int x; } class Bar extends Foo { int y; } 

那么,更具体地说,Bar实例的内存使用量是多少?

Foo (including overhead) + Bar(including overhead)

或只是Foo (excluding overhead + Bar(including overhead)

没有双重开销。

Java将采用类,超类,计算所有字段所需的空间,并为单个实例分配所需的空间。

从形成内存的角度来看,根本不存在超类的概念,有Foo的实例只需要一个int的内存,而Bar的实例需要两个int的内存,其中一个是因为Bar碰巧扩展了Foo。

所以开销(或记账或任何你想要调用的)只发生一次。

但是,在java中进行开发时,通常最好不要过多关注内存,除非你有非常具体的(我的意思是非常非常具体)用例,其中书籍开销会导致严重的问题。 在这种情况下,还应考虑8字节填充。

通常,除了不担心每个实例的内存开销之外,还有许多其他方法可以改善应用程序的内存占用或整体性能。

每个对象只有一个类头,因此它只有后者。

顺便说一下,您可以使用https://sourceforge.net/projects/sizeof/或https://code.google.com/p/memory-measurer/轻松查看此内容。