Java對象淺析__Java

來源:互聯網
上載者:User

Java是一門物件導向的程式設計語言,在Java程式啟動並執行過程中無時無刻都有對象被建立出來。

虛擬機器遇到一條new指令時,首先將去檢查這個指令的參數是否能在常量池中定位到一個類的符號引用,並且檢查這個符號引用代表的類是否已經被載入、解析和初始化過。如果沒有,那就先執行相應的類載入過程。在類載入檢查過後,虛擬機器就為新生對象分配記憶體。對象所需記憶體大小在類載入完成後便可完全確定,為對象分配記憶體等同於把一塊確定大小的記憶體從Java堆中劃分出來。一般通過指標碰撞和空閑列表兩種方式分配。記憶體配置完成後,虛擬機器需要將分配的記憶體空間都初始化為零值。接下來,虛擬機器要對對象進行必要的設定,例如這個對象是那個類的執行個體、如何才能找到類的中繼資料資訊、對象的雜湊碼、對象的GC分代年齡等資訊。接著執行<init>方法。這樣一個對象就完全產生出來。

HotSpot虛擬機器中,對象在記憶體中儲存的布局可分為3塊地區:對象頭(Header)、執行個體資料(Instance Data)和對齊填充(Padding)。

對象頭包括兩部分資訊,第一部分用於儲存物件自身的運行資料,如hash碼、GC分代年齡、鎖狀態標誌、線程持有的鎖、偏向線程ID、偏向時間戳記等。另一部分是類型指標,即對象指向他的類別中繼資料的指標,虛擬機器通過這個指標來確定這個對象是哪個類的執行個體。

執行個體資料部分是對象真正儲存的有效資訊,也是在程式碼中所定義的各種類型的欄位內容。

第三部分對齊填充並不是必然存在的,也沒有特別的含義,它僅僅起著預留位置的作用。HotSpot的自動記憶體管理系統要求對象的起始地址是8位元組的整數倍。而對象頭部正好是8位元組的整數倍,因此當對象執行個體資料部分沒有對齊時,就需要通過對齊填充來補全。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.