Java: 對象的大小怎麼算

用這個包計算對象的大小:

可以看到這個integer包裝類是16字節。

int是值類型,佔用的大小是4字節。

爲什麼Integer是16字節。

涉及對象的計算方法。因爲Integer是一個對象。

其中標記包括主要是看作爲一把鎖是不是被別人佔用了、對象的hashcode、對象的年齡(年齡超過6就爲老年代(GC年齡))

如果是數組還會有一個標記對象數組長度的佔用4字節。

所以數組的最大的大小是int的最大值。

回到爲什麼Integer是16字節的問題:

int值有地址所以佔用4字節,標記戰8字節,這裏的int不是數組所以不用再加4.

現在是4+8=12.

看完頭,還有內容沒有算:

進入對象查看內容,查找不是static的,【static不是屬於對象的】,方法存在方法區也不佔用對象的大小:

經過查找就只有這個是對象內容部分,int 值類型佔4字節,加上前面的頭佔12字節。

所以一共是12+4=16字節。所以打印出16.

同樣的方法分析其他類的對象的大小。

注意,如果上面找到的對象內容不止一個,假設找到2個,就是2*4=8字節,加上頭大小12字節共爲20字節,

但是實際結果是24.

因爲java中是按8個字節對齊對象的,所以任何一個對象的大小都應該是8的倍數。

 

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