欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java鎖升級的實(shí)現(xiàn)過程

 更新時間:2020年05月17日 11:43:36   作者:zycxnanwang  
這篇文章主要介紹了Java鎖升級的實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

對象內(nèi)存布局

Java對象在內(nèi)存中存儲的布局可以分為3塊區(qū)域: 對象頭、實(shí)例數(shù)據(jù)、對齊填充。

對象頭,分為兩個部分,第一個部分存儲對象自身的運(yùn)行時數(shù)據(jù),又稱為Mark Word,32位虛擬機(jī)占32bit,64位虛擬機(jī)占64bit。如圖所示,不同鎖狀態(tài)下,Mark Word的結(jié)構(gòu),理解下面要介紹的各種鎖,和鎖升級過程,都需要先充分了解Mark Word的結(jié)構(gòu)。

第二部分是類型指針,指向類元數(shù)據(jù)指針,虛擬機(jī)通過此指針,確定該對象屬于那個類的實(shí)例。

輕量級鎖

輕量級鎖是相對于重量級鎖(Synchrnoized)而言的,本意是在沒有多線程競爭的前提下,減少傳統(tǒng)的重量級鎖使用操作系統(tǒng)互斥量產(chǎn)生的性能消耗。

輕量級鎖的獲取

線程進(jìn)入同步塊時,如果此同步對象沒有被鎖定(即鎖標(biāo)志位為01,是否為偏向鎖為0),虛擬機(jī)在當(dāng)前線程的棧幀中建立一個名為鎖記錄(Lock Record)的空間,用于存儲鎖對象目前的一個Mark Word的copy

然后虛擬機(jī)使用CAS操作,嘗試將Mark World更新為指向Lock Record的指針,如果更新成功,那么線程擁有了該對象的鎖,并且將鎖標(biāo)志位置位00,如圖所示

一旦有兩條以上的線程搶占該鎖,輕量級鎖會升級為重量級鎖。鎖標(biāo)志位置為10,Mark Word存儲的就是指向重量級鎖的指針

輕量級鎖釋

  • 放如果對象的Mark Word仍然指向著線程的鎖記錄, 那就用CAS操作把對象當(dāng)前的Mark Word和線程中復(fù)制的Displaced Mark Word替換回來, 如果替換成功, 整個同步過程就完成了。
  • 如果替換失敗, 說明有其他線程嘗試過獲取該鎖,輕量級鎖膨脹為重量級鎖,那就要在釋放鎖的同時, 喚醒被掛起的線程。

偏向鎖

引入偏向鎖的目的是在沒有多線程競爭的前提下,進(jìn)一步減少線程同步的性能消耗。

偏向鎖的獲取

開啟偏向鎖模式后,鎖第一次被線程獲取的時候,虛擬機(jī)會把對象頭中是否為偏向鎖的標(biāo)志位設(shè)位0,同時使用CAS操作把獲取到這個鎖的線程的ID記錄在對象的Mark Word之中。

當(dāng)有另外一個線程去嘗試獲取這個鎖時, 偏向模式就宣告結(jié)束。 根據(jù)鎖對象目前是否處于被鎖定的狀態(tài), 撤銷偏向( Revoke Bias) 后恢復(fù)到未鎖定( 標(biāo)志位為“01”)或輕量級鎖定( 標(biāo)志位為“00”) 的狀態(tài)

偏向鎖的釋放

偏向鎖,并沒有顯式的鎖釋放過程,主要依靠鎖的批量再偏向(Bulk Rebias)機(jī)制實(shí)現(xiàn)鎖釋放。

該機(jī)制的主要工作原理如下:

  • 引入一個概念 epoch, 其本質(zhì)是一個時間戳 , 代表了偏向鎖的有效性,從前文描述的對象頭結(jié)構(gòu)中可以看到, epoch 存儲在可偏向?qū)ο蟮?MarkWord 中。
  • 除了對象中的 epoch, 對象所屬的類 class 信息中, 也會保存一個 epoch 值,每當(dāng)遇到一個全局安全點(diǎn)時, 如果要對 class 進(jìn)行批量再偏向, 則首先對 class 中保存的 epoch 進(jìn)行增加操作, 得到一個新的 epoch_new
  • 然后掃描所有持有 class 實(shí)例的線程棧,根據(jù)線程棧的信息判斷出該線程是否鎖定了該對象, 僅將epoch_new 的值賦給被鎖定的對象中。
  • 退出安全點(diǎn)后, 當(dāng)有線程需要嘗試獲取偏向鎖時, 直接檢查 class中存儲的 epoch 值是否與目標(biāo)對象中存儲的 epoch 值相等,如果不相等, 則說明該對象的偏向鎖已經(jīng)無效了, 可以嘗試對此對象重新進(jìn)行偏向操作。

