国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HotSpot 虛擬機(jī)對(duì)象探秘

這篇具有很好參考價(jià)值的文章主要介紹了HotSpot 虛擬機(jī)對(duì)象探秘。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

HotSpot 虛擬機(jī)對(duì)象探秘

對(duì)象的內(nèi)存布局

在 HotSpot 虛擬機(jī)中,對(duì)象的內(nèi)存布局分為以下 3 塊區(qū)域:

  • 對(duì)象頭(Header)
  • 實(shí)例數(shù)據(jù)(Instance Data)
  • 對(duì)齊填充(Padding)
HotSpot 虛擬機(jī)對(duì)象探秘,后端

對(duì)象頭

對(duì)象頭記錄了對(duì)象在運(yùn)行過程中所需要使用的一些數(shù)據(jù):

  • 哈希碼
  • GC 分代年齡
  • 鎖狀態(tài)標(biāo)志
  • 線程持有的鎖
  • 偏向線程 ID
  • 偏向時(shí)間戳

對(duì)象頭可能包含類型指針,通過該指針能確定對(duì)象屬于哪個(gè)類。如果對(duì)象是一個(gè)數(shù)組,那么對(duì)象頭還會(huì)包括數(shù)組長度。

實(shí)例數(shù)據(jù)

實(shí)例數(shù)據(jù)部分就是成員變量的值,其中包括父類成員變量和本類成員變量。

對(duì)齊填充

用于確保對(duì)象的總長度為 8 字節(jié)的整數(shù)倍。

HotSpot VM 的自動(dòng)內(nèi)存管理系統(tǒng)要求對(duì)象的大小必須是 8 字節(jié)的整數(shù)倍。而對(duì)象頭部分正好是 8 字節(jié)的倍數(shù)(1 倍或 2 倍),因此,當(dāng)對(duì)象實(shí)例數(shù)據(jù)部分沒有對(duì)齊時(shí),就需要通過對(duì)齊填充來補(bǔ)全。

對(duì)齊填充并不是必然存在,也沒有特別的含義,它僅僅起著占位符的作用。

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

HotSpot 虛擬機(jī)對(duì)象探秘,后端

類加載檢查

虛擬機(jī)在解析.class文件時(shí),若遇到一條 new 指令,首先它會(huì)去檢查常量池中是否有這個(gè)類的符號(hào)引用,并且檢查這個(gè)符號(hào)引用所代表的類是否已被加載、解析和初始化過。如果沒有,那么必須先執(zhí)行相應(yīng)的類加載過程。

為新生對(duì)象分配內(nèi)存

對(duì)象所需內(nèi)存的大小在類加載完成后便可完全確定,接下來從堆中劃分一塊對(duì)應(yīng)大小的內(nèi)存空間給新的對(duì)象。分配堆中內(nèi)存有兩種方式:

  • 指針碰撞
    如果 Java 堆中內(nèi)存絕對(duì)規(guī)整(說明采用的是“復(fù)制算法”或“標(biāo)記整理法”),空閑內(nèi)存和已使用內(nèi)存中間放著一個(gè)指針作為分界點(diǎn)指示器,那么分配內(nèi)存時(shí)只需要把指針向空閑內(nèi)存挪動(dòng)一段與對(duì)象大小一樣的距離,這種分配方式稱為“指針碰撞”。

  • 空閑列表
    如果 Java 堆中內(nèi)存并不規(guī)整,已使用的內(nèi)存和空閑內(nèi)存交錯(cuò)(說明采用的是標(biāo)記-清除法,有碎片),此時(shí)沒法簡(jiǎn)單進(jìn)行指針碰撞, VM 必須維護(hù)一個(gè)列表,記錄其中哪些內(nèi)存塊空閑可用。分配之時(shí)從空閑列表中找到一塊足夠大的內(nèi)存空間劃分給對(duì)象實(shí)例。這種方式稱為“空閑列表”。

初始化

分配完內(nèi)存后,為對(duì)象中的成員變量賦上初始值,設(shè)置對(duì)象頭信息,調(diào)用對(duì)象的構(gòu)造函數(shù)方法進(jìn)行初始化。

至此,整個(gè)對(duì)象的創(chuàng)建過程就完成了。

對(duì)象的訪問方式

