看到书里有这么一段话:一个Integer对象会使用24字节,其中分别是:
16字节的对象开销
4字节用于保存它的int值
4个填充字节
我想请教的是:
什么对象开销?16字节里面究竟存储着什么?
填充字节又是什么?它里面存储着什么?
认证高级PHP讲师
16個位元組是是Object Header,包括了Mark word,Class類型資訊...(16個位元組是64位元系統上,並且沒有開啟指標壓縮的大小)
Object Header
Mark word
Class
HotSpot的對齊方式是以8位元組對齊,所有沒有物件最終大小沒有到8個位元組的倍數的,都會被填滿
物件開銷中放著物件的基本資訊;填充位元組用來填滿位元組數的啊,物件佔用的位元組必須是8位元組的倍數。
下面只是不負責任的猜測:Integer繼承自Object,建構Integer的時候要先建構Object,物件開銷就是這時候建構Object的開銷,其中8個位元組是空對象,4個位元組是物件引用,但是Java裡位元組分配以8為單位,所以這裡要用16字節,其中沒用的位元組叫填滿位元組。 下面填充位元組一樣。
16個位元組是是
Object Header
,包括了Mark word
,Class
類型資訊...(16個位元組是64位元系統上,並且沒有開啟指標壓縮的大小)HotSpot的對齊方式是以8位元組對齊,所有沒有物件最終大小沒有到8個位元組的倍數的,都會被填滿
物件開銷中放著物件的基本資訊;填充位元組用來填滿位元組數的啊,物件佔用的位元組必須是8位元組的倍數。
下面只是不負責任的猜測:
Integer繼承自Object,建構Integer的時候要先建構Object,物件開銷就是這時候建構Object的開銷,其中8個位元組是空對象,4個位元組是物件引用,但是Java裡位元組分配以8為單位,所以這裡要用16字節,其中沒用的位元組叫填滿位元組。
下面填充位元組一樣。