日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Monitor概念

發(fā)布時(shí)間:2023/12/18 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Monitor概念 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Monitor概念

Monitor 被翻譯為監(jiān)視器或管程

每個(gè) Java 對(duì)象都可以關(guān)聯(lián)一個(gè) Monitor 對(duì)象, 如果使用 synchronized 給對(duì)象上鎖(重量級(jí))之后,該對(duì)象頭的 Mark Word 中就被設(shè)置指向 Monitor 對(duì)象的指針

Monitor 結(jié)構(gòu)如下

  • 剛開(kāi)始 Monitor 中 Owner 為 null
  • 當(dāng) Thread-0 執(zhí)行 synchronized(object) 上鎖就會(huì)將 Monitor 的所有者 Owner 置為 Thread-0, 同時(shí)對(duì)象 object 中的 Mark Word 的 state 也會(huì)發(fā)生相應(yīng)改變。
  • 在 Thread-0 上鎖的過(guò)程中,如果 Thread-1, Thread-2, Thread-3 也來(lái)執(zhí)行 synchronized(object), 就會(huì)進(jìn)入 EntryList 變成 BLOCKED 狀態(tài)
  • Thread-0 執(zhí)行完同步代碼塊的內(nèi)容,然后喚醒 EntryList 中等待的線程來(lái)競(jìng)爭(zhēng)鎖,競(jìng)爭(zhēng)時(shí)是非公平的
  • 圖中 WaitSet 中的 Thread-4, Thread-5 是之前獲得過(guò)鎖,但條件不滿足進(jìn)入 WAITING 狀態(tài)的線程,可以由 notifyAll() , notify() 喚醒

注意:

  • synchronized 必須是進(jìn)入同一個(gè)對(duì)象的 monitor 才有上述的效果
  • 不加 synchronized 的對(duì)象不會(huì)關(guān)聯(lián)監(jiān)視器,不遵從以上規(guī)則

**Java 對(duì)象頭 **

以 32 位虛擬機(jī)為例

普通對(duì)象

|----------------------------------------------------------| | Object Header (64 bits) | |----------------------------------------------------------| | Mark Word (32 bits) | Klass Word (32 bits) | |----------------------------------------------------------|

Mark Word : 用于存儲(chǔ)對(duì)象自身的運(yùn)行時(shí)數(shù)據(jù), 如哈希碼 (HashCode) 、GC 分代年齡、鎖狀態(tài)標(biāo)志、線程持有的鎖、偏向線程ID等。同時(shí)考慮到虛擬機(jī)的空間效率,Mark Word 被設(shè)計(jì)成一個(gè)有著動(dòng)態(tài)定義的數(shù)據(jù)結(jié)構(gòu)。

Klass Word: 類型定義信息 , Java 虛擬機(jī)通過(guò)這個(gè)指針來(lái)確定該對(duì)象是哪個(gè)類的實(shí)例(并不是所有的虛擬機(jī)都必須在對(duì)象數(shù)據(jù)上保留類型指針)。此外,如果對(duì)象是一個(gè) Java 數(shù)組,那在對(duì)象頭中還必須有一塊用于記錄數(shù)組長(zhǎng)度的數(shù)據(jù),因?yàn)槿绻麛?shù)組的長(zhǎng)度是不確定的,將無(wú)法推斷出數(shù)組的大小。

數(shù)組對(duì)象

|--------------------------------------------------------------------------------------| | Object Header (96 bits) | |--------------------------------------------------------------------------------------| | Mark Word (32 bits) | Klass Word (32 bits) | array length (32bits) | |--------------------------------------------------------------------------------------|

其中 Mark Word 結(jié)構(gòu) (動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu))為

存儲(chǔ)內(nèi)容標(biāo)志位狀態(tài)
對(duì)象哈希碼、對(duì)象分代年齡01未鎖定
指向鎖記錄的指針00輕量級(jí)鎖定
指向重量級(jí)鎖的指針10膨脹(重量級(jí)鎖定)
空,不需要記錄信息11GC標(biāo)記
偏向線程ID、便向時(shí)間戳、對(duì)象分代年齡01可偏向

32 位虛擬機(jī)

|-------------------------------------------------- |-----------------------------------| | Mark Word (32 bit) | State | |-------------------------------------------------- |-----------------------------------| | hashcode:25 | age:4 | biased_block:0 |01 | Normal | |-------------------------------------------------- |-----------------------------------| | thread:23 |epoch:2| age:4 | biased_block:1 |01 | Biased | |-------------------------------------------------- |-----------------------------------| | ptr_to_lock_record:30 |00 | LightWeight Locked | |-------------------------------------------------- |-----------------------------------| | ptr_to_heavyweight_monitor:30 |10 | HeavyWeight Locked | |-------------------------------------------------- |-----------------------------------| | |11 | Marked for GC | |-------------------------------------------------- |-----------------------------------|

64 位虛擬機(jī)

|-------------------------------------------------------------|-------------------------| | Mark Word (64 bit) | State | |-------------------------------------------------------------|-------------------------| | unused:25 | hashcode:31 | unused:1 | age:4 | biased_block:0 | 01 | Normal | |-------------------------------------------------------------|-------------------------| | thread:23 | epoch:2 | unused:1 | age:4 | biased_block:1 | 01 | Biased | |-------------------------------------------------------------|-------------------------| | ptr_to_lock_record:62 | 00 | LightWeight Locked | |-------------------------------------------------------------|-------------------------| | ptr_to_heavyweight_monitor:62 | 10 | HeavyWeight Locked | |-------------------------------------------------------------|-------------------------| | | 11 | Marked for GC | |-------------------------------------------------------------|-------------------------|

[深入理解 Java 虛擬機(jī) 第三版]:

總結(jié)

以上是生活随笔為你收集整理的Monitor概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。