深入理解java虛擬機(jī) 摘要(二)--HotSpot虛擬機(jī)對(duì)象探秘

深入理解java虛擬機(jī) 摘要


目錄:
一、自動(dòng)內(nèi)存管理機(jī)制

  1. 運(yùn)行時(shí)數(shù)據(jù)區(qū)域
  2. HotSpot虛擬機(jī)對(duì)象探秘
  3. 實(shí)戰(zhàn):OutOfMemoryError異常
  4. 垃圾收集器與內(nèi)存分配策略

一、自動(dòng)內(nèi)存管理機(jī)制


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

  • 對(duì)象的創(chuàng)建:

    虛擬機(jī)遇到一條new指令時(shí)俭识,首先將去檢查這個(gè)指令的參數(shù)是否能在常量池個(gè)類的符號(hào)引用,并且檢查這個(gè)符號(hào)引用代表的類是否已被加載友驮、解析和初始化過。如果沒有喇伯,那必須先執(zhí)行相應(yīng)的類加載過程.

    在類加載檢查通過后喊儡,接下來虛擬機(jī)將為新生對(duì)象分配內(nèi)存。

    內(nèi)存分配完成后稻据,虛擬機(jī)需要將分配到的內(nèi)存空間都初始化為零值(不包括對(duì)象頭),這一步操作保證了對(duì)象的實(shí)例字段在Java代碼中可以不賦初始值就直接使用艾猜,程序能訪問到這些字段的數(shù)據(jù)類型所對(duì)應(yīng)的零值买喧。

    接下來,虛擬機(jī)要對(duì)對(duì)象進(jìn)行必要的設(shè)置匆赃,例如這個(gè)對(duì)象是哪個(gè)類的實(shí)例淤毛、如何才能找到類的元數(shù)據(jù)信息、對(duì)象的哈希碼算柳、對(duì)象的GC分代年齡等信息低淡。這些信息存放在對(duì)象的對(duì)象頭(Object Header)之中。根據(jù)虛擬機(jī)當(dāng)前的運(yùn)行狀態(tài)的不同瞬项,如是否啟用偏向鎖等蔗蹋,對(duì)象頭會(huì)有不同的設(shè)置方式。

    在上面工作都完成之后囱淋,從虛擬機(jī)的視角來看猪杭,一個(gè)新的對(duì)象已經(jīng)產(chǎn)生了,但從Java程序的視角來看妥衣,對(duì)象創(chuàng)建才剛剛開始——<init>方法還沒有執(zhí)行皂吮,所有的字段都還為零。所以税手,一般來說(由字節(jié)碼中是否跟invokespecial指令所決定)蜂筹,執(zhí)行new指令之后會(huì)接著執(zhí)行<init>方法,把對(duì)象按照程序員的意愿進(jìn)行初始化芦倒,這樣一個(gè)真正可用的對(duì)象才算完全產(chǎn)生出來艺挪。

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

    對(duì)象頭(Header):包括兩部分信息,第一部分用于存儲(chǔ)對(duì)象自身的運(yùn)行時(shí)數(shù)據(jù)兵扬,如哈希碼(HashCode)闺属、GC分代年齡、鎖狀態(tài)標(biāo)志周霉、線程持有的鎖、偏向線程ID亚皂、偏向時(shí)間戳等俱箱。另外一部分是類型指針,即對(duì)象指向它的類元數(shù)據(jù)的指針灭必,虛擬機(jī)通過這個(gè)指針來確定這個(gè)對(duì)象是哪個(gè)類的實(shí)例狞谱。如果對(duì)象是一個(gè)Java數(shù)組,那在對(duì)象頭中還必須有一塊用于記錄數(shù)組長(zhǎng)度的數(shù)據(jù)禁漓。

    實(shí)例數(shù)據(jù)(Instance Data):對(duì)象真正存儲(chǔ)的有效信息跟衅,也是在程序代碼中所定義的各種類型的字段內(nèi)容。無論是從父類繼承下來的播歼,還是在子類中定義的伶跷,都需要記錄起來。這部分的存儲(chǔ)順序會(huì)受到虛擬機(jī)分配策略參數(shù)(FieldsAllocationStyle)和字段在Java源碼中定義順序的影響。

    對(duì)齊填充(Padding):沒有特別的含義叭莫,它僅僅起著占位符的作用蹈集。由于HotSpot VM的自動(dòng)內(nèi)存管理系統(tǒng)要求對(duì)象起始地址必須是8字節(jié)的整數(shù)倍,換句話說雇初,就是對(duì)象的大小必須是8字節(jié)的整數(shù)倍拢肆。而對(duì)象頭部分正好是8字節(jié)的倍數(shù)(1倍或者2倍),因此靖诗,當(dāng)對(duì)象實(shí)例數(shù)據(jù)部分沒有對(duì)齊時(shí)郭怪,就需要通過對(duì)齊填充來補(bǔ)全。

  • 對(duì)象的訪問定位

    建立對(duì)象是為了使用對(duì)象刊橘,我們的Java程序需要通過棧上的reference數(shù)據(jù)來操作堆上的具體對(duì)象鄙才。由于reference類型在Java虛擬機(jī)規(guī)范中只規(guī)定了一個(gè)指向?qū)ο蟮囊茫]有定義這個(gè)引用應(yīng)該通過何種方式去定位伤为、訪問堆中的對(duì)象的具體位置咒循,所以對(duì)象訪問方式也是取決于虛擬機(jī)實(shí)現(xiàn)而定的。目前主流的訪問方式有使用句柄和直接指針兩種绞愚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末叙甸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子位衩,更是在濱河造成了極大的恐慌裆蒸,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糖驴,死亡現(xiàn)場(chǎng)離奇詭異僚祷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贮缕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門辙谜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人感昼,你說我怎么就攤上這事装哆。” “怎么了定嗓?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵蜕琴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我宵溅,道長(zhǎng)凌简,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任恃逻,我火速辦了婚禮雏搂,結(jié)果婚禮上藕施,老公的妹妹穿的比我還像新娘。我一直安慰自己畔派,他們只是感情好铅碍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著线椰,像睡著了一般胞谈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上憨愉,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天烦绳,我揣著相機(jī)與錄音,去河邊找鬼配紫。 笑死径密,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的躺孝。 我是一名探鬼主播享扔,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼植袍!你這毒婦竟也來了惧眠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤于个,失蹤者是張志新(化名)和其女友劉穎氛魁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厅篓,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秀存,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了羽氮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片或链。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖档押,靈堂內(nèi)的尸體忽然破棺而出株扛,到底是詐尸還是另有隱情,我是刑警寧澤汇荐,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站盆繁,受9級(jí)特大地震影響掀淘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜婿脸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一橘原、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧艳馒,春花似錦拦惋、人聲如沸匆浙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽首尼。三九已至,卻和暖如春言秸,著一層夾襖步出監(jiān)牢的瞬間软能,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工举畸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留查排,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓抄沮,卻偏偏與公主長(zhǎng)得像跋核,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叛买,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348