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


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

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM