扩展基类时,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继承的具体问题。以下是我的代码 现在我的问题是,运行这个程序时,幕后到底发生了什么。 什么会遗传? 内存位置在哪里? 为什么第一个syso给4,第二个给5?(这一点我能在一定程度上理解,但澄清上述两个将有助于更清楚地理解它) 请引导