你真的了解Java對象嗎


一、什么是Java對象

  Java對象是一類事物的抽象,有狀態和行為。

二、Java對象的創建過程

2.1、Class加載

2.2、Class 鏈接 (驗證、准備、解析)

2.3、申請對象內存

2.4、成員變量賦默認值

2.5、調用構造方法

  1、成員變量賦初始值

  2、執行構造方法語句

三、Java對象的布局、結構

4.1、普通對象

  1、對象頭 markword   

  2、ClassPointer指針  (啟動參數   -XX:+UserCompressedClassPointers 開啟時為4字節,不開啟為8字節)

  3、實例數據  (引用類型, -XX:+UserCompressedClassPointers 開啟時為4字節,不開啟為8字節)

  4、Padding對齊  8的倍數

4.2、數組對象

  1、對象頭 markword   

  2、ClassPointer指針  (啟動參數   -XX:+UserCompressedClassPointers 開啟時為4字節,不開啟為8字節)

  3、數組的長度

  4、實例數據  (引用類型, -XX:+UserCompressedClassPointers 開啟時為4字節,不開啟為8字節)

  5、Padding對齊  8的倍數

四、Java對象頭的結構

  對象頭包含兩部分內容:

1、對象的狀態信息

  對象的鎖信息(2位標識當前對象鎖的狀態,記錄鎖升級后,當前對象是何種鎖),hashcode信息

2、類型指針

  通過類型指針了解對象時哪個類的實例

五、對象的訪問/對象的定位

1、句柄

  相較於直接指針方式,通過句柄方式訪問對象的速率慢,但垃圾回收速率快

    

2、直接指針

   相較於句柄方式,通過直接指針方式訪問對象的速率快,但垃圾回收速率慢

        

六、對象的大小

  針對64位,Object o = new Object(); 在內存中占用了多少字節

  1、markword   8字節

  2、UseCompressed 開啟壓縮    4字節, 不開啟壓縮 8字節

  3、實例數據   0 字節

  4、Padding對齊   8的倍數

  綜上:

    開啟壓縮占用字節: 8 + 4  = 12  , 因為Padding對齊,  12 + 4 = 16

    不開啟壓縮占用字節: 8 + 8 = 16, 不需要padding對齊

  結論:

    Object o = new Object();占用16字節。


免責聲明!

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



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