對象的內存布局
在HotSpot虛擬機中,對象在內存中存儲的布局可以分為3塊區域:對象頭(Header),實例數據(Instance Data)和對象填充(Padding)。

- 實例數據:對象真正存儲的有效信息,存放類的屬性數據信息,包括父類的屬性信息;
- 對齊填充:由於虛擬機要求 對象起始地址必須是8字節的整數倍。填充數據不是必須存在的,僅僅是為了字節對齊。
- 對象頭:Hotspot虛擬機的對象頭主要包括兩部分數據:Mark Word(標記字段)、Class Pointer(類型指針)。
對象頭
對象頭主要包括兩部分數據:Mark Word(標記字段)、Class Pointer(類型指針)。

- Class Pointer:是對象指向它的類元數據的指針,虛擬機通過這個指針來確定這個對象是哪個類的實例
- Mark Word : 用於存儲對象自身的運行時數據,它是實現輕量級鎖和偏向鎖的關鍵。
Mark word
Mark Word 用於存儲對象自身的運行時數據,如哈希碼(HashCode)、GC分代年齡、鎖狀態標志、線程持有的鎖、偏向線程 ID、偏向時間戳等。
在32位的HotSpot虛擬機中,如果對象處於未被鎖定的狀態下,那么Mark Word的32bit空間里的25位用於存儲對象哈希碼,4bit用於存儲對象分代年齡,2bit用於存儲鎖標志位,1bit固定為0,表示非偏向鎖。其他狀態如下圖所示:

- 前面分析可知,monitor特點是互斥進行,你再喵一下上圖,重量級鎖,指向互斥量的指針。
- 其實synchronized是重量級鎖,也就是說Synchronized的對象鎖,Mark Word鎖標識位為10,其中指針指向的是Monitor對象的起始地址。
- 頓時,是不是感覺柳暗花明又一村啦!對象與monitor怎么關聯的?答案:Mark Word重量級鎖,指針指向monitor地址。
總圖如下:
鎖的膨脹過程如下: