JVM鎖升級(jí)的過程

JDK6對(duì)Synchronized進(jìn)行了優(yōu)化丧鸯,不再默認(rèn)是重量級(jí)鎖帚称,有了鎖升級(jí)過程咧纠。

1蓬痒、無鎖 → 偏向鎖

因?yàn)榻?jīng)過HotSpot的作者大量的研究發(fā)現(xiàn),大多數(shù)時(shí)候是不存在鎖競(jìng)爭(zhēng)的漆羔,常常是一個(gè)線程多次獲得同一個(gè)鎖梧奢,因此如果每次都要競(jìng)爭(zhēng)鎖會(huì)增大很多沒有必要付出的代價(jià),為了降低獲取鎖的代價(jià)演痒,才引入的偏向鎖亲轨。

如果一塊臨界區(qū)從未被任何線程訪問過,則它就一直處于無鎖狀態(tài)嫡霞。當(dāng)?shù)谝粋€(gè)線程來訪問它時(shí)瓶埋,這時(shí)候線程會(huì)判斷鎖狀態(tài)標(biāo)志位為01偏向標(biāo)志位為0,表示無鎖且可以使用偏向鎖诊沪。這時(shí)就會(huì)啟動(dòng)加偏向鎖的過程:

  • 將偏向標(biāo)志位設(shè)置為1
  • 使用CAS操作將線程ID寫入對(duì)象頭

如果CAS操作成功养筒,則該線程就獲取到了偏向鎖,該線程每次進(jìn)入同步塊時(shí)就再也不用加鎖解鎖了端姚。如果CAS操作失敗晕粪,說明發(fā)生了鎖競(jìng)爭(zhēng)胳岂,進(jìn)入升級(jí)輕量級(jí)鎖過程迫皱。

使用參數(shù)-XX:BiasedLockingStartupDelay可以設(shè)置偏向鎖開啟的延遲時(shí)間命浴,默認(rèn)為4秒厕倍,表示程序運(yùn)行4秒后才會(huì)啟用偏向鎖。原因在于尚氛,系統(tǒng)剛啟動(dòng)時(shí)诀诊,一般數(shù)據(jù)競(jìng)爭(zhēng)是比較激烈的,此時(shí)啟用偏向鎖會(huì)降低性能阅嘶。未開啟偏向鎖時(shí)的鎖升級(jí)過程為:無鎖→輕量級(jí)鎖→重量級(jí)鎖属瓣。

2、偏向鎖 → 輕量級(jí)鎖

輕量級(jí)鎖考慮的是競(jìng)爭(zhēng)鎖對(duì)象的線程不多讯柔,而且線程持有鎖的時(shí)間也不長(zhǎng)的情景抡蛙。因?yàn)樽枞€程需要CPU從用戶態(tài)轉(zhuǎn)到內(nèi)核態(tài),代價(jià)較大魂迄,如果剛剛阻塞不久這個(gè)鎖就被釋放了粗截,那這個(gè)代價(jià)就有點(diǎn)得不償失了,因此這個(gè)時(shí)候就干脆不阻塞這個(gè)線程捣炬,讓它自旋著等待鎖釋放熊昌。

當(dāng)?shù)诙€(gè)線程嘗試獲取已被置為偏向的鎖時(shí),偏向模式就馬上宣告結(jié)束遥金。根據(jù)鎖對(duì)象目前是否處于被鎖定的狀態(tài)來決定是否撤銷偏向(偏向標(biāo)志設(shè)為0)浴捆,撤銷后鎖標(biāo)志位恢復(fù)到未鎖定或輕量級(jí)鎖的狀態(tài)。如果對(duì)象處于鎖定狀態(tài)稿械,則直接將鎖升級(jí)到重量級(jí)鎖选泻,否則由當(dāng)前試圖訪問到線程加上輕量級(jí)鎖。輕量級(jí)鎖的加鎖過程如下:

  • 將鎖標(biāo)志位設(shè)置為00美莫,表示輕量級(jí)鎖
  • 在當(dāng)前線程的棧幀中開辟一片空間存儲(chǔ)Mark Word
  • 通過CAS操作將對(duì)象頭的信息替換為棧幀中存儲(chǔ)備份的地址

3页眯、輕量級(jí)鎖 → 重量級(jí)鎖

如果出現(xiàn)兩個(gè)以上的線程爭(zhēng)用同一個(gè)鎖的情況,那輕量級(jí)鎖就不再有效厢呵,必須要膨脹為重量級(jí)鎖窝撵,鎖標(biāo)志位狀態(tài)改為10,此時(shí)Mark Word中存儲(chǔ)的就是指向重量級(jí)鎖的指針襟铭,后面等待鎖的線程也不許進(jìn)入阻塞狀態(tài)碌奉。

References

http://www.reibang.com/p/ee02e710a8b9
https://zhuanlan.zhihu.com/p/187460479

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市寒砖,隨后出現(xiàn)的幾起案子赐劣,更是在濱河造成了極大的恐慌,老刑警劉巖哩都,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魁兼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡漠嵌,警方通過查閱死者的電腦和手機(jī)咐汞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門盖呼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人化撕,你說我怎么就攤上這事几晤。” “怎么了侯谁?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵锌仅,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我墙贱,道長(zhǎng),這世上最難降的妖魔是什么贱傀? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任惨撇,我火速辦了婚禮,結(jié)果婚禮上府寒,老公的妹妹穿的比我還像新娘魁衙。我一直安慰自己,他們只是感情好株搔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布剖淀。 她就那樣靜靜地躺著,像睡著了一般纤房。 火紅的嫁衣襯著肌膚如雪纵隔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天炮姨,我揣著相機(jī)與錄音捌刮,去河邊找鬼。 笑死舒岸,一個(gè)胖子當(dāng)著我的面吹牛绅作,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蛾派,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼俄认,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了洪乍?” 一聲冷哼從身側(cè)響起眯杏,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎典尾,沒想到半個(gè)月后役拴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钾埂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年河闰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了科平。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡姜性,死狀恐怖瞪慧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情部念,我是刑警寧澤弃酌,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站儡炼,受9級(jí)特大地震影響妓湘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乌询,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一榜贴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧妹田,春花似錦唬党、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晶衷,卻和暖如春蓝纲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背房铭。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工驻龟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缸匪。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓翁狐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親凌蔬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子露懒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容