精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官超級喜歡問的MarkWord

開發 后端
續上次被問到synchronized鎖后,面試官繼續刁難阿巴阿巴,進而深入到對象頭中相關的概念。

[[441998]]

前言

年底了,最近好幾天沒吃飯了,在微博吃瓜吃的飽飽的。

續上次被問到synchronized鎖后,面試官繼續刁難阿巴阿巴,進而深入到對象頭中相關的概念。

當場拿offer

面試官: 上次提到了synchronized鎖,那你知道synchronized鎖具體是怎么實現的嗎?

阿巴阿巴: 在JDK版本1.5及之前的版本synchronized主要靠的是Monitor對象來完成,同步代碼塊使用的是monitorenter和monitorexit指令,而synchronized修飾方法靠的是ACC_SYNCHRONIZED標識,這些都是進入到內核態進行加鎖的,然后將競爭鎖失敗的線程直接掛起,等待后面恢復。

阿巴阿巴: 在JDK1.6及之后的版本中,synchronized鎖得到了優化,引入了自適應自旋鎖、偏向鎖、輕量鎖,他們主要優化了鎖在一定條件下的性能。避免了一上來就加重量級鎖,等待鎖的其他線程只能乖乖掛起,對cpu性能影響特別大。

阿巴阿巴: 在hotspot虛擬機中,對象頭主要包括兩部分 MarkWord和Klass Pointer。

MarkWord 對象標記字段,默認存儲的是對象的HashCode,GC的分代年齡(2bit最大表示15)和鎖的標志信息等。對于32位的虛擬機MarkWord占32bit,對于64位的虛擬機MarkWord占用64字節。

Klass Pointer Class 對象的類型指針,它指向對象對應的Class對象的內存地址。大小占4字節(指針壓縮的情況下為4字節,未進行指針壓縮則占8字節)。32位虛擬機MarkWord分布

64位虛擬機MarkWord分布

圖片來源https://blog.csdn.net/weixin_40816843/article/details/120811181

查看虛擬機是多少位的可以使用:java -version

面試官: 我們怎么看對象頭里的MarkWord數據呢?

阿巴阿巴: 可以看到在openJDK中關于MarkWord的描述,首先可以在Github上找到Open Jdk的源碼

gitHub地址:https://github.com/openjdk/jdk

在IDE中打開并找到如下的位置

src/hotspot/share/oops/markWord.hpp

  1. // 查看虛擬機是多少位的可以使用:java -version   
  2. //  32 bits: 
  3. //  -------- 
  4. //            hash:25 ------------>| age:4  unused_gap:1  lock:2 (normal object) 
  5. // 
  6. //  64 bits: 
  7. //  -------- 
  8. //  unused:25 hash:31 -->| unused_gap:1  age:4  unused_gap:1  lock:2 (normal object) 

阿巴阿巴: 當然可以引入openjdk提供的jol-core,然后進行打印即可。

  1. // 在pom中引入 
  2. <dependency> 
  3.   <groupId>org.openjdk.jol</groupId> 
  4.   <artifactId>jol-core</artifactId> 
  5.   <version>0.10</version> 
  6. </dependency> 

然后編寫如下代碼

  1. public static void main(String[] args) { 
  2.      Test t = new Test(); 
  3.      System.out.println(ClassLayout.parseInstance(t).toPrintable()); 
  4.  } 

打印如下

markword在哪?Klass pointer在哪兒?

1處是MarkWord占用8Byte也就是64bit

2處是Klass Pointer占用了4Byte也就是32bit

klass pointer看起來是被壓縮了,怎么確定是被壓縮了呢?可以通過如下命令

面試官: 對于JDK1.6及以上版本,synchronized和MarkWord有啥關系嘛?

阿巴阿巴: 那關系可大了,可以看到在MarkWord中有2bit用來表示鎖的標志位,代表著經過優化的synchronized鎖不會直接上重量級鎖,而是由偏向鎖轉為輕量鎖,再由輕量鎖轉為重量級鎖,一步一步膨脹的過程。

下面是2bit的鎖標志位代表的含義

  1. //    [ptr             | 00]  locked      ptr points to real header on stack 
  2. //    [header          | 01]  unlocked    regular object header 
  3. //    [ptr             | 10]  monitor     inflated lock (header is wapped out
  4. //    [ptr             | 11]  marked      used to mark an object 
  5. //    [0 ............ 0| 00]  inflating   inflation in progress 
  6.  
  7. 001  無鎖狀態 (第一位代表偏向標志,為0的時候表示不偏向,為1的時候表示偏向) 
  8. 101  偏向鎖 且記錄線程ID 
  9. 00   輕量鎖 指向棧中鎖記錄的指針 
  10. 10   重量級鎖 重量級鎖的指針 
  11. 11   GC標志 

然后再找到上圖Value部分的數據,這兩位是鎖的標志位

面試官: 你剛不是說有一位是鎖的偏向標志嗎?在哪兒呢?

阿巴阿巴: 鎖的偏向標志就在鎖標志的前一位

阿巴阿巴: 程序啟動后4s就會加偏向鎖,只不過這個偏向鎖沒有偏向任何線程ID,也屬于無鎖狀態

阿巴阿巴: 當應用處于單線程環境中時,這時候上的是偏向鎖,在對象頭中偏向標示顯示為1,案例如下

  1. public static void main(String[] args) { 
  2.      Test t = new Test(); 
  3.      new Thread(()->{ 
  4.          synchronized (t) { 
  5.              System.out.println(ClassLayout.parseInstance(t).toPrintable()); 
  6.          } 
  7.      }).start(); 
  8.  } 

打印出來的數據如下

阿巴阿巴: 讓程序處于2個線程交替進行競爭鎖

  1. public static void main(String[] args) throws InterruptedException { 
  2.         Test t = new Test(); 
  3.         Thread thread = new Thread(()->{ 
  4.             synchronized (t) { 
  5.                 System.out.println(ClassLayout.parseInstance(t).toPrintable()); 
  6.             } 
  7.  
  8.         }); 
  9.         thread.start(); 
  10.         // 等待thread運行完 
  11.         thread.join(); 
  12.          
  13.         synchronized (t) { 
  14.             System.out.println(ClassLayout.parseInstance(t).toPrintable()); 
  15.         } 
  16.     } 

可以看到當main線程拿鎖時已經膨脹為輕量鎖了,鎖的2bit標志為變成00了

阿巴阿巴: 輕量鎖的時候,虛擬機會在當前線程的棧幀中建立一個鎖記錄的空間“Lock Record”,用于存儲鎖對象目前的MarkWord的拷貝,這一步采用CAS,如果成功了,那么與此同時,2bit的鎖標記位會從“01”轉變為“00”。這就是加輕量鎖的過程。

阿巴阿巴: 之所以引入偏向鎖,是為了解決在無多線程競爭環境下的輕量鎖,輕量鎖CAS多次的嘗試也是對性能的損耗。相對于輕量鎖而言,偏向鎖值只需要進行一次CAS,這次CAS是用來設置線程ID的,設置成功后就代表獲取鎖了。輕量鎖更適合于線程交替執行的場景,它們通過CAS自旋,避免了線程直接掛起以及掛起后的恢復過程,以此來降低CPU的損耗。

阿巴阿巴: 最后讓我們看看加上重量鎖后的MarkWord表現吧,先上代碼

  1. public static void main(String[] args) throws InterruptedException { 
  2.         Test t = new Test(); 
  3.         Thread thread = new Thread(()->{ 
  4.             synchronized (t) { 
  5.                 System.out.println(ClassLayout.parseInstance(t).toPrintable()); 
  6.             } 
  7.  
  8.         }); 
  9.         thread.start(); 
  10.         // 等待thread運行完 
  11.         // thread.join(); 去掉該代碼 
  12.  
  13.         synchronized (t) { 
  14.             System.out.println(ClassLayout.parseInstance(t).toPrintable()); 
  15.         } 
  16.     } 

控制臺打印如下,發現已經加上重量鎖了,鎖的2bit標志為變成10了。

阿巴阿巴: 當輕量級鎖升級成重量級鎖時,Mark Word的鎖標記位更新為10,Mark Word 將指向互斥量(重量級鎖)。

阿巴阿巴: 以上就是關于synchronized和MarkWord的關系啦。

面試官: 理解的不錯,明天來上班吧~

阿巴阿巴: 好的~

 

責任編輯:姜華 來源: 程序員巴士
相關推薦

2021-11-08 09:18:01

CAS面試場景

2021-12-16 18:38:13

面試Synchronize

2021-12-02 18:20:25

算法垃圾回收

2022-01-05 08:56:20

Vue修飾符面試

2024-03-25 11:03:38

Vue修飾符lazy

2018-05-10 15:48:47

面試面試官Java

2020-07-28 00:58:20

