2)java虛擬機中對象的內(nèi)存布局

在HotSpot虛擬機中左敌,對象的內(nèi)存布局分為三塊區(qū)域:對象頭(Object Header)饰潜、實例數(shù)據(jù)(Instance Data)绽淘、對齊填充(Padding)。

  • 對象頭(Object Header)
    • 存儲對象自身的運行時數(shù)據(jù):如HashCode俄周、GC分代年齡、鎖狀態(tài)標志髓迎、線程持有的鎖峦朗、偏向線程ID、偏向時間戳等
      這部分數(shù)據(jù)的長度在32位和64位的虛擬機(未開啟壓縮指針)中分別為32bit和64bit排龄,官方稱它為"MarkWord"波势。對象需要存儲的運行時數(shù)據(jù)很多,其實已經(jīng)超出了32位橄维、64位Bitmap結(jié)構(gòu)所能記錄的限度尺铣,但是對象頭信息是與對象自身定義的數(shù)據(jù)無關(guān)的額外存儲成本,考慮到虛擬機的空間效率争舞,MarkWord被設(shè)計成一個非固定的數(shù)據(jù)結(jié)構(gòu)以便在極小的空間內(nèi)存儲盡量多的信息凛忿,它會根據(jù)對象的狀態(tài)復用自己的存儲空間。例如竞川,在32位的HotSpot虛擬機中店溢,如果對象處于未被鎖定的狀態(tài)下,那么MarkWord的32bit空間中的25bit用于存儲對象哈希碼委乌,4bit用于存儲對象分代年齡床牧,2bit用于存儲鎖標志位,1bit固定為0遭贸,而在其他狀態(tài)(輕量級鎖定戈咳、重量級鎖定、GC標記、可偏向)下對象的存儲內(nèi)容見表2-1除秀。
    • 類型指針(即對象指向它的類元數(shù)據(jù)的指針):虛擬機通過這個指針來確定這個對象是哪個類的實例糯累。(注:并不是所有虛擬機的實現(xiàn)都必須在對象數(shù)據(jù)里保存類型指針,換句話說册踩,查找對象的類的元數(shù)據(jù)信息不一定要通過對象本身)另外如果對象是一個數(shù)組泳姐,那么在對象頭中還必須有一塊來記錄數(shù)據(jù)的長度,因為虛擬機可以根據(jù)普通對象的元數(shù)據(jù)信息來確定對象的大小暂吉,但是從數(shù)組的元數(shù)據(jù)里無法確定數(shù)組的大小胖秒。
  • 實例數(shù)據(jù) (instance Data)
    對象真正存儲的有效信息,也是在程序代碼中定義的各種類型的字段內(nèi)容慕的。無論是父類繼承的還是子類中定義的阎肝,都需要記錄起來。
    這部分的存儲順序會受到虛擬機分配策略參數(shù)(FieldsAllocationStyle)和字段在Java源碼中定義順序的影響肮街。HotSpot虛擬機默認的分配策略為longs/doubles风题、ints、shorts/chars嫉父、bytes/booleans沛硅、oops(OrdinaryObjectPointers),從分配策略中可以看出绕辖,相同寬度的字段總是被分配到一起摇肌。在滿足這個前提條件的情況下,在父類中定義的變量會出現(xiàn)在子類之前仪际。如果CompactFields參數(shù)值為true(默認為true)围小,那么子類之中較窄的變量也可能會插入到父類變量的空隙之中。
  • 對齊填充(Padding)
    對齊填充并不是必然存在的树碱,也沒有特別的含義肯适,它僅僅起著占位符的作用。
    由于HotSpotVM的自動內(nèi)存管理系統(tǒng)要求對象起始地址必須是8字節(jié)的整數(shù)倍赴恨,換句話說疹娶,就是對象的大小必須是8字節(jié)的整數(shù)倍。而對象頭部分正好是8字節(jié)的倍數(shù)(1倍或者2倍)伦连,因此雨饺,當對象實例數(shù)據(jù)部分沒有對齊時,就需要通過對齊填充來補全惑淳。

相關(guān)文章:
java虛擬機中對象的創(chuàng)建
java虛擬機中對象的內(nèi)存布局
java虛擬機中對象的定位

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末额港,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子歧焦,更是在濱河造成了極大的恐慌移斩,老刑警劉巖肚医,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異向瓷,居然都是意外死亡肠套,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門猖任,熙熙樓的掌柜王于貴愁眉苦臉地迎上來你稚,“玉大人,你說我怎么就攤上這事朱躺〉罄担” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵长搀,是天一觀的道長宇弛。 經(jīng)常有香客問我,道長源请,這世上最難降的妖魔是什么枪芒? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮巢钓,結(jié)果婚禮上病苗,老公的妹妹穿的比我還像新娘。我一直安慰自己症汹,他們只是感情好,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布贷腕。 她就那樣靜靜地躺著背镇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泽裳。 梳的紋絲不亂的頭發(fā)上瞒斩,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音涮总,去河邊找鬼胸囱。 笑死,一個胖子當著我的面吹牛瀑梗,可吹牛的內(nèi)容都是我干的烹笔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼抛丽,長吁一口氣:“原來是場噩夢啊……” “哼谤职!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起亿鲜,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤允蜈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饶套,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡漩蟆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了妓蛮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爆安。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖仔引,靈堂內(nèi)的尸體忽然破棺而出扔仓,到底是詐尸還是另有隱情,我是刑警寧澤咖耘,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布翘簇,位于F島的核電站,受9級特大地震影響儿倒,放射性物質(zhì)發(fā)生泄漏版保。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一夫否、第九天 我趴在偏房一處隱蔽的房頂上張望彻犁。 院中可真熱鬧,春花似錦凰慈、人聲如沸汞幢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽森篷。三九已至,卻和暖如春豺型,著一層夾襖步出監(jiān)牢的瞬間仲智,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工姻氨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钓辆,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓肴焊,卻偏偏與公主長得像前联,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子抖韩,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容