Java基礎(chǔ)-對象布局

上一篇 <<<并發(fā)編程-Lock鎖
下一篇 >>>并發(fā)編程-AQS同步器


對象整體圖示


1.虛擬機Mark Word圖示

a、32位虛擬機圖示

b、64位虛擬機圖示

[markOop.hpp文件]
enum {  locked_value             = 0, // 0 00 輕量級鎖
         unlocked_value           = 1,// 0 01 無鎖
         monitor_value            = 2,// 0 10 重量級鎖
         marked_value             = 3,// 0 11 gc標(biāo)志
         biased_lock_pattern      = 5 // 1 01 偏向鎖
  };

c船惨、虛擬機設(shè)置說明(markOop.hpp)

2.類型指針Klass Pointer

該指針指向它的類元數(shù)據(jù),jvm通過這個指針確定對象是哪個類的實例炼吴。
該指針的位長度為JVM的一個字大小,即32位的JVM為32位疫衩,64位的JVM為64位硅蹦。
如果應(yīng)用的對象過多,使用64位的指針將浪費大量內(nèi)存,統(tǒng)計而言童芹,64的JVM將會比32位的JVM多耗費50的內(nèi)存涮瞻。為了節(jié)約內(nèi)存可以使用選項 -XX:+UseCompressedOops 開啟指針壓縮。
其中 oop即ordinary object pointer 普通對象指針假褪。

-XX:+UseCompressedOops 開啟指針壓縮
-XX:-UseCompressedOops 不開啟指針壓縮
對象頭:Mark Word+Klass Pointer類型指針 未開啟壓縮的情況下
32位 Mark Word =4bytes 署咽,類型指針 4bytes ,對象頭=8bytes =64bits
64位 Mark Word =8bytes 生音,類型指針 8bytes 宁否,對象頭=16bytes=128bits;
注意:默認(rèn)情況下缀遍,開啟了指針壓縮 可能只有12字節(jié)慕匠。

3.實例屬性

int 32bit 4byte
short 16bit 2byte
long 64bit 8byte
byte 8bit
char 16bit
float 32bit
double 64bit
boolean 1bit

4.對齊填充

對齊填充并不是必然存在的,也沒有特定的含義域醇,僅僅起著占位符的作用台谊。
由于HotSpot虛擬機的自動內(nèi)存管理系統(tǒng)要求對象的起始地址必須是8字節(jié)的整數(shù)倍,也就是對象的大小必須是8字節(jié)的整數(shù)倍譬挚。
而對象頭部分正好是8字節(jié)的倍數(shù)(1倍或者2倍)锅铅,因此,當(dāng)對象實例數(shù)據(jù)部分沒有對齊的時候减宣,就需要通過對齊填充來補全盐须。

演示效果

public static void main(String[] args) {
        Test002 lock = new Test002();
        // 底層存的是16進(jìn)制
        System.out.println(Integer.toHexString(lock.hashCode()));
        System.out.println(ClassLayout.parseInstance(lock).toPrintable());
    }
演示效果

new對象至少占用了多少字節(jié)

占用字節(jié)數(shù)=對象頭+實例數(shù)據(jù)+對齊填充的總數(shù),且必須是8的倍數(shù)
如果是32位的操作系統(tǒng)蚪腋,對象頭占8個字節(jié)
如果是64位的操作系統(tǒng),未壓縮對象頭占16個字節(jié)姨蟋,壓縮對象頭占12個字節(jié)屉凯。

tips:
1、對象頭的使用情況請參考并發(fā)編程-鎖的優(yōu)化
2眼溶、對象的初始化情況請參考JVM基礎(chǔ)-對象初始化


相關(guān)文章鏈接:
<<<Java基礎(chǔ)-反射機制
<<<Java基礎(chǔ)-字節(jié)碼技術(shù)
<<<Java基礎(chǔ)-創(chuàng)建對象的方式匯總
<<<Java基礎(chǔ)-對象的引用類型
<<<Class文件分析一個類為啥最多支持65535個接口
<<<為什么重寫equals還要重寫hashcode方法
<<<如何自定義注解
<<<十大經(jīng)典排序算法匯總-動畫演示
<<<JDK8十大新特性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悠砚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子堂飞,更是在濱河造成了極大的恐慌灌旧,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绰筛,死亡現(xiàn)場離奇詭異枢泰,居然都是意外死亡,警方通過查閱死者的電腦和手機铝噩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門衡蚂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事毛甲∧甓#” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵玻募,是天一觀的道長只损。 經(jīng)常有香客問我,道長七咧,這世上最難降的妖魔是什么跃惫? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮坑雅,結(jié)果婚禮上辈挂,老公的妹妹穿的比我還像新娘。我一直安慰自己裹粤,他們只是感情好终蒂,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遥诉,像睡著了一般拇泣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上矮锈,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天霉翔,我揣著相機與錄音,去河邊找鬼苞笨。 笑死债朵,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瀑凝。 我是一名探鬼主播序芦,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粤咪!你這毒婦竟也來了谚中?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤寥枝,失蹤者是張志新(化名)和其女友劉穎宪塔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囊拜,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡某筐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了冠跷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片来吩。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡敢辩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弟疆,到底是詐尸還是另有隱情戚长,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布怠苔,位于F島的核電站同廉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏柑司。R本人自食惡果不足惜迫肖,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望攒驰。 院中可真熱鬧蟆湖,春花似錦、人聲如沸玻粪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劲室。三九已至伦仍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間很洋,已是汗流浹背充蓝。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喉磁,地道東北人谓苟。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像协怒,于是被迫代替她去往敵國和親涝焙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

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