JOL工具分析java對象大小

JOL全稱為Java Object Layout江醇,是分析JVM中對象布局的工具硼啤,該工具大量使用了Unsafe父丰、JVMTI來解碼布局情況,所以分析結(jié)果是比較精準的纺铭,接下來我們就具體操作下。

我們先創(chuàng)建幾個待分析的類對象實例刀疙。

public class A {}

public class B {
    private long s;
}

public class C {
    private int a;
    private long s;
}

int[] aa = new int[0];

然后創(chuàng)建分析主函數(shù):

public class Test {

    public static void main(String[] args) {
        A a = new A();
        System.out.println(ClassLayout.parseInstance(a).toPrintable());
        B b = new B();
        System.out.println(ClassLayout.parseInstance(b).toPrintable());
        C c = new C();
        System.out.println(ClassLayout.parseInstance(c).toPrintable());
        int[] aa = new int[0];
        System.out.println(ClassLayout.parseInstance(aa).toPrintable());
    }

}

1.運行壞境為64位虛擬機舶赔。
2.主函數(shù)里所用到的包為jol工具,引入方式如下谦秧。
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.9</version>
</dependency>

輸出結(jié)果如下:

?
image

結(jié)果如上圖所示竟纳,A對象為16bytes,B對象為24bytes疚鲤,C對象為24bytes锥累,數(shù)組對象為16bytes。

接下來我們具體分析下這四個對象集歇,看jol分析的結(jié)果是否正確桶略。

java對象的組成部分:

  • 1.對象頭
    在jvm虛擬機中每一個java對象都有一個對象頭,對象頭中包含標記字段以及對象指針,標記字段用來儲存hash碼际歼、gc信息以及鎖信息惶翻,而指針則指向改對象的類。在64位jvm虛擬機中這兩部分都是64位的鹅心,所以也就是需要128位大新来帧(16 bytes)。
    注意:64位虛擬機中在堆內(nèi)存小于32GB的情況下旭愧,UseCompressedOops是默認開啟的颅筋,該參數(shù)表示開啟指針壓縮,會將原來64位的指針壓縮為32位榕茧。
  • 2.實例數(shù)據(jù)
    類中所有的實例字段數(shù)據(jù)垃沦。
  • 3.內(nèi)存填充部分(alignment)
    該部分作用是用來保證java對象在虛擬機中占內(nèi)存大小為8N bytes。
  • 4.數(shù)組長度
    這個是數(shù)組對象才特有的用押。

java的基礎數(shù)據(jù)類型所占內(nèi)存情況如下表格:

boolean byte short char int long float double
1 bytes 1 bytes 2 bytes 2 bytes 4 bytes 8 bytes 4 bytes 8 bytes

A對象:A對象就是一個空對象肢簿,所以在內(nèi)存中占據(jù)大小就是對象頭的大小等于16 bytes,由于開啟指針壓縮則對象頭占據(jù)大小為12 bytes蜻拨,但是12 bytes字節(jié)不是8的倍數(shù)所以需要進行內(nèi)存對齊池充,最后加上了4 bytes的空白字節(jié),最終該對象占據(jù)16 bytes大小缎讼。

B對象:B對象包含一個long基本數(shù)據(jù)類型收夸,所以大小等于 12 bytes+8 bytes=20 bytes,20 bytes不是8N所以需要加上4 bytes的填充字節(jié)血崭,最終該對象占據(jù)24 bytes卧惜。

C對象:C對象包含一個long、一個int基本數(shù)據(jù)類型夹纫,所以大小等于 12 bytes+8 bytes+4 bytes=24 bytes咽瓷,正好8N,不需要內(nèi)存填充舰讹,最終該對象占據(jù)24 bytes茅姜。

D對象:D對象是一個數(shù)組對象,因為數(shù)組對象會多一個數(shù)組長度存儲部分月匣,所以大小等于12 bytes+4 bytes=16 bytes钻洒,注意這里數(shù)組長度我給的是0,如果給的是1大家可以試試看輸出結(jié)果又是多少呢锄开。

至此我們已經(jīng)分析完畢素标,感興趣的小伙伴可以去試一下,加深下對對象內(nèi)存大小的理解萍悴,或者更改下虛擬機的運行參數(shù)UseCompressedOops 設置為-XX:-UseCompressedOops關(guān)閉指針壓縮看看結(jié)果又是多少糯钙。

參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粪狼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子任岸,更是在濱河造成了極大的恐慌再榄,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件享潜,死亡現(xiàn)場離奇詭異困鸥,居然都是意外死亡,警方通過查閱死者的電腦和手機剑按,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門疾就,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人艺蝴,你說我怎么就攤上這事猬腰。” “怎么了猜敢?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵姑荷,是天一觀的道長。 經(jīng)常有香客問我缩擂,道長鼠冕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任胯盯,我火速辦了婚禮懈费,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘博脑。我一直安慰自己憎乙,他們只是感情好,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布叉趣。 她就那樣靜靜地躺著寨闹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪君账。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天沈善,我揣著相機與錄音乡数,去河邊找鬼。 笑死闻牡,一個胖子當著我的面吹牛净赴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罩润,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼玖翅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起金度,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤应媚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后猜极,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體中姜,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年跟伏,在試婚紗的時候發(fā)現(xiàn)自己被綠了丢胚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡受扳,死狀恐怖携龟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情勘高,我是刑警寧澤峡蟋,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站相满,受9級特大地震影響层亿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜立美,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一匿又、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧建蹄,春花似錦碌更、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至劲腿,卻和暖如春旭绒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背焦人。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工挥吵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人花椭。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓忽匈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親矿辽。 傳聞我的和親對象是個殘疾皇子丹允,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350