【java基礎 > 鎖升級】

圍繞synchronize關鍵字說下三個鎖升級

 

無鎖 -> 偏向鎖 -> 輕量級鎖 -> 重量級鎖

 

1,Mark Word
2,指向類的指針
3,數組長度(只有數組對象纔有)

鎖的信息都是放在對象頭的mark word裏面的,具體信息如下:

【說個小知識點 yc的年齡最大的是15 cms默認的是6,4bit的最大就是15】

1.無鎖態,一個對象沒有被爭搶,裏面會記錄對象的hash等信息

2.有線程來爭搶,搶到鎖後jvm會把持有鎖的線程id記錄到mark word裏面。針對可重入鎖 或者併發小的情況,偏向鎖還是蠻好的。併發度比較大的情況下,需要停止偏向鎖。 -usebiasedLock。

3.多線程爭搶時 會升級成輕量級鎖,這個時候爭搶鎖的線程會在自己的線程棧裏面生成lockRecord(裏面會記錄原先 hashcode的信息)大家通過cas來更新mark word裏面的信息

4.自旋次數到達10次,或者會升級成重量級鎖。 重量級鎖就動用到了操作系統的原語。java變異看到的就是 monitorEnter monitorExist。這個時候鎖是由操作系統來分配的,不同的操作系統 底層的指令也不是相同的(輕量級鎖爲啥要升級成重量級鎖 還是比較簡單的,這個可以想下)

 

 

 

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