java對象創建的過程


1.檢查類是否被加載

如果沒有,限執行下相應的類加載過程;

2.為新生對象分配內存

如果堆中內存是規整的,采用指針碰撞。(所有用過的內存放在一邊,空閑的內存方法另一邊,中間放一個指針作為分界點的指示器,那么分配內存就是把指針向空閑空間挪動一段與對象相等的距離)

如果堆中內存不規整,采用空閑列表。虛擬機會維護個列表,查看哪些內存塊可以用,在分配的時候找到一塊足夠大的給對象實例,並更新記錄。

3.初始化零值

4.進行必要設置

這個對象是哪個類的實例,如何找到類元數據信息,對象GC分代年齡等信息,這些信息放在對象的對象頭中。

5.執行init方法

把對象按照程序員的意願進行初始化。

對象頭

在對象中添加一些標記字段用於增強對象功能。

組成

1.mark word 

存儲對象自身的運行時數據,如hashcode,gc分代年齡。32JVM為32位

2.class pointer

存儲對象的類型指針,確定這個對象是哪個類的實例。32位JVM為32位。

3.array length

如果對象是數組,則存儲數組長度。


免責聲明!

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



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