1. 程式人生 > 程式設計 >Java物件佈局(JOL)實現過程解析

Java物件佈局(JOL)實現過程解析

java物件佈局JOL(java object layout),描述物件在堆記憶體的佈局。如下圖:

Java物件佈局(JOL)實現過程解析

1.markword 固定長度8byte,描述物件的identityhashcode,分代年齡,鎖資訊等(https://www.jb51.net/article/183984.htm);

2.klasspoint 固定長度4byte,指定該物件的class類物件;

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

4.引用變數:存放類的引用變數控制代碼,如String,Object;每個控制代碼大小在32位虛擬機器上是4byte,64位虛擬機器上是8byte,但java8開始預設開啟UseCompressedOops壓縮引數,故也是4byte,   kasspoint也是如此;

5.補齊:物件大小必須是8byte的整數倍,用來補齊位元組數。Object o = new Object() 在記憶體中佔用16個位元組,其中最後4個是補齊;

6.陣列長度:如果是陣列,額外佔用固定4byte存放陣列長度;

示例展示

1.jvm基本資訊

Java物件佈局(JOL)實現過程解析

4,1,2,4,8,8 分別表示:引用控制代碼,byte,boolean,char,short,int,float,double,long長度

2.new object

Java物件佈局(JOL)實現過程解析

物件大小是16位元組,其中最後4個位元組是用來對齊的。

3.物件記憶體重排序

Java物件佈局(JOL)實現過程解析

1)如果8中基本變數定義為包裝型別,則變成了引用變數

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

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

4.物件繼承

Java物件佈局(JOL)實現過程解析

Java物件佈局(JOL)實現過程解析

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。