所有對(duì)象的存儲(chǔ)空間都是在堆中分配的,但是這個(gè)對(duì)象的引用卻是在堆棧中分配的。也就是說在建立一個(gè)對(duì)象時(shí)兩個(gè)地方都分配內(nèi)存,在堆中分配的內(nèi)存實(shí)際建立這個(gè)對(duì)象,而在堆棧中分配的內(nèi)存只是一個(gè)指向這個(gè)堆對(duì)象的指針(引用)而已。 那么根據(jù)引用存放的地址類型的不同,對(duì)象有不同的訪問方式。

句柄訪問方式

堆中需要有一塊叫做“句柄池”的內(nèi)存空間,句柄中包含了對(duì)象實(shí)例數(shù)據(jù)與類型數(shù)據(jù)各自的具體地址信息。

引用類型的變量存放的是該對(duì)象的句柄地址(reference)。訪問對(duì)象時(shí),首先需要通過引用類型的變量找到該對(duì)象的句柄,然后根據(jù)句柄中對(duì)象的地址找到對(duì)象。

HotSpot 虛擬機(jī)對(duì)象探秘,后端

直接指針訪問方式

引用類型的變量直接存放對(duì)象的地址,從而不需要句柄池,通過引用能夠直接訪問對(duì)象。但對(duì)象所在的內(nèi)存空間需要額外的策略存儲(chǔ)對(duì)象所屬的類信息的地址。

HotSpot 虛擬機(jī)對(duì)象探秘,后端

需要說明的是,HotSpot 采用第二種方式,即直接指針方式來訪問對(duì)象,只需要一次尋址操作,所以在性能上比句柄訪問方式快一倍。但像上面所說,它需要額外的策略來存儲(chǔ)對(duì)象在方法區(qū)中類信息的地址。

本文由 mdnice 多平臺(tái)發(fā)布文章來源地址http://www.zghlxwxcb.cn/news/detail-517617.html

