1. 程式人生 > >java 成員變量為什麽可以不初始化而局部變量必須初始化

java 成員變量為什麽可以不初始化而局部變量必須初始化

操作數棧 hot 局部變量 區域 內存空間 為什麽 出口 hotspot 一個棧

  對於java虛擬機內存這塊始終有點迷,今天又把深入理解jvm虛擬機拿出來翻了翻,理了理java內存區域。

  ava虛擬機棧描述的是java方法執行的內存模型:每個方法在執行的同時都會創建一個棧幀用於存放局部變量表,操作數棧,動態鏈接,方法出口等信息。局部變量表所需的內存空間在編譯期間完成分配,當進入一個方法時,這個方法需要在棧幀分配多大的局部變量空間是完全確定的,在方法運行期間不會改變局部變量表的大小。這句話就說明了局部變量在創建時就必須進行初始化以確定分配內存大小。

  java堆存放所有對象的實例,幾乎所有的對象實例都在這裏分配內存。在hotspot虛擬機中,內存分配後,虛擬機需要將分配到的內存空間都初始化為零值。這一步操作保證了對象的實例字段在java代碼中可以不賦初始值就直接使用,程序能訪問到的這些字段的數據類型所對應的零值。

java 成員變量為什麽可以不初始化而局部變量必須初始化