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 複合對象內存大小計算
-
原生類型就是本身的大小
-
引用類型四個字節大小
-
靜態屬性是從歸屬上來說是屬於類的,其大小不算到對象大小中
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/