2015-05-25 40 views
0

在c中,未初始化的靜態變量不佔用可執行文件中的空間。Java - .class文件中未初始化的靜態變量

Java呢? static variable是否在.class文件中佔用空間?

提示:問題是關於磁盤空間,而不是內存。

+1

該變量在類文件中佔據的唯一空間將是JVM將讀取的一些字符。如果在JVM加載並執行類時引用未初始化的變量是否會佔用一些內存空間,則取決於變量是基元還是對象引用。 –

+1

Java .class文件包含類的*描述*。一個靜態變量需要描述它的大小,類型和初始化信息,通常它的名字也會被記錄下來。 –

回答

2

所有字段都有一個在類文件中給出名稱,類型,標誌(最終,公共,易失性,靜態等)和其他數據的條目。

如果你想一想,就必須這樣。 Java不是C,其中變量只是bss或其他地方的一個位置。你有反射和運行時類型檢查,所以所有的信息必須保持。

如果該字段已初始化,則會在類文件中執行初始化(方法中的ConstantValue屬性或字節碼)中的其他數據。但是,即使未初始化的字段也必須在類文件中包含字段條目。

-1

是的,他們會佔用記憶。即使您沒有初始化它,java中的所有變量都會爲它們分配默認值。所以,

int i; 

將在這種情況下佔用內存。這裏有一些進一步閱讀:Do uninitialized primitive instance variables use memory?

+1

問題不是詢問內存,而是詢問磁盤上的編譯文件。 –

+0

當你編寫一個引用靜態變量的新java源文件時,你編譯源碼,javac必須引用.class文件中定義的靜態變量。所以.class文件必須有它的定義(數據類型和實際值),.class文件也作爲C中的頭文件使用。 – saka1029

+0

除了不詢問內存的問題,還有磁盤空間問題:它詢問靜態變量,而不是實例變量。 –