java對象布局(JOL)


java對象布局JOL(java object layout),描述對象在堆內存的布局。如下圖:

 

 

 

1.markword 固定長度8byte,描述對象的identityhashcode,分代年齡,鎖信息等(https://www.cnblogs.com/katsu2017/p/12610002.html);

2.klasspoint 固定長度4byte, 指定該對象的class類對象(默認使用-XX:+UseCompressedClassPointers 參數進行壓縮,可使用-XX:-UseCompressedClassPointers關閉,則該字段在64位jvm下占用8個字節;可使用java -XX:+PrintCommandLineFlags -version 命令查看默認的或已設置的jvm參數);

3.基本變量:用於存放java八種基本類型成員變量,以4byte步長進行補齊,使用內存重排序優化空間;

4.引用變量:存放對象地址,如String,Object;占用4個字節,64位jvm上默認使用-XX:+UseCompressedOops進行壓縮,可使用-XX:-UseCompressedOops進行關閉,則在64位jvm上會占用8個字節

5.補齊:對象大小必須是8byte的整數倍,用來補齊字節數。Object o = new Object() 在內存中占用16個字節,其中最后4個是補齊;

6.數組長度:如果是數組,額外占用固定4byte存放數組長度;

示例展示


1.jvm基本信息

 

 

 4, 1, 1, 2, 2, 4, 4, 8, 8 分別表示:引用句柄, byte, boolean, char, short, int, float, double, long長度

2.new object

 

 對象大小是16字節,其中最后4個字節是用來對齊的。

3.對象內存重排序

 

 

 

1)如果8種基本變量定義為包裝類型,則變成了引用變量

2)以8byte為步長分配空間,header占用固定12字節,故開始需要對齊的4字節從int和float中選(哪個定義在前選哪個)

3)其他成員變量的分配順序是基本類型變量優先引用類型變量,基本類型優先級double>long>float>char>short>byte>boolean,將補齊字節數降到最低

4.對象繼承

 

 

 其中父類中的成員變量優先於子類,其他同上 

 

參考:

1.https://segmentfault.com/a/1190000012354736

2.https://blog.csdn.net/liuxiao723846/article/details/91981757


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM