2015-03-19 97 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值放入任何使用它們的類的常量池中。