1.物件有三個區域
物件頭/例項資料/對其填充
物件頭又包含Mark Word/型別指標->指向方法區/陣列長度
Mark Word如下圖所示
2.偏向鎖
當執行緒首次進入synchronized,他會將物件頭的mark work更新為偏向鎖。
JDK已廢除
3.輕量鎖
當執行緒獲取已被偏向的鎖時,會將鎖升級為輕量鎖。
具體過程是這樣
先將物件頭的mark work複製到執行緒棧中
透過CAS操作,將物件頭的mark work更新指向執行緒棧中的記錄,如果CAS成功(預設自旋15次)則升級為輕量級鎖。
失敗則表示已經其他執行緒操作過了,需要升級為重量級鎖
為什麼要把物件的mark work複製到執行緒棧中,是因為鎖的獲取和釋放都是成對出現的。
當鎖釋放的時候,就需要將原有的執行緒棧mark word恢復到物件頭中。
4.重量級鎖
輕量級鎖CAS操作失敗,就會升級到重量級鎖