欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java對象存儲內存布局詳解

 更新時間:2023年04月28日 10:37:40   作者:在下uptown  
眾所周知,Java是一門面向對象的語言,那么一個對象在內存中都包含什么東西呢,本文主要詳細介紹了Java對象的內存布局,訪問定位,創(chuàng)建過程,線程安全,感興趣的小伙伴可以跟著小編一起來學習

Java對象存儲內存布局

眾所周知,Java是一門面向對象的語言,那么一個對象在內存中都包含什么東西呢,首先,對象大部分是存儲在堆上的(逃逸除外 )。

那么對象存儲在堆中主要分為三個部分

  • 對象頭、對象實例數據、對齊補充(數組會多一個數組長度)
  • 對象頭:

    mark word: 存儲對象的hashCode、鎖信息(鎖升級)或分代年齡或GC標志等信息

    類型指針: 存儲指向對象所屬類(元數據中class文件)的指針,JVM通過這個確定這個對象屬于哪個類

  • 對象實例數據:

    new出的對象信息,存放類的屬性數據信息,包括父類的屬性信息;

  • 對齊補充

    數組對象會多對齊填充

    JVM要求對象占用的空間必須是8 的倍數,方便內存分配(以字節(jié)為最小單位分配),因此這部分就是用于填滿不夠的空間湊數用的。

Java對象的訪問定位

  • 主流的訪問方式主要有句柄直接指針
  • 句柄

    Java堆中劃分出一塊內存作為句柄池,棧中的reference中存儲的事對象的句柄地址,而句柄中包含了對象實例數據與類型數據各自具體的地址信息

  • 直接指針

    java堆中對象的內存布局必須考慮如何防止訪問類型數據的相關信息,reference中存儲的直接是對象地址。

  • 直接指針訪問對象不需要多一次間接訪問開銷,而句柄方便在對象地址發(fā)生改變時(垃圾回收會移動對象地址)只需要改變句柄中的指針引用本身不需要改變。

**
**

Java對象的創(chuàng)建過程

  • 虛擬機遇到new指令時,先去檢查指定的類是否被加載、驗證、準備為類中的所有靜態(tài)變量分配內存空間,并為其設置一個初始值 、解析、初始化過。

  • 類檢查后虛擬機為新對象分配內存

    如何保證并發(fā)情況分配堆內存安全

    虛擬機采用CAS配上失敗重試保證原子性

    把內存分配交給線程,在創(chuàng)建線程時分配空間,把分配內存的任務交給線程支配。通過TLAB(Thread local Allocation Buffer)開啟

  • 分配完內存后設置對象頭,如哪個類的實例、hashcode、類的元數據信息指針(方法區(qū))

  • 執(zhí)? init ?法(內核方法),初始化成員變量,執(zhí)?實例化代碼塊,調?類的構造?法,并把堆內對象的?地址賦 值給引?變量。

Java對象分配內存是否線程安全

  • CAS 加失敗重試保證更新原?性。

  • 把內存分配按線程劃分在不同空間,即每個線程在 Java 堆中預先分配??塊內存,叫做本地線程分配緩沖 TLAB,哪個線程要分配內存就在對應的 TLAB 分配,TLAB ?完了再進?同步。

Java類實例化順序

  • 父類靜態(tài)成員和靜態(tài)初始化塊 ,按在代碼中出現(xiàn)的順序依次執(zhí)行
  • 子類靜態(tài)成員和靜態(tài)初始化塊 ,按在代碼中出現(xiàn)的順序依次執(zhí)行
  • 父類實例成員和實例初始化塊 ,按在代碼中出現(xiàn)的順序依次執(zhí)行
  • 父類構造方法
  • 子類實例成員和實例初始化塊 ,按在代碼中出現(xiàn)的順序依次執(zhí)行
  • 子類構造方法

到此這篇關于Java對象存儲內存布局詳解的文章就介紹到這了,更多相關Java對象內存布局內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JPA原生SQL(自定義SQL)分頁查詢邏輯詳解

    JPA原生SQL(自定義SQL)分頁查詢邏輯詳解

    這篇文章主要介紹了JPA原生SQL(自定義SQL)分頁查詢邏輯詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中的

    Java中的"goto"語句妙用

    這篇文章主要介紹了Java中的"goto"語句妙用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java Lock鎖多線程中實現(xiàn)流水線任務

    Java Lock鎖多線程中實現(xiàn)流水線任務

    這篇文章主要介紹了Java Lock鎖多線程中實現(xiàn)流水線任務,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Java ClassLoader類加載器基礎詳解

    Java ClassLoader類加載器基礎詳解

    這篇文章主要為大家介紹了Java ClassLoader類加載器基礎詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • java 泛型的詳解及實例

    java 泛型的詳解及實例

    這篇文章主要介紹了java 泛型的詳解及實例的相關資料,希望通過本文大家能徹底掌握泛型的使用方法,需要的朋友可以參考下
    2017-08-08
  • 基于SpringBoot使用MyBatis插件的問題

    基于SpringBoot使用MyBatis插件的問題

    MyBatis-Plus并不能為我們解決所有問題,例如一些復雜的SQL,多表聯(lián)查,我們就需要自己去編寫代碼和SQL語句,我們該如何快速的解決這個問題呢,這個時候可以使用MyBatisX插件,今天小編給大家?guī)砹薙pringBoot使用MyBatis插件問題,感興趣的朋友一起看看吧
    2022-03-03
  • Mybatis中#{}和${}傳參的區(qū)別及#和$的區(qū)別小結

    Mybatis中#{}和${}傳參的區(qū)別及#和$的區(qū)別小結

    這篇文章主要介紹了Mybatis中#{}和${}傳參的區(qū)別及#和$的區(qū)別小結 的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • Eclipse配置Tomcat和JDK步驟圖解

    Eclipse配置Tomcat和JDK步驟圖解

    這篇文章主要內容是Eclipse配置Tomcat和JDK步驟圖解,需要的朋友可以參考下
    2015-08-08
  • SpringBoot整合MyBatis超詳細教程

    SpringBoot整合MyBatis超詳細教程

    這篇文章主要介紹了SpringBoot整合MyBatis超詳細教程,下面從配置模式、注解模式、混合模式三個方面進行說明MyBatis與SpringBoot的整合,需要的朋友可以參考下
    2021-05-05
  • 解決IDEA service層跳轉實現(xiàn)類的快捷圖標消失問題

    解決IDEA service層跳轉實現(xiàn)類的快捷圖標消失問題

    這篇文章主要介紹了解決IDEA service層跳轉實現(xiàn)類的快捷圖標消失問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論