做企業(yè)平臺(tái)的網(wǎng)站百度競(jìng)價(jià)點(diǎn)擊軟件
在Java虛擬機(jī)(HotSpot)中,對(duì)象在 Java 內(nèi)存中的 存儲(chǔ)布局 可分為三塊:
- 對(duì)象頭 存儲(chǔ)區(qū)域
- 實(shí)例數(shù)據(jù) 存儲(chǔ)區(qū)域
- 對(duì)齊填充 存儲(chǔ)區(qū)域
對(duì)象頭區(qū)域:
存儲(chǔ)對(duì)象自身的運(yùn)行時(shí)數(shù)據(jù),如:哈希碼、GC分代年齡、鎖狀態(tài)標(biāo)志、線程持有的鎖、偏向線程ID、偏向時(shí)間戳。
存儲(chǔ)對(duì)象類型指針,即對(duì)象指向類元數(shù)據(jù)的指針,JVM可以確定這個(gè)對(duì)象屬于哪個(gè)類的實(shí)例。
如果是數(shù)組,對(duì)象頭中還有一塊記錄數(shù)組長度的數(shù)據(jù)。
實(shí)例數(shù)據(jù)區(qū)域:
- 代碼中定義的字段內(nèi)容。
對(duì)齊填充區(qū)域:
- 占位符。
- 非必須。
說明:占位符起占位作用,因?yàn)閷?duì)象的大小必須是8字節(jié)的整數(shù)倍,而因HotSpot VM的要求對(duì)象起始地址必須是8字節(jié)的整數(shù)倍,且對(duì)象頭部分正好是8字節(jié)的倍數(shù)。因此,當(dāng)對(duì)象實(shí)例數(shù)據(jù)部分沒有對(duì)齊時(shí)(即對(duì)象的大小不是8字節(jié)的整數(shù)倍),就需要通過對(duì)齊填充來補(bǔ)全。