2015-03-19 96 views
0

我的问题是,如果我在类中创建了最终静态变量并使用另一个最终静态变量(已声明和初始化)初始化它。 这两个变量的内存消耗是多少。使用另一个最终静态初始化最终静态变量时的内存消耗

例如: -

class SomeClass{ 

private static final byte VARIABLE_1 = 0x01; 

private static final byte VARIABLE_2 = VARIABLE_1; 

... 

} 

什么会通过VARIABLE_1,variable_2的是内存消耗?

在此先感谢。

+0

最多两个字节,但它们可能完全被编译器或JVM忽略。 – EJP 2015-03-19 05:56:12

回答

3

在你的例子中,在运行时,0字节。 final static原语被编译器内联,它们是常量。

+0

我认为这是为了减少内存消耗并提高效率,因为它不需要额外调用以获取变量的值? – JClassic 2015-03-19 05:36:43

+0

你是对的。这是关于改善代码的内存消耗。不管怎么说,多谢拉。 – HSJ 2015-03-19 05:38:55

+0

@JClassic - 更多的*这个值在运行时永远不会改变,所以为什么不对它进行硬编码并提高效率*? – TheLostMind 2015-03-19 05:39:07

0

类文件包含它使用的任何静态final字段的常量值的副本,因此它正在使用的内存可以忽略不计。

SomeClass声明了两个常量,VARIABLE_1VARIABLE_2,并使用编译时常量的表达式对它们进行初始化。

编译器知道VARIABLE_1代表值0x01VARIABLE_2 代表值0x01。当由Java虚拟机加载SomeClass类时,VARIABLE_1VARIABLE_2不作为类变量存储在方法区域中。

VARIABLE_1VARIABLE_2字段不是类变量,它们是常量,Java编译器将它们表示的常量int值放入任何使用它们的类的常量池中。