java底層對象的創建過程

1對象的創建過程

源碼:

class T{
    int m=9;
}

T t=new T();


T t=new T();的彙編碼:
0 new #2 <T>   //半初始化  確定具體內存大小  m的值初始爲0
3 dup
4 invokespecial #3 <T.<init>>  //具體賦值  將m的值 初始爲9
7 astore_1       //賦值 將new T()對象賦值給t
8 return

此處如果不加volatile關鍵字,一行new對象的代碼(對應好幾行彙編碼) 有可能會發生代碼重排序(cpu亂序執行)。

這裏也是單例模式 爲啥單例對象要加volatile關鍵字的原因:防止一個線程創建對象時,此時對象處於半初始化狀態,同時其他線程進入(其他的線程判斷時 該對象已經不爲null),返回一個半初始化對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章