Synchronized 用的鎖是存在Java對象頭里的,那么什么是對象頭呢伟葫?
我們以 Hotspot 虛擬機(jī)為例校翔,Hopspot 對象頭主要包括兩部分?jǐn)?shù)據(jù):Mark Word(標(biāo)記字段) 和 Klass Pointer(類型指針)
Mark Word:默認(rèn)存儲對象的HashCode,分代年齡和鎖標(biāo)志位信息寂纪。這些信息都是與對象自身定義無關(guān)的數(shù)據(jù)湃番,所以Mark Word被設(shè)計成一個非固定的數(shù)據(jù)結(jié)構(gòu)以便在極小的空間內(nèi)存存儲盡量多的數(shù)據(jù)。它會根據(jù)對象的狀態(tài)復(fù)用自己的存儲空間吭露,也就是說在運行期間Mark Word里存儲的數(shù)據(jù)會隨著鎖標(biāo)志位的變化而變化吠撮。
Klass Point:對象指向它的類元數(shù)據(jù)的指針,虛擬機(jī)通過這個指針來確定這個對象是哪個類的實例讲竿。
在上面中我們知道了泥兰,synchronized 用的鎖是存在Java對象頭里的,那么具體是存在對象頭哪里呢题禀?答案是:存在鎖對象的對象頭的Mark Word中鞋诗,那么MarkWord在對象頭中到底長什么樣,它到底存儲了什么呢迈嘹?