2010-03-22 133 views

回答

7

除了元数据的少量空间(将一次分配一次,而不是每个实例一次)之外,名称没有区别。因此,在给出的示例中,每个变量将占用2个字节,可能会填充到4个字节,具体取决于其他字段和正在使用的VM。

注意,即使对于引用类型(包括阵列)由变量本身采取由它的类型(和VM的细节),其固定的空间 - 由参考带到一个空字符串的空间是相同的作为引用巨大字符串所占用的空间。


可以有每可变的使用成本 - 使用可变或也许每类。您必须查阅VM规范以检查确切的二进制表示。即使这样,这也是类文件中的表示,在所有JIT编译等情况下,这可能不会导致内存使用量的增加。无论如何,它在大事件方案中几乎肯定是不相干的 - 实际需要的内存对象几乎总是使代码本身所需的内存矮化。

1

变量名称在编译后没有任何意义;只有在那里才能使程序易于人类阅读和书写。

+1

好吗?怎么样在一个班级公共领域,也是变数? – TomTom 2010-03-22 07:20:12

+3

您是否看到Java标记?如何反编译Java代码,恢复变量名称,如果它们没有存储在任何地方? – paxdiablo 2010-03-22 07:24:36

+0

即使变量占用的空间可以忽略不计,我不认为编译器会继续忽略这些事情 – 2010-03-22 07:31:12

0

变量名称是为了人类的可读性。在这种情况下,s和Ka..a是相同的大小。

@TomTom对于像公开他们的名字再次改变大小不变的事情,但事实是他们是公开的,如果我没有弄错的话。尽管这个尺寸可能被包含它们的类所采用。

0

通常,变量名由编译器使用,而不是运行时。如果该类是从您的模块中导出的,则名称会在元数据中进行编码。

但是,如果您担心程序需要占用多少空间,那么变量的名称是您最担心的问题。