Lin*_*xon 9 java memory inheritance subclass
扩展基类时,Java中的内存使用情况如何?
子类是否包含基类的实例(具有它自己的开销和所有)或它是否只有16字节的开销?
class Foo {
int x;
}
class Bar extends Foo {
int y;
}
Run Code Online (Sandbox Code Playgroud)
那么,更具体地说,Bar实例的内存使用量是多少?
是吗 Foo (including overhead) + Bar(including overhead)
要不就 Foo (excluding overhead + Bar(including overhead)
没有双重开销.
Java将使用类,超类,计算所有字段所需的空间,并为单个实例分配所需的空间.
从形成一个内存的角度来看,根本不存在超类的概念,有Foo的实例只需要一个int的内存,而Bar的实例需要两个int的内存,其中一个是因为Bar碰巧扩展了Foo.
所以开销(或记账或任何你想要调用的)只发生一次.
但是,在java中进行开发时,通常最好不要过多关注内存,除非你有非常具体的(我的意思是非常非常具体)用例,其中书籍开销会导致严重的问题.在这种情况下,还应考虑8字节填充.
通常,除了不担心每个实例的内存开销之外,还有许多其他方法可以改善应用程序的内存占用或整体性能.