在c中,未初始化的靜態變量不佔用可執行文件中的空間。Java - .class文件中未初始化的靜態變量
Java呢? static variable
是否在.class
文件中佔用空間?
提示:問題是關於磁盤空間,而不是內存。
在c中,未初始化的靜態變量不佔用可執行文件中的空間。Java - .class文件中未初始化的靜態變量
Java呢? static variable
是否在.class
文件中佔用空間?
提示:問題是關於磁盤空間,而不是內存。
所有字段都有一個在類文件中給出名稱,類型,標誌(最終,公共,易失性,靜態等)和其他數據的條目。
如果你想一想,就必須這樣。 Java不是C,其中變量只是bss或其他地方的一個位置。你有反射和運行時類型檢查,所以所有的信息必須保持。
如果該字段已初始化,則會在類文件中執行初始化(方法中的ConstantValue屬性或字節碼)中的其他數據。但是,即使未初始化的字段也必須在類文件中包含字段條目。
是的,他們會佔用記憶。即使您沒有初始化它,java中的所有變量都會爲它們分配默認值。所以,
int i;
將在這種情況下佔用內存。這裏有一些進一步閱讀:Do uninitialized primitive instance variables use memory?
問題不是詢問內存,而是詢問磁盤上的編譯文件。 –
當你編寫一個引用靜態變量的新java源文件時,你編譯源碼,javac必須引用.class文件中定義的靜態變量。所以.class文件必須有它的定義(數據類型和實際值),.class文件也作爲C中的頭文件使用。 – saka1029
除了不詢問內存的問題,還有磁盤空間問題:它詢問靜態變量,而不是實例變量。 –
該變量在類文件中佔據的唯一空間將是JVM將讀取的一些字符。如果在JVM加載並執行類時引用未初始化的變量是否會佔用一些內存空間,則取決於變量是基元還是對象引用。 –
Java .class文件包含類的*描述*。一個靜態變量需要描述它的大小,類型和初始化信息,通常它的名字也會被記錄下來。 –