一個Java對象內部結構是什麼樣子的呢?
一個對象在內存中分爲三塊存儲區域:1對象頭、2實例數據、3對齊填充
對象頭(Object Head):對象頭佔用12字節,對象頭分爲8字節(64位JVM)的對象標記(Mark Word)和4字節的類元信息(指向類元信息的引用)
實例數據(Instance Data):存儲類本身的實例成員變量和所有可見的父類成員變量。
對齊填充(Padding):對象的存儲空間分配單位爲8個字節,總大小不足8的倍數,需要填充。
對象標記(Mark Word)存儲對象本身運行時的數據,如哈希碼、GC標記、鎖信息、縣城關聯信息等。
類元信息(Klass)指向存儲類信息的引用
舉個例子:Integer實例對象佔用多少字節呢?基本數據類型int佔用四字節,再加12字節的對象頭,是16個字節。所以,包裝類對象比基本類型佔用的空間還是要多很多的。
拓展閱讀: