2010-03-22 101 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

通常,變量名由編譯器使用,而不是運行時。如果該類是從您的模塊中導出的,則名稱會在元數據中進行編碼。

但是,如果您擔心程序需要佔用多少空間,那麼變量的名稱是您最擔心的問題。