創建對象的步驟


1. 判斷對象對應的類是否被加載,鏈接,初始化

  虛擬機遇到一條new 指令,首先求檢查這個和這個符號引用代表的類是否被加載,鏈接和初始化,即:判斷類元信息是否存在)。如果沒有,那么雙親委派機制模式下,使用當前類加載器以ClassLoader+包名+類名為key進行查找對應的.class文件。如果,沒有查找到文件,則拋出ClassNotFoundException異常,如果找到,則加載,並生成對應的Class對象。

2.  為對象分配內存

  計算對象占用內存的大小(引用類型4個字節),接着在堆中划分一塊內存給新對象

  - 如果內存完整----指針碰撞

  - 如果內存不完整----空閑列表分配(在K線列表找足夠的內存)

3. 處理並發問題

  - 采用CAS失敗重試,區域加鎖保證更新原子性

  - TLAB(線程本地緩存區)

4. 初始化分配到的空間,即:默認初始化,保證對象在不賦值時可以直接使用

5. 設置對象的對象頭(將對象的類信息(指向方法區),hashCode,GC信息,鎖信息等他數據存儲在對象頭中)

6. 執行init方法進行初始化


免責聲明!

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



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