整個鎖升級過程

參考文章

偏向鎖,輕量級鎖與重量級鎖的區(qū)別與膨脹

Java中的偏向鎖,輕量級鎖, 重量級鎖解析

到此這篇關(guān)于Java鎖升級的實(shí)現(xiàn)過程的文章就介紹到這了,更多相關(guān)Java鎖升級內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java出現(xiàn)中文亂碼問題分析及解決方案

    Java出現(xiàn)中文亂碼問題分析及解決方案

    在Java開發(fā)中,處理中文亂碼是一個常見的問題,由于字符集和編碼的復(fù)雜性,開發(fā)者可能面臨各種導(dǎo)致亂碼的情況,正確地處理中文字符集對于確保應(yīng)用程序的可靠性和國際化至關(guān)重要,本文給大家介紹了Java中文亂碼分析及解決方案,需要的朋友可以參考下
    2024-02-02
  • mybatis 忽略實(shí)體對象的某個屬性(2種方式)

    mybatis 忽略實(shí)體對象的某個屬性(2種方式)

    這篇文章主要介紹了mybatis 忽略實(shí)體對象的某個屬性方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java如何將控制臺輸出日志寫入到指定文件中

    java如何將控制臺輸出日志寫入到指定文件中

    這篇文章主要介紹了java如何將控制臺輸出日志寫入到指定文件中問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java同步代碼塊解決銀行取錢的安全問題實(shí)例分析

    Java同步代碼塊解決銀行取錢的安全問題實(shí)例分析

    這篇文章主要介紹了Java同步代碼塊解決銀行取錢的安全問題,結(jié)合實(shí)例形式分析了java基于線程的同步問題實(shí)現(xiàn)與使用相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • Java中獲取時間戳的三種方式對比實(shí)現(xiàn)

    Java中獲取時間戳的三種方式對比實(shí)現(xiàn)

    這篇文章主要介紹了Java中獲取時間戳的三種方式對比實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • SpringCloud 微服務(wù)最佳開發(fā)實(shí)踐

    SpringCloud 微服務(wù)最佳開發(fā)實(shí)踐

    本文結(jié)合我們實(shí)際的開發(fā)中遇到的一些問題整理出了一份微服務(wù)開發(fā)的實(shí)踐規(guī)范,對SpringCloud 微服務(wù)開發(fā)實(shí)踐相關(guān)知識感興趣的朋友一起看看吧
    2021-07-07
  • SpringCloud Gateway的基本入門和注意點(diǎn)詳解

    SpringCloud Gateway的基本入門和注意點(diǎn)詳解

    這篇文章主要介紹了SpringCloud Gateway的基本入門和注意點(diǎn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 從架構(gòu)思維角度分析高并發(fā)下冪等性解決方案

    從架構(gòu)思維角度分析高并發(fā)下冪等性解決方案

    冪等(idempotent、idempotence)是一個數(shù)學(xué)與計(jì)算機(jī)學(xué)概念,常見于抽象代數(shù)中。?在編程中.一個冪等操作的特點(diǎn)是其任意多次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影響相同。冪等函數(shù),或冪等方法,是指可以使用相同參數(shù)重復(fù)執(zhí)行,并能獲得相同結(jié)果的函數(shù)
    2022-01-01
  • Mybatis多線程下如何使用Example詳解

    Mybatis多線程下如何使用Example詳解

    這篇文章主要給大家介紹了關(guān)于Mybatis多線程下如何使用Example的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Mybatis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • mybatisPlus實(shí)現(xiàn)倒序拼接字符串

    mybatisPlus實(shí)現(xiàn)倒序拼接字符串

    這篇文章主要介紹了mybatisPlus實(shí)現(xiàn)倒序拼接字符串方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論