1舍败、對象頭:
Mark Word:對象自身運行數(shù)據(jù)(哈希碼、GC分代年齡敬拓、縮狀態(tài)標志邻薯、線程持有的鎖、偏向線程ID乘凸、偏向時間戳等)厕诡。
類型指針:對象指向它的類的元數(shù)據(jù)指針,虛擬機通過這個指針來確定這個對象是哪個類的實例营勤。
2灵嫌、實例數(shù)據(jù):
實例數(shù)據(jù)部分是對象真正存儲的有效信息,也是在程序代碼中所定義的各種類型字段的內(nèi)容葛作。無論是從父類繼承下來的還是子類中定義的寿羞,都需要記錄下來。這部分的存儲順序會受到虛擬機分配策略參數(shù)(FieldsAllocationStyle)和字段在Java源碼中定義順序的影響赂蠢。HotSpot虛擬機默認的分配策略為longs/doubles绪穆、ints、shorts/chars、bytes/booleans霞幅、oops(Ordinary Object Pointers),從分配策略中可以看出漠吻,相同寬度的字段總是被分配到一起。在滿足這個前提條件的情況下司恳,在父類中定義的變量會出現(xiàn)在子類之前途乃。如果CompactFields參數(shù)設置為true,那么子類之中較窄的變量也可能會插入到父類變量的空隙之中。
3扔傅、對齊填充:
對齊填充并不是必然存在的耍共,也沒有特別的含義,它僅僅起著占位符的作用猎塞。由于HotSpot VM的自動內(nèi)存管理系統(tǒng)要求對象的起始地址必須是8字節(jié)的整數(shù)倍(對象的大小必須是8字節(jié)的整數(shù)倍)试读,因此,當對象實例部分數(shù)據(jù)沒有對齊時荠耽,就需要通過對齊填充來補全钩骇。
摘自 《深入理解Java虛擬機》