首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承中Java内存的使用

继承中Java内存的使用
EN

Stack Overflow用户
提问于 2014-09-17 12:48:20
回答 2查看 2.1K关注 0票数 10

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

子类是否包含基类的实例(它有自己的开销和全部),还是只包含16 Bytes的开销?

代码语言:javascript
复制
class Foo {
 int x;
}

class Bar extends Foo {
 int y;
}

那么,更具体地说,Bar实例的内存使用情况如何呢?

Foo (including overhead) + Bar(including overhead)吗?

或者仅仅是Foo (excluding overhead + Bar(including overhead)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-17 12:55:17

没有双倍的开销。

Java将接受类、超类、计算所有字段所需的空间以及为单个实例分配所需的空间。

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

因此,开销(或簿记或任何您想调用的东西)只发生一次。

但是,在用java进行开发时,通常最好不要过多地关心内存内容,除非您有非常具体(我指的是非常具体的)用例,而在这些用例上,图书隐藏开销会给您带来严重的问题。在这种情况下,也应该考虑8字节填充。

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

票数 10
EN

Stack Overflow用户

发布于 2014-09-17 12:54:13

每个对象只有一个类头,所以只有后者。

顺便说一句,您可以使用https://sourceforge.net/projects/sizeof/https://code.google.com/p/memory-measurer/轻松地检查这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25891022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档