1. 程式人生 > >記一次對java對象在內存中的分析

記一次對java對象在內存中的分析

數據 ots 字節對齊 位數 數據位 64位 數組 內存大小 特殊

java 對象 占內存大小 計算方式 及 常用類型的占用

HotSpot的對齊方式為8字節對齊 ----計算公式:(對象頭 + 實例數據 + padding) % 8等於0且0 <= padding < 8

Hotspot 機 中 普通對象
32位 對象頭 占 8個字節 引用類型 占 4字節
64位 對象頭 占 16個字節 引用類型 占 8字節

64位中
空對象數組 對象頭 占 24 增加一個長度 增加 一個引用類型的長度 64位中是 8
空的基本數據類型數組 對象頭 占 24 增加一個長度 增加一個基本數據類型自身的 長度


64位 壓縮後

普通對象 對象頭 占 12個字節 引用類型 占 4字節

數組對象壓縮後 對象頭 占 16
增加一個長度 增加一個基本數據類型自身的 長度
----因為 java 的跨平臺性,所以基本類型的數據在32位和64位上占內存大小是一樣的

1Bytes = 8bit cpu一次能處理的數據位數----32位和64位----4字節和8字節

對象頭的內存布局

對象自身的運行數據 占一次cpu 指向對象實例的指針 占 一次cpu
數組比較特殊,因為要把數據長度存到頭部,所以又要占 一次cpu

以上可以看出 普通對象的對象頭 有兩部分 而 數組對象有三部分
可以推算出
32 位 普通對象 的對象頭 是 8 數組 的對象頭是 12
64 位 普通對象 的對象頭 是 16 數組 的對象頭是 24

記一次對java對象在內存中的分析