Object obj = new Object();
虛擬機器遇到 new 指令
檢查指令的引數是否能在常量池中定位到一個類的符號引用
檢查符號引用是否已經被載入、解析和初始化。如果沒有則進行類載入。
虛擬機器為新生物件分配記憶體(物件所需的記憶體大小在類載入完就可確定)
將分配到的記憶體空間都初始化為零值(不包括物件頭)這一步操作保證了物件的例項欄位在 Java 程式碼中可以不賦初始值就直接使用,程式能訪問到這些欄位的資料型別所對應的零值
虛擬機器對物件進行必要的設定,例如這個物件是哪個類的例項、如何才能知道類的後設資料資訊、物件的雜湊碼、物件的 GC 分代年齡資訊等等,這些資訊都存放在物件的物件頭(Object Header)之中。
從虛擬機器的視角來看,一個新的物件已經產生了,從 Java 程式角度來看,物件建立才剛剛開始
執行 new 指令之後會接著執行
方法,把物件按照程式設計師的意願進行初始化 一個真正可用的物件才算完全產生出來。
想要了解更多的話,請移步本人的學習筆記,如果覺得有幫助的話,請點一個star✨。