2017-06-05 61 views
-1

我想了解一个java接口将占用多少空间,二进制中的磁盘和每个实例化对象的基础上。强制性的“每个JVM的实现可能是不同的”免责声明,我更感兴趣的不是100%的确切答案,而是理解如何处理的基本要素。Java界面需要多少空间(二进制/内存)?

如果我们假设一个简单的接口(没有静态的最终变量,没有默认的实现),那么这个二进制会占用多少空间?我假设需要存储可读的类名,以进行调试/反射,还可能存在一些唯一的类标识符?当实现此接口的对象被实例化时,接口将添加到对象的内存中表示中多少额外的开销字节(如果有)?

+3

这不是一个非常有意义的问题,随着类文件格式的改变和JVM实现的改变,随着时间的推移,任何答案都会有所不同。它可能会在不同的平台上有不同的答案。也许如果你解释了“答案”会给你什么以及知道为什么这很重要。当然,唯一的答案是“......多少额外字节的开销......”是“它取决于”。 –

+2

这不是一个cop-out答案,它是*唯一有效答案*。 SO不仅仅关心今天回答一个人的问题,它还是一个长期的信息库。关于当前最新Java的准确性可能与明天无关,并且今天可能与使用不同版本Java的其他人无关。 – Adrian

+1

阅读JVM字节码规范。 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html –

回答

1

java接口占用多少空间,包括二进制文件中的磁盘和每个实例化对象。

在磁盘上的二进制:
明确的答案:.class文件的文件大小。
简短回答:这取决于,如Jim Garrison said
龙答:这取决于:包的名称,接口名称的长度,方法号,方法名的长度,参数的数量,参数类型,参数名称的长度,返回类型的类型,是否调试的长度信息包括,字节码,...以及更多的版本...

以每个实例化对象的基础上:
无。