用這個包計算對象的大小:
可以看到這個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的倍數。