解剖Java對象

一個Java對象內部結構是什麼樣子的呢?

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個字節。所以,包裝類對象比基本類型佔用的空間還是要多很多的。

拓展閱讀:

https://www.jianshu.com/p/3d38cba67f8b

https://blog.csdn.net/zqz_zqz/article/details/70233767

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章