日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

淺談java object對象在heap中的結(jié)構(gòu)

瀏覽:28日期:2022-08-11 13:04:10
目錄對象和其隱藏的秘密Object對象頭數(shù)組對象頭整個對象的結(jié)構(gòu)對象和其隱藏的秘密

java.lang.Object大家應(yīng)該都很熟悉了,Object是java中一切對象的鼻祖。

接下來我們來對這個java對象的鼻祖進行一個詳細的解剖分析,從而理解JVM的深層次的秘密。

工具當(dāng)然是使用JOL:

@Slf4jpublic class JolUsage { @Test public void useJol(){log.info('{}', VM.current().details());log.info('{}', ClassLayout.parseClass(Object.class).toPrintable());log.info('{}', ClassLayout.parseInstance(new Object()).toPrintable()); }}

代碼很簡單,我們打印JVM的信息,Object class和一個新的Object實例的信息。

看下輸出:

[main] INFO com.flydean.JolUsage - # Running 64-bit HotSpot VM.

# Using compressed oop with 3-bit shift.

# Using compressed klass with 3-bit shift.

# WARNING | Compressed references base/shifts are guessed by the experiment!

# WARNING | Therefore, computed addresses are just guesses, and ARE NOT RELIABLE.

# WARNING | Make sure to attach Serviceability Agent to get the reliable addresses.

# Objects are 8 bytes aligned.

# Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]

# Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]

10:27:32.311 [main] INFO com.flydean.JolUsage - java.lang.Object object internals:

 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE

      0    12        (object header)                           N/A

     12     4        (loss due to the next object alignment)

Instance size: 16 bytes

Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

10:27:32.312 [main] INFO com.flydean.JolUsage - java.lang.Object object internals:

 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE

      0     4        (object header)                           05 00 00 00 (00000101 00000000 00000000 00000000) (5)

      4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)

      8     4        (object header)                           86 06 00 00 (10000110 00000110 00000000 00000000) (1670)

     12     4        (loss due to the next object alignment)

Instance size: 16 bytes

Space losses: 0 bytes internal + 4 bytes external = 4 bytes total3

從上面的結(jié)果我們知道,在64位的JVM中,一個Object實例是占用16個字節(jié)。

因為Object對象中并沒有其他對象的引用,所以我們看到Object對象只有一個12字節(jié)的對象頭。剩下的4個字節(jié)是填充位。

Object對象頭

那么這12字節(jié)的對象頭是做什么用的呢?

如果想要深入了解這12字節(jié)的對象頭,當(dāng)然是要去研讀一下JVM的源碼:src/share/vm/oops/markOop.hpp。

有興趣的小伙伴可以去看看。如果沒有興趣,沒關(guān)系,這里給大家一個張總結(jié)的圖:

淺談java object對象在heap中的結(jié)構(gòu)

javaObject對象的對象頭大小根據(jù)你使用的是32位還是64位的虛擬機的不同,稍有變化。這里我們使用的是64位的虛擬機為例。

Object的對象頭,分為兩部分,第一部分是Mark Word,用來存儲對象的運行時數(shù)據(jù)比如:hashcode,GC分代年齡,鎖狀態(tài),持有鎖信息,偏向鎖的thread ID等等。

在64位的虛擬機中,Mark Word是64bits,如果是在32位的虛擬機中Mark Word是32bits。

第二部分就是Klass Word,Klass Word是一個類型指針,指向class的元數(shù)據(jù),JVM通過Klass Word來判斷該對象是哪個class的實例。

且慢!

有的小伙伴可能發(fā)現(xiàn)了問題,之前我們用JOL解析Object對象的時候,Object head大小是12字節(jié),也就是96bits,這里怎么寫的是128bits?

淺談java object對象在heap中的結(jié)構(gòu)

沒錯,如果沒有開啟COOPs就是128bits,如果開啟了COOPs,那么Klass Word的大小就從64bits降到了32bits。

還記得我們之前講的COOPs嗎?

COOPs就是壓縮對象指針技術(shù)。

對象指針用來指向一個對象,表示對該對象的引用。通常來說在64位機子上面,一個指針占用64位,也就是8個字節(jié)。而在32位機子上面,一個指針占用32位,也就是4個字節(jié)。

實時上,在應(yīng)用程序中,這種對象的指針是非常非常多的,從而導(dǎo)致如果同樣一個程序,在32位機子上面運行和在64位機子上面運行占用的內(nèi)存是完全不同的。64位機子內(nèi)存使用可能是32位機子的1.5倍。

而壓縮對象指針,就是指把64位的指針壓縮到32位。

怎么壓縮呢?64位機子的對象地址仍然是64位的。壓縮過的32位存的只是相對于heap base address的位移。

我們使用64位的heap base地址+ 32位的地址位移量,就得到了實際的64位heap地址。

對象指針壓縮在Java SE 6u23 默認(rèn)開啟。在此之前,可以使用-XX:+UseCompressedOops來開啟。

數(shù)組對象頭

java中有一個非常特別的對象叫做數(shù)組,數(shù)組的對象頭和Object有什么區(qū)別嗎?

我們用JOL再看一次:

log.info('{}',ClassLayout.parseClass(byte[].class).toPrintable());log.info('{}',ClassLayout.parseInstance('www.flydean.com'.getBytes()).toPrintable());

上面的例子中我們分別解析了byte數(shù)組的class和byte數(shù)組的實例:

10:27:32.396 [main] INFO com.flydean.JolUsage - [B object internals:

 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE

      0    16        (object header)                           N/A

     16     0   byte [B.<elements>                             N/A

Instance size: 16 bytes

Space losses: 0 bytes internal + 0 bytes external = 0 bytes total

10:27:32.404 [main] INFO com.flydean.JolUsage - [B object internals:

 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE

      0     4        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)

      4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)

      8     4        (object header)                           22 13 07 00 (00100010 00010011 00000111 00000000) (463650)

     12     4        (object header)                           0f 00 00 00 (00001111 00000000 00000000 00000000) (15)

     16    15   byte [B.<elements>                             N/A

     31     1        (loss due to the next object alignment)

Instance size: 32 bytes

Space losses: 0 bytes internal + 1 bytes external = 1 bytes total

看到區(qū)別了嗎?我們發(fā)現(xiàn)數(shù)組的對象頭是16字節(jié),比普通對象的對象頭多出了4個字節(jié)。這4個字節(jié)就是數(shù)組的長度。

整個對象的結(jié)構(gòu)

好了,寫到這里我們來總結(jié)一下,java對象的結(jié)構(gòu)可以分為普通java對象和數(shù)組對象兩種:

淺談java object對象在heap中的結(jié)構(gòu)

數(shù)組對象在對象頭中多了一個4字節(jié)的長度字段。

大家看到最后的字節(jié)是padding填充字節(jié),為什么要填充呢?

因為JVM是以8字節(jié)為單位進行對其的,如果不是8字節(jié)的整數(shù)倍,則需要補全。

以上就是淺談java object對象在heap中的結(jié)構(gòu)的詳細內(nèi)容,更多關(guān)于java object對象在heap中的結(jié)構(gòu)的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
色婷婷狠狠五月综合天色拍| 日韩一区欧美二区| 免费亚洲婷婷| 欧美亚洲精品在线| 国精品一区二区三区| 欧美不卡视频| 一区二区亚洲视频| 欧美久久天堂| 日韩一区精品视频| 亚洲国产一区二区三区在线播放| 亚洲一区资源| 日韩大片免费观看| 日韩1区2区| 一级欧洲+日本+国产| 日本v片在线高清不卡在线观看| 国产高潮在线| 亚洲欧洲一区| 日本精品另类| 福利视频一区| 97久久精品| 日本在线精品| 欧美永久精品| 亚洲欧美日韩在线观看a三区| 国产欧美一级| 精品视频99| 欧美肉体xxxx裸体137大胆| 亚洲免费黄色| 亚洲午夜一级| 99精品视频在线| 亚洲精品成人| 高清av一区| 亚洲精品无吗| 蜜臀av国产精品久久久久| 丝袜美腿亚洲色图| 欧美偷窥清纯综合图区| 国产精品18| 日韩精品麻豆| 午夜欧美精品| 亚洲精品一二| 国产精品亚洲综合在线观看| 美女精品在线观看| 99成人在线视频| 欧美亚洲综合视频| yellow在线观看网址| 亚洲精品美女| 99久久激情| 丰满少妇一区| 美女亚洲一区| 蜜桃久久精品一区二区| 国产精品久久久免费| 久久精品国产www456c0m| 亚洲人www| 日韩免费小视频| 日本午夜精品久久久| 亚洲永久av| 日韩激情啪啪| 国内激情久久| 免费亚洲一区| 欧美特黄a级高清免费大片a级| 91p九色成人| 久久久久久久久99精品大| 日韩中文字幕视频网| 精品久久福利| 国产亚洲精品久久久久婷婷瑜伽| 日本视频中文字幕一区二区三区| 久久久久九九精品影院| 免费精品国产| 美女网站视频一区| 亚洲精品影视| 97欧美在线视频| 日韩在线综合| 人人精品亚洲| 日韩一区二区三区免费| 精品久久中文| 精品成av人一区二区三区| 日本a级不卡| 国产一区一一区高清不卡| 91视频一区| 免费日韩av片| 中文字幕一区日韩精品| 日韩国产一二三区| 久久午夜精品| 亚洲一区欧美激情| 日韩精品久久久久久| 亚洲欧美日本国产| 久久国产三级| 日韩国产在线| 国内亚洲精品| 日韩欧美2区| 欧美a级一区二区| 美女久久久久| 中文日韩欧美| 精品视频在线一区二区在线| 成人一区而且| 欧美永久精品| 国产成人77亚洲精品www| 野花国产精品入口| 日韩精品看片| 国产私拍福利精品视频二区| 蜜臀久久久久久久| 成人片免费看| 天堂8中文在线最新版在线| 91亚洲精品在看在线观看高清| 免费看的黄色欧美网站| 超碰超碰人人人人精品| 亚洲免费黄色| 国产精品一页| 欧洲一区二区三区精品| 视频在线在亚洲| 久久精品97| 亚洲综合精品| 999精品一区| 激情视频网站在线播放色| 日韩国产一区二| 亚洲成人日韩| 国产成人1区| 日韩国产精品久久久| 五月天久久久| 成人日韩在线| 精品日产乱码久久久久久仙踪林| 亚洲精品一级二级三级| 国产真实久久| 给我免费播放日韩视频| 蜜桃久久久久久久| 欧美sss在线视频| 日韩欧美三级| 精品免费av| 国产精品一在线观看| 亚洲伊人精品酒店| 亚洲深爱激情| 亚洲福利免费| 日韩国产一区二区| 国产经典一区| 国产精品成人自拍| 久久国产乱子精品免费女| 亚洲一级大片| 亚洲欧美日韩国产综合精品二区| 99精品网站| 国产不卡精品在线| 久久国产精品美女| 国产精品三级| 久久精品99久久久| 自拍自偷一区二区三区| 日本午夜精品一区二区三区电影| 国产调教一区二区三区| 亚洲一区观看| 中文字幕视频精品一区二区三区| 丝袜美腿高跟呻吟高潮一区| 久久人人99| 亚洲国产综合在线看不卡| 91免费精品| 婷婷综合电影| 97久久亚洲| 亚洲免费婷婷| 麻豆成人在线| 欧美日韩国产一区精品一区| 免费观看在线综合色| 三级一区在线视频先锋| aⅴ色国产欧美| 亚洲激情另类| 性一交一乱一区二区洋洋av| 六月婷婷一区| 一区二区三区四区精品视频| 中文字幕视频精品一区二区三区| 亚洲毛片在线| 伊人精品久久| 欧美aⅴ一区二区三区视频| 鲁大师精品99久久久| 国产欧美大片| 精品免费视频| 天堂√中文最新版在线| 日本欧美不卡| 一区二区视频欧美| 亚洲影院天堂中文av色| 91成人在线| 精品一区二区三区的国产在线观看 | 欧美大黑bbbbbbbbb在线| 免费成人网www| 丝袜亚洲精品中文字幕一区| 国产日韩专区| 日本高清久久| 麻豆一区二区三| 少妇久久久久| 亚洲欧美日韩国产综合精品二区| 在线精品观看| 欧美综合二区| 亚洲伦乱视频| 日韩精彩视频在线观看| 欧美激情在线精品一区二区三区| 中文亚洲欧美| 日韩视频在线一区二区三区 | 日韩影院免费视频| 日本精品黄色| 日韩高清二区| 日本一区二区三区视频在线看| 一本大道色婷婷在线| 国产精品一区高清| 成午夜精品一区二区三区软件| 亚洲欧美日韩视频二区| 亚洲毛片视频|