到了這里,關(guān)于HotSpot 虛擬機(jī)對(duì)象探秘的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java Platform, Standard Edition HotSpot 虛擬機(jī)垃圾收集調(diào)優(yōu)指南

    Java Platform, Standard Edition HotSpot 虛擬機(jī)垃圾收集調(diào)優(yōu)指南

    Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide (JDK8官方) 參考文檔 目錄 前言 觀眾 文檔輔助功能 相關(guān)文件 慣例 1 簡(jiǎn)介 2 工效學(xué) 垃圾收集器、堆和運(yùn)行時(shí)編譯器默認(rèn)選擇 基于行為的調(diào)優(yōu) 最長停頓時(shí)間目標(biāo) 吞吐量目標(biāo) Footprint占用空間目標(biāo) 調(diào)整策略 3 代

    2024年02月04日
    瀏覽(17)
  • C++對(duì)象切片探秘:派生類對(duì)象如何被‘切割’?

    C++對(duì)象切片探秘:派生類對(duì)象如何被‘切割’?

    ? 概述: C++中的對(duì)象切片指通過將派生類對(duì)象賦值給基類對(duì)象,導(dǎo)致派生部分被“切掉”,只保留基類部分。這可能發(fā)生在值傳遞、賦值等操作中。對(duì)象切片的基礎(chǔ)功能示例展示了派生類對(duì)象賦值給基類對(duì)象時(shí)的現(xiàn)象,而高級(jí)功能示例則展示了通過基類指針實(shí)現(xiàn)派生類對(duì)象的

    2024年03月22日
    瀏覽(26)
  • “深入解析JVM內(nèi)部機(jī)制:探秘Java虛擬機(jī)的奧秘“

    標(biāo)題:深入解析JVM內(nèi)部機(jī)制:探秘Java虛擬機(jī)的奧秘 摘要:本文將深入解析JVM(Java虛擬機(jī))的內(nèi)部機(jī)制,從字節(jié)碼執(zhí)行到垃圾回收,逐步揭示Java程序運(yùn)行的奧秘。通過理論分析和示例代碼,讀者將對(duì)JVM的工作原理有更深入的了解。 正文: 一、Java虛擬機(jī)簡(jiǎn)介 Java虛擬機(jī)(JVM)

    2024年02月12日
    瀏覽(25)
  • Three.js--》探秘虛擬現(xiàn)實(shí)VR展廳的視覺盛宴

    Three.js--》探秘虛擬現(xiàn)實(shí)VR展廳的視覺盛宴

    今天簡(jiǎn)單實(shí)現(xiàn)一個(gè)three.js的小Demo,加強(qiáng)自己對(duì)three知識(shí)的掌握與學(xué)習(xí),只有在項(xiàng)目中才能靈活將所學(xué)知識(shí)運(yùn)用起來,話不多說直接開始。 源碼下載地址:地址 在線體驗(yàn)地址:地址 目錄 項(xiàng)目搭建 初始化three代碼 camera-controls控制器使用 添加畫框 畫框處理事件 添加機(jī)器人模型

    2024年04月23日
    瀏覽(19)
  • 后端用對(duì)象接收json時(shí),對(duì)象無法獲取值的問題

    后端用對(duì)象接收json時(shí),對(duì)象無法獲取值的問題

    在項(xiàng)目里做前端傳json到后端處理數(shù)據(jù)時(shí),由于傳遞的json比較復(fù)雜,故用對(duì)象進(jìn)行接收,但在postman測(cè)試時(shí)發(fā)現(xiàn)無論如何對(duì)象都沒法成功接收值 (這里我直接把接收到的值又回傳了,方便直接在postman查看) 問題排查 1.猜測(cè)缺少@RequeBody,實(shí)際上項(xiàng)目controller層包含了RestControlle

    2024年02月13日
    瀏覽(28)
  • Java后端開發(fā)面試題——JVM虛擬機(jī)篇

    Java后端開發(fā)面試題——JVM虛擬機(jī)篇

    目錄 什么是程序計(jì)數(shù)器? 你能給我詳細(xì)的介紹Java堆嗎? 什么是虛擬機(jī)棧 1. 垃圾回收是否涉及棧內(nèi)存? 2. 棧內(nèi)存分配越大越好嗎? 3. 方法內(nèi)的局部變量是否線程安全? 4.什么情況下會(huì)導(dǎo)致棧內(nèi)存溢出? 5.堆棧的區(qū)別是什么? 能不能解釋一下方法區(qū)(元空間)? 常量池 運(yùn)行

    2024年02月09日
    瀏覽(22)
  • Go后端開發(fā) -- 面向?qū)ο筇卣鳎航Y(jié)構(gòu)體 && 繼承 && 多態(tài) && interface

    Go后端開發(fā) -- 面向?qū)ο筇卣鳎航Y(jié)構(gòu)體 && 繼承 && 多態(tài) && interface

    type 用來聲明數(shù)據(jù)類型 使用 type 定義結(jié)構(gòu)體 對(duì)于結(jié)構(gòu)體對(duì)象: 可以先定義后初始化; 也可以直接在{}中初始化 值傳參 傳遞的是結(jié)構(gòu)體的拷貝,原結(jié)構(gòu)體不會(huì)發(fā)生改變 引用傳遞 傳遞的是結(jié)構(gòu)體的指針,原結(jié)構(gòu)體的值會(huì)改變 GetName 這個(gè)函數(shù)前面的 (this Hero) 表明這個(gè)函數(shù)是綁定

    2024年01月17日
    瀏覽(27)
  • Springboot集成阿里云對(duì)象存儲(chǔ)oss-前端-后端完整實(shí)現(xiàn)

    Springboot集成阿里云對(duì)象存儲(chǔ)oss-前端-后端完整實(shí)現(xiàn)

    1.注冊(cè)阿里云并購買套餐流量包 2.點(diǎn)擊套餐買個(gè)流量包,5元半年40g,還挺便宜 ? ?3.購買后進(jìn)入管理控制臺(tái)-點(diǎn)開對(duì)象存儲(chǔ)oss 4.點(diǎn)開bucket創(chuàng)建,我已經(jīng)創(chuàng)建好了 ? ?5.需要復(fù)制每個(gè)人的 外網(wǎng)訪問,這個(gè)到時(shí)候需要在springboot項(xiàng)目中配置 ?6.點(diǎn)擊個(gè)人頭像創(chuàng)建每個(gè)人自己的key ? ?

    2024年02月05日
    瀏覽(19)
  • vue 后端返回二進(jìn)制流-前端通過blob對(duì)象下載文件-圖片

    前言 在實(shí)際開發(fā)中我們經(jīng)常會(huì)遇見下載文件的場(chǎng)景,比如下載合同,下載文件 下載文件有2種方式,一種是后端返回二進(jìn)制流,前端通過blob對(duì)象接受根據(jù)不同類型下載 還有一種把地址直接在瀏覽器新窗口打開瀏覽器打開pdf可以預(yù)覽和下載,其他文件直接下載 但不管是那種方

    2024年02月05日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包