Java 對象佔用內存大小探察

1 內存佈局

Java對象內存佈局:

對象頭 + 實例數據 + 對齊padding

note:對齊padding是這個內存對象佈局計算padding的,和對象頭沒有關係

1.2 指針壓縮

除了classPointer還能壓縮哪些內容, 數組的對象頭中的表示長度的爲啥也能壓縮???

note:指針壓縮對於jdk1.8是默認開啓的,實驗的不用時去開啓

1.3

2 對象頭

64位機器:

 

非壓縮(byte)

壓縮

detail(壓縮)

普通對象

16

12

markword(8) +classPointer(4)

數組對象

24

16

markword(8) +classPointer(4) + length(4)

數組對象比普通對象多了數組長度四個字節,對象頭的具體內容

1 對於有些人說的 數組對象等於 8 對象頭+ 4 length + 4對齊 感覺從概念上來說混亂,而且對齊是整個對象層面的對齊和對象頭沒啥關係。

2 classPointer,就是對象指向該對象所屬類的指針,這樣才能判斷一個對象的所屬類型

 

 

3 複合對象內存大小計算

  1. 原生類型就是本身的大小

  2. 引用類型四個字節大小

  3. 靜態屬性是從歸屬上來說是屬於類的,其大小不算到對象大小中

4 實踐

1 使用Lucene工具類

2 使用Java agent

9 實驗

todo

 

0 參考資料

http://www.importnew.com/14948.html

對象內存佈局 https://juejin.im/entry/5841381cac502e006b96699f

Java對象內存佈局 http://www.ideabuffer.cn/2017/05/06/Java%E5%AF%B9%E8%B1%A1%E5%86%85%E5%AD%98%E5%B8%83%E5%B1%80/

https://blog.csdn.net/yangguosb/article/details/79644483

發佈了87 篇原創文章 · 獲贊 20 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章