Java一個對象所佔字節數計算方法

Java中一個對象所佔用的字節數爲8的整數倍。

 

Java對象包含四個部分:

A:對象頭,佔用很少的字節,表述Object當前狀態的信息

B:基本類型域佔用的空間(原生域指 int、boolean、short等)

C:引用類型域佔用的空間(引用類型域指 其他對象的引用,每個引用佔用4個字節)

D:填充物佔用的空間(後面說明什麼是填充物)

 

A.對象頭:包含一個對象的元數據信息,描述這個對象的狀態,ID,實例名字,數組長度等。。

內存中,每個對象佔用的總空間不僅包含對象內聲明的變量所需要的空間,還包括一些額外信息,比如:對象頭 和 填充物。“對象頭”的作用是用來記錄一個對象的實例名字、ID 和 實例狀態(例如,當前實例是否“可到達”,或者當前鎖的狀態等等)。

在當前的JVM版本中(Hotspot),“對象頭”佔用的字節數如下:

一個普通對象,佔用8 bytes

數組,佔用 12 bytes,包含普通對象的 8 bytes + 4 bytes(數組長度)

 

B:基本類型:包含這個對象的基本類型數據空間

boolean、byte 佔用 1 byte,char、short 佔用 2 bytes,int、float 佔用 4 bytes,long、double 佔用 8 bytes

C:引用類型:包含一些引用類型或方法所佔用的空間

每個引用類型佔用 4 bytes

D:填充物:由於對象所佔用的數據大小爲8的整數倍,有時前三者佔用空間大小總和不是8整數倍,需要填充幾個字節使其爲8的整數倍。

在Hotspot中,每個對象佔用的總空間是以8的倍數計算的,對象佔用總空間(對象頭+聲明變量)不足8的倍數時候,自動補齊。而,這些被填充的空間,我們可以稱它爲“填充物”。

發佈了12 篇原創文章 · 獲贊 2 · 訪問量 1258
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章