IP地址子網TCP

2025-06-03 07:05:00

Linux操作系統Windows

2021-01-06 05:36:25

拉鏈表數倉數據

2010-08-23 15:06:52

發問

2022-01-05 09:55:26

asynawait前端

2018-01-19 10:43:06

Java面試官volatile關鍵字

2021-04-21 09:28:17

字節面試官SetTimeout

2024-08-19 09:13:02

2024-06-04 07:38:10

2010-10-27 11:07:45

面試官

2021-02-03 15:30:10

面試垃圾回收器前端

2023-06-13 07:04:27

2025-03-10 03:00:00

CSSline字體

2015-08-13 10:29:12

面試面試官
點贊
收藏

51CTO技術棧公眾號

国产欧美 在线欧美| 亚洲精品色婷婷福利天堂| 欧美爱爱视频网站| 99久久免费国产精精品| 国内精品久久久久久久影视蜜臀 | 天天躁日日躁狠狠躁喷水| 亚洲综合精品四区| 久久视频在线播放| 人人妻人人澡人人爽人人精品| 成人一区视频| 亚洲v日本v欧美v久久精品| 任我爽在线视频精品一| 国产美女免费视频| 久久久999| 欧美激情a在线| 国产激情av在线| 麻豆成人入口| 欧美一区二区女人| 狠狠爱免费视频| 欧美亚洲天堂| 中文字幕在线播放不卡一区| 久久精品久久精品国产大片| 国产深喉视频一区二区| 日本91福利区| 欧美有码在线观看视频| 欧美极品aaaaabbbbb| 成人在线免费视频观看| 日韩精品中文字幕在线播放| 日本r级电影在线观看| 韩日一区二区| 日韩欧美极品在线观看| 高清无码视频直接看| 在线看黄色av| 欧美国产日韩在线观看| 国内一区在线| 丰满人妻熟女aⅴ一区| 国产一区二区0| 国产在线精品自拍| 中文字幕理论片| 亚洲欧美日本日韩| 国a精品视频大全| 久久久久久福利| 欧美黄色精品| 欧美成人久久久| 日韩精品一区二区三区在线视频| 国产一区二区三区电影在线观看| 亚洲精品wwwww| 奇米777第四色| 97se亚洲国产一区二区三区| 日韩一级二级三级精品视频| 亚洲高清在线不卡| 国产精品一站二站| 91精品国产品国语在线不卡| 久久久久久久高清| **欧美日韩在线| 欧美精选午夜久久久乱码6080| 狠狠热免费视频| 巨胸喷奶水www久久久免费动漫| 色偷偷久久人人79超碰人人澡 | a级片在线免费| 午夜精品一区在线观看| 波多野结衣综合网| 日韩在线伦理| 91国模大尺度私拍在线视频| 成人免费视频久久| 欧美成人一二区| 91.成人天堂一区| 老女人性生活视频| 岛国精品一区| 亚洲区一区二区| 精品手机在线视频| 亚洲国产精品久久久久蝴蝶传媒| 欧美乱妇40p| 日本在线观看中文字幕| 亚洲免费综合| 国产精品美女免费视频| 国产又粗又长又黄| 成人小视频免费观看| 国产精品免费区二区三区观看| 亚洲色图 校园春色| 久久久久国产一区二区三区四区| 亚洲精品欧美精品| 性欧美videos高清hd4k| 午夜电影一区二区| 蜜臀av免费观看| 亚洲午夜免费| 亚洲图片欧洲图片av| 天堂网中文在线观看| 午夜精品婷婷| 国产成人精品电影久久久| 一级黄色短视频| 成人h动漫精品一区二区| 欧美一区免费视频| 成人短视频在线| 精品久久香蕉国产线看观看gif| www黄色在线| 精品精品视频| 亚洲欧美日韩在线高清直播| 亚洲熟女毛茸茸| 亚洲精品在线二区| 成人福利网站在线观看| 污视频在线免费| 国产精品国产三级国产普通话三级 | 国产欧美日韩中文字幕| 色婷婷av一区二区三| 国产精品久久看| 91猫先生在线| 精品国产三区在线| 国产亚洲美女久久| 国产午夜福利一区二区| 久久99精品久久久久| 久久草.com| av免费在线免费观看| 91精品福利在线| yjizz视频| 亚洲欧洲美洲一区二区三区| 日本精品久久中文字幕佐佐木 | 亚洲第一视频在线观看| 殴美一级黄色片| 天堂va蜜桃一区二区三区漫画版| 91一区二区三区| 最新97超碰在线| 欧美天堂在线观看| 无码成人精品区在线观看| 手机在线电影一区| 日韩av毛片网| 色猫av在线| 午夜视频一区二区三区| 黄色三级视频在线播放| 成人短片线上看| 日本三级久久久| 亚洲av成人无码网天堂| 亚洲一区二区三区四区不卡| 亚洲一二区在线观看| 91亚洲人成网污www| 国产精品国语对白| 韩国三级av在线免费观看| 亚洲va国产va欧美va观看| 日本女人性视频| 香蕉视频国产精品| 成人激情视频网| 免费不卡视频| 欧美日本国产视频| 久久噜噜色综合一区二区| 日本伊人精品一区二区三区观看方式| 欧美12av| 成人天堂yy6080亚洲高清| 日韩成人在线视频| 国产精品999在线观看| 成人91在线观看| 欧美爱爱视频免费看| 高潮久久久久久久久久久久久久 | 亚洲精品在线免费看| 亚洲成人av观看| 最近2019中文字幕mv免费看| 中文字幕乱码一区二区| 中文字幕成人av| 久久国产精品国产精品| 日韩美女一区二区三区在线观看| 国产精品吴梦梦| 美女写真理伦片在线看| 91精品国产麻豆国产自产在线| 国产一区二区播放| 成人高清免费观看| 国产午夜大地久久| 国产日韩欧美一区二区三区| 国产精品久在线观看| 午夜视频成人| 日韩午夜中文字幕| 亚洲一区欧美在线| 久久亚洲影视婷婷| 天天操天天爱天天爽| 国产精品99在线观看| 91嫩草免费看| 大黄网站在线观看| 国产视频欧美视频| 国产精品人人妻人人爽| 亚洲国产一区二区三区青草影视| 亚洲视频在线播放免费| 丝袜国产日韩另类美女| 中文字幕日韩精品一区二区| 亚洲三级av| 日韩免费av片在线观看| 黄色片免费在线观看| 亚洲第一页自拍| 久久久久精彩视频| 一区二区三区四区在线播放| 国产夫妻性爱视频| 激情综合色综合久久综合| 欧美一级免费播放| 日韩a一区二区| 成人欧美一区二区三区在线观看| 成人影院入口| 美女啪啪无遮挡免费久久网站| 天天色棕合合合合合合合| 欧美日韩免费高清一区色橹橹| 成人免费看片98| 中文字幕精品综合| 男人网站在线观看| 久久99精品国产麻豆婷婷洗澡| 草草视频在线免费观看| 日韩国产专区| 国内外成人免费视频| 国产视频一区二区在线播放| 日本三级久久久| 免费污视频在线| 日韩中文av在线| 手机看片1024国产| 欧美一激情一区二区三区| 亚洲成人第一网站| 亚洲曰韩产成在线| 日本免费网站视频| 久久久精品欧美丰满| 熟妇高潮一区二区| 久久99精品久久久| 久久久精品三级| 国产精品嫩草99av在线| 国产精品无码电影在线观看| 色婷婷亚洲mv天堂mv在影片| 精品亚洲一区二区三区四区五区高| 国产成人视屏| 国产日韩欧美在线视频观看| 久久sese| 91福利视频在线观看| 第一中文字幕在线| 久久97久久97精品免视看| 黄网站app在线观看| 国产一区二区三区在线观看网站| 色婷婷av一区二区三区之e本道| 日韩一区二区三| 国产人妖一区二区三区| 69久久99精品久久久久婷婷| 欧美高清69hd| 色999日韩国产欧美一区二区| 久久久午夜影院| 午夜电影一区二区三区| 日韩欧美一区二区一幕| 亚洲高清视频的网址| 国产亚洲成人精品| 亚洲国产成人av好男人在线观看| 青青青在线视频| 亚洲一区在线看| 真实国产乱子伦对白在线| 亚洲色图在线视频| 老司机深夜福利网站| 国产精品久久久久久久久晋中| 久久久久久久毛片| 国产欧美日韩另类一区| 亚洲黄色小说视频| 国产欧美一区二区三区鸳鸯浴| 30一40一50老女人毛片| 国产亚洲欧美激情| 免费看黄色三级| 国产精品日韩成人| 日本少妇aaa| 亚洲色图欧洲色图婷婷| 国产大学生自拍| 亚洲一二三四区| 人人干人人干人人干| 一本大道av一区二区在线播放| 免费看毛片网站| 欧美色倩网站大全免费| 国产又黄又粗又长| 日韩你懂的在线播放| 日韩一卡二卡在线| 亚洲美腿欧美激情另类| 草草影院在线观看| 另类图片亚洲另类| 成人女同在线观看| 欧洲美女免费图片一区| 亚洲综合av一区二区三区| 成人免费视频网| 91午夜精品| 欧美lavv| 亚洲精品国产偷自在线观看| 91黄色在线看| 日韩中文字幕不卡| 午夜视频在线观| 99国产精品国产精品毛片| 欧洲av一区二区三区| 综合电影一区二区三区| 国产一国产二国产三| 日本高清不卡在线观看| 国产精品国产av| 亚洲精品xxxx| 最新97超碰在线| 97国产在线观看| 久久免费资源| 国产有色视频色综合| 精品盗摄女厕tp美女嘘嘘| 日本丰满大乳奶| 性欧美videos另类喷潮| 想看黄色一级片| 91在线观看地址| 天天看片中文字幕| 色婷婷综合久久久久中文一区二区| 国产美女裸体无遮挡免费视频| 日韩av综合网站| av免费网站在线| 国产ts人妖一区二区三区| 精品国产麻豆| 亚洲巨乳在线观看| 国产一区二区你懂的| 夜夜爽久久精品91| 中文字幕欧美区| 国产成人精品a视频一区| 欧美精品第一页| 青青青草原在线| 97国产精品久久| 日韩精品一区二区三区中文 | 欧美香蕉大胸在线视频观看| 国产女人18毛片水18精| 亚洲欧洲国产一区| 91吃瓜在线观看| 亚洲一区二区三区视频播放| 精品成av人一区二区三区| 国产精品12345| 国产成人精品一区二区三区四区| 色www亚洲国产阿娇yao| 色哟哟日韩精品| 日本成人动漫在线观看| 九九精品在线视频| 日本亚洲欧洲无免费码在线| 热re99久久精品国99热蜜月| 国产精品亚洲综合久久| 扒开伸进免费视频| 夜夜操天天操亚洲| 99热这里是精品| 久久精品国产欧美激情| 日韩精品免费观看视频| 欧美国产综合视频| 亚洲欧美卡通另类91av| 国产精品300页| 性做久久久久久久免费看| 亚洲国产www| 欧美黑人xxx| 6080成人| 91免费国产精品| 成人国产一区二区三区精品| 久久久久久久黄色| 欧美成人一区二区三区在线观看| 国产福利视频在线| 亚洲va欧美va国产综合久久| 9999国产精品| 欧洲美女亚洲激情| 亚洲免费看黄网站| 亚洲欧美强伦一区二区| 国内揄拍国内精品| 国内毛片久久| 中文字幕无码精品亚洲35| 97国产一区二区| 国产美女激情视频| 国产午夜精品视频免费不卡69堂| 芒果视频成人app| 色999日韩自偷自拍美女| 免费在线看成人av| 卡通动漫亚洲综合| 精品欧美黑人一区二区三区| yellow字幕网在线| 麻豆av一区二区三区| 日韩av一级电影| 永久免费看片直接| 日韩欧美一二三四区| 超碰在线99| 色噜噜色狠狠狠狠狠综合色一| 蜜桃一区二区三区在线观看| 四虎精品免费视频| 亚洲国产日韩欧美综合久久| 性欧美又大又长又硬| 亚洲二区自拍| 国产成人免费在线视频| 国产成人在线免费观看视频| 一区二区欧美日韩视频| 亚洲日日夜夜| 天天夜碰日日摸日日澡性色av| 久久久亚洲高清| 国产精品欧美激情在线| 欧美精品福利在线| 国产一区二区观看| 亚洲精品乱码久久久久久动漫| 午夜不卡av免费| 日韩伦理在线电影| 国产精品伊人日日| 日韩av成人高清| 精品在线视频观看| 少妇高潮久久久久久潘金莲| 视频在线观看免费影院欧美meiju| 免费在线a视频| 亚洲精品国产高清久久伦理二区| 性感美女福利视频| 亚洲综合日韩在线| 噜噜噜91成人网| 欧美激情图片小说| 亚洲人成网站在线播| 国产一区二区久久久久| www黄色av| 一区二区三区不卡视频| 久久这里精品| av在线亚洲男人的天堂| 日韩av不卡在线观看|