当前位置: 首页 > 面试题库 >

继承中的Java内存使用情况

岳景明
2023-03-14
问题内容

扩展基类时,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字节填充。

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



 类似资料:
  • 问题内容: 是否有一个准则来估计a消耗的内存量? 寻找类似于这些准则的估计内存使用情况的东西。 问题答案: 如果您查看源代码中的字段,则有: 的评论说 用于存储规范的字符串表示形式(如果已计算)。 假设您不调用,它将保留为零字节。因此是(8 + 4 + 4)= 16个字节+ 。 本身是4 + 4 + 4 + 4 + 4 = 20字节+ 。 20 + 16总共提供了36个字节加上大小,该大小始终是表

  • 问题内容: 有什么工具可以知道我的Java应用程序已使用了多少个本机内存?我的应用程序内存不足:当前设置是:-Xmx900m 计算机,Windows 2003 Server 32位,RAM 4GB。 还在Windows上将boot.ini更改为/ 3GB,会有什么不同吗?如果设置为Xmx900m,则可以为此进程分配多少最大本机内存?是1100m吗? 问题答案: (就我而言,我使用的是Java 8)

  • 我一直在做一个基本的类继承练习,尽管我认为我已经掌握了它的jist,但我的程序并没有按应有的方式工作。我遇到了编译错误,但还没有弄清楚原因——如果你们都能在这里帮助我,那就太好了。 首先,这里有三个文件1。人java——基类2。大学生java——一个派生的Person类。java 3。家庭java——不太确定,我认为它是自己的基类 人java有两个实例变量,String name和int age,

  • 问题内容: 假设Java具有以下层次结构类: 这是C#中相同代码的(盲)重复: 当我执行Java代码时,我得到了C#返回的信息。 对我来说,C#的结果更有意义,因为引用B调用了它自己的方法。 Java设计者决定打印而不是打印的逻辑是什么?我的意思是,为什么引用B在C中使用覆盖方法?这种方法的优势是什么? 如何更改Java代码以像C#一样打印出来?我的意思是,我怎么教Java调用它使用的完全引用的方

  • 问题内容: 在开发桌面应用程序时,我在Oracle Network上关注本文以实现MVC。但是,我有一个问题:我正在使用由和扩展的抽象 Directory 类。模型管理器方法之一接受Directory作为参数: 抽象控制器使用setModelProperty调用此方法: 我从实际的控制器中这样调用它: 我认为我有: 我有以下错误: 我该如何解决这个问题?我在使用时缺少一些东西。 编辑:我已经阅读了

  • 本小节我们将学习 Java 的继承,通过本小节的学习,你将知道什么是继承,继承有什么特点,如何实现继承,方法重写的概念和实现,方法重写和方法重载是比较容易混淆的概念,我们也会介绍两个概念的区别,这些都是本小节的重点,本小节的最后我们还会介绍 super 关键字以及 final 关键字。 1. 概念和特点 1.1 概念 继承是面向对象软件技术当中的一个概念。如果一个类别 B “继承自” 另一个类别