java對象包括對小偷,實例數(shù)據(jù)和對齊填充
任何一個對象都有對象頭,對象頭在32位系統(tǒng)上占用,64位系統(tǒng)上占用16bytes
對象頭的結(jié)構(gòu)
|?mark?word?|?klass?pointer?|?array?size?(opt)?|?padding
空對象的不包含任何成員變量,其大小即對象頭大小:
在 32 位 JVM 上,占用 8 字節(jié);
在未開啟UseCompressedOops的 64 位 JVM 上,16 字節(jié)。(感謝評論區(qū)的@SingleCool糾正)
在開啟UseCompressedOops的 64 位 JVM 上,12 + 4 = 16;
數(shù)組也是對象,故有對象的頭部,另外數(shù)組還有一個記錄數(shù)組長度的 int 類型,隨后是每一個數(shù)組的元素:基本數(shù)據(jù)類型或者引用。8 字節(jié)對齊
https://www.liaohuqiu.net/cn/posts/caculate-object-size-in-java/