1. 自旋鎖與自適應(yīng)自旋。共享數(shù)據(jù)的鎖定只會持續(xù)短時間路鹰,通過自旋看看持有鎖的線程是否會很快釋放固翰。1.6之后加入自適應(yīng)自旋,根據(jù)前一次在同一個鎖上的自旋時間及擁有者狀態(tài)而定缴啡。
2. 鎖消除壁晒。通過逃逸分析發(fā)現(xiàn)無法被其他線程訪問到,那么會消除該鎖业栅。
3. 鎖粗化秒咐。零碎的加鎖,會拓展其加鎖同步的范圍碘裕。
4. 輕量級鎖携取。輕量級鎖是基于大部分鎖不被競爭的情況設(shè)計(jì)的,這樣可以避免互斥鎖的開銷帮孔,如果存在鎖競爭雷滋,那么除了互斥量的開銷,還會額外有CAS的開銷,那么這種情況下惊豺,輕量級鎖會更慢燎孟。
? ? 加鎖過程禽作。對象頭部信息中存在Mark Word中尸昧,首先通過CAS嘗試更新對象的MarkWord為當(dāng)前棧幀,如果成功則將該對象的鎖定位置成“00”旷偿,如果更新失敗烹俗,檢查對象的MarkWord是否指向當(dāng)前的棧幀,如果是則可重入萍程,執(zhí)行代碼即可幢妄,如果不是,則說明該對象已經(jīng)被其他對象搶占茫负。當(dāng)超過兩個線程爭用鎖的時候蕉鸳,輕量級鎖將會膨脹為重量級鎖,MarkWord的鎖標(biāo)志值將會變成“10”忍法,存儲的地址也會指向重量級鎖(互斥量)潮尝,后面等待鎖的線程也將進(jìn)入阻塞狀態(tài)。?
? ? 解鎖過程饿序。同樣通過CAS實(shí)現(xiàn)勉失,失敗時釋放鎖的同時喚起掛起的線程。
5. 偏向鎖原探。可以提高有同步但無競爭的程序性能乱凿,對于大多數(shù)都是被不同進(jìn)程訪問的情況,反而是多余的咽弦。目的是消除無競爭情況下的同步徒蟆。如果說輕量級鎖是使用CAS去消除同步使用的互斥量,那么偏向鎖是在無競爭情況下消除整個同步型型,CAS都不執(zhí)行段审。
? ? 鎖對象第一次被獲取的時候,虛擬機(jī)把對象頭的標(biāo)識位設(shè)為“01”输莺,即偏向模式戚哎,同時把線程的ID信息記錄在MarKWord中,如果CAS成功嫂用,那么持有偏向鎖的線程每次進(jìn)入鎖的相關(guān)同步塊時型凳,虛擬機(jī)不再進(jìn)行任何同步操作。但另外一個線程嘗試獲取時嘱函,偏向模式結(jié)束甘畅,根據(jù)對象的狀態(tài)退回到未鎖定或輕量級鎖模式。