一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

JVM入門(mén)之Class結(jié)構(gòu)介紹2

jf_78858299 ? 來(lái)源:北洋洋洋 ? 作者:北洋 ? 2023-02-09 16:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

access_flags訪(fǎng)問(wèn)標(biāo)識(shí)

常量池結(jié)束后就是這個(gè)Class對(duì)應(yīng)的訪(fǎng)問(wèn)標(biāo)志內(nèi)容,用u2(兩個(gè)字節(jié))來(lái)表示。

?訪(fǎng)問(wèn)標(biāo)志可以有多個(gè),根據(jù)多個(gè)標(biāo)志位的或運(yùn)算來(lái)決定最終的access_flags的取值

?

class的繼承實(shí)現(xiàn)關(guān)系

訪(fǎng)問(wèn)標(biāo)志之后的是this_class,super_class,interfaces_count,interfaces這些數(shù)據(jù)。1.this_class:該Class的權(quán)限定名。( 「通過(guò)訪(fǎng)問(wèn)常量池中的類(lèi)信息表來(lái)定位到類(lèi)的權(quán)限定名」2.super_class:父類(lèi)的全限定名。(由于Java中是 「單繼承多實(shí)現(xiàn)」 的,所以父類(lèi)索引只有一個(gè),但是接口可以有多個(gè)稍后將),跟上面的尋找過(guò)程類(lèi)似,只不過(guò)換了一個(gè)常量池的索引,「如果沒(méi)有顯示使用繼承的話(huà)那么最終引用的是Object類(lèi)的權(quán)限定名,如果明確使用了繼承自哪個(gè)類(lèi)那么最終引用到的就是那個(gè)類(lèi)的權(quán)限定名」3.interfaces和interfaces_count 剛剛說(shuō)了Class是可以多實(shí)現(xiàn)的,所以

interfaces_count為 「該Class實(shí)現(xiàn)接口的數(shù)量」 (如果沒(méi)有任何實(shí)現(xiàn)的接口,那么該值為0后面的interfaces將沒(méi)有數(shù)據(jù)不占用任何字節(jié));

interfaces為實(shí)現(xiàn)接口的對(duì)應(yīng)接口的全限定名

字段表

「該表結(jié)構(gòu)用于描述接口/類(lèi)中聲明的變量」 。

變量可以分為類(lèi)變量(static級(jí)別的),實(shí)例變量。

?注意:該部分不包括方法中的局部變量字段,局部變量會(huì)有一個(gè)單獨(dú)的局部變量表來(lái)存儲(chǔ),下一篇文章講解。對(duì)于Class文件中最外層的字段表中存儲(chǔ)的只是類(lèi)變量和實(shí)例變量。

?

而字段有哪些數(shù)據(jù)需要表示呢?權(quán)限修飾符,字段名稱(chēng),字段數(shù)據(jù)類(lèi)型,類(lèi)級(jí)別還是實(shí)例級(jí)別(是否有static修飾符),可變性(final),并發(fā)可見(jiàn)性(volatile修飾符,強(qiáng)制從主內(nèi)存讀寫(xiě)),是否可以被序列化(transient修飾符)

access_flags訪(fǎng)問(wèn)標(biāo)識(shí)

這個(gè)訪(fǎng)問(wèn)標(biāo)識(shí)和前面講的類(lèi)的access_flags不一樣,這個(gè)是字段的訪(fǎng)問(wèn)標(biāo)識(shí)

名稱(chēng)索引和描述符的索引

這兩個(gè)索引都是在常量池中的索引,對(duì)常量池的引用

name_index為 「字段的名稱(chēng)」 descriptor_index為描述符,對(duì)應(yīng)于字段來(lái)說(shuō)是該**「字段的數(shù)據(jù)類(lèi)型」**

描述符的含義:

?對(duì)于一維數(shù)組來(lái)說(shuō)使用“[”來(lái)表示,如果是二位就用兩個(gè)“[[”。比如類(lèi)型為String的二維數(shù)組(String[][])用描述符來(lái)表示就是[[ java.lang.String;一維數(shù)組“int[]”就是[I

?

存儲(chǔ)額外信息

可以看到描述符后面還有一個(gè)屬性表集合,該集合是用來(lái)**「存儲(chǔ)一些額外的信息,可以添加0到多個(gè)信息?!?*

如果沒(méi)有額外描述的信息attributes_count就是0,后面沒(méi)有字節(jié)去描述屬性表;如果有額外的信息比如將字段聲明為final的話(huà),屬性表中就會(huì)存儲(chǔ)一個(gè)ConstantValue的屬性,這個(gè)值指向?qū)?yīng)的常量值。(關(guān)于這部分內(nèi)容之后進(jìn)行詳解)

?該字段表中不會(huì)記錄父類(lèi)中或者父接口中繼承來(lái)的字段,但是有可能出現(xiàn)原本不存在的字段,比如在內(nèi)部類(lèi)中添加字段來(lái)訪(fǎng)問(wèn)外部類(lèi)。

?

?重載字段:對(duì)于Class文件來(lái)說(shuō)剛剛看了,只要描述符不一致,字段名一樣也是可以被記錄到Class中的而不會(huì)引起沖突;但是對(duì)于Java語(yǔ)言來(lái)說(shuō)字段是不能重載的,不管描述符一樣不一樣,「名稱(chēng)必須不一樣?。?!」

?

方法表

「該表結(jié)構(gòu)用于描述接口/類(lèi)中聲明的變量」

「圖例:」

可以看到和上面講的字段表結(jié)構(gòu)大致是一樣的。

access_flags訪(fǎng)問(wèn)標(biāo)識(shí)

名稱(chēng)索引和描述符的索引

這兩個(gè)索引都是在常量池中的索引,對(duì)常量池的引用

name_index為 「方法的名稱(chēng)」 descriptor_index為描述符,對(duì)應(yīng)于方法來(lái)說(shuō)是該 「方法的參數(shù)集合和返回值類(lèi)型」 對(duì)應(yīng)的數(shù)據(jù)在上面講字段表的時(shí)候已經(jīng)貼過(guò)圖,不在說(shuō)明。

存儲(chǔ)額外信息

這個(gè)里面的屬性表中就會(huì)有各種各樣的表來(lái)存儲(chǔ)一個(gè)方法的額外信息,比如方法體中的代碼,局部變量表等等表結(jié)構(gòu)數(shù)據(jù)類(lèi)型。(下一篇文章進(jìn)行詳解)

?和字段表一樣如果父類(lèi)方法沒(méi)有被子類(lèi)重寫(xiě),那么該表中不會(huì)記錄父類(lèi)方法的信息的,但是同樣可以出現(xiàn)一些編譯器添加的方法,比如類(lèi)構(gòu)造器clvinit()和實(shí)例構(gòu)造器init()

?

?重載方法:名稱(chēng)一樣,方法的特征簽名不一樣。對(duì)于Class文件來(lái)說(shuō)方法的特征簽名不同(描述符不完全一致)就可以進(jìn)行重載不會(huì)發(fā)生沖突;但是對(duì)于Java語(yǔ)言來(lái)說(shuō)方法的特征簽名中不包括返回值這個(gè)條件所以返回值不同不能作為重載的條件 Java代碼層面的方法特征簽名,Java代碼的方法特征簽名只包括方法名稱(chēng)、參數(shù)順序及參數(shù)類(lèi)型,而字節(jié)碼Class的特征簽名還包括方法返回值以及受查異常表,請(qǐng)讀者根據(jù)上下文語(yǔ)境注意區(qū)分。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2988

    瀏覽量

    108694
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7631

    瀏覽量

    141160
  • Class
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    20064
  • JVM
    JVM
    +關(guān)注

    關(guān)注

    0

    文章

    160

    瀏覽量

    12579
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    jvm的類(lèi)加載器的整體結(jié)構(gòu)及過(guò)程解析

    前言 我們很多小伙伴平時(shí)都是做JAVA開(kāi)發(fā)的,那么作為一名合格的工程師,你是否有仔細(xì)的思考過(guò)JVM的運(yùn)行原理呢。 如果懂得了JVM的運(yùn)行原理和內(nèi)存模型,像是一些JVM調(diào)優(yōu)、垃圾回收機(jī)制等等的問(wèn)題我們
    的頭像 發(fā)表于 09-27 15:49 ?3609次閱讀
    <b class='flag-5'>jvm</b>的類(lèi)加載器的整體<b class='flag-5'>結(jié)構(gòu)</b>及過(guò)程解析

    Proteus基礎(chǔ)入門(mén)教程 Proteus界面功能介紹及常用操作

    Proteus基礎(chǔ)入門(mén)教程 Proteus界面功能介紹及常用操作
    發(fā)表于 09-27 22:35

    JavaWeb入門(mén)響應(yīng)的結(jié)構(gòu)

    JavaWeb入門(mén)—響應(yīng)的結(jié)構(gòu)
    發(fā)表于 05-15 06:00

    Jvm的整體結(jié)構(gòu)和特點(diǎn)

    的整體結(jié)構(gòu)大致如下:    1、類(lèi)加載器  類(lèi)加載器用來(lái)加載Java類(lèi)到JVM虛擬機(jī)中,源代碼程序.java文件在經(jīng)過(guò)編譯器編譯之后就被轉(zhuǎn)換成字節(jié)代碼.class文件,類(lèi)加載器負(fù)責(zé)讀取字節(jié)代碼,并轉(zhuǎn)
    發(fā)表于 01-05 17:23

    Jvm工作原理學(xué)習(xí)筆記

    [] args)函數(shù)的class都可以作為JVM實(shí)例運(yùn)行的起點(diǎn) b) 運(yùn)行。main()作為該程序初始線(xiàn)程的起點(diǎn),任何其他線(xiàn)程均由該線(xiàn)程啟動(dòng)。JVM內(nèi)部有兩種線(xiàn)程:守護(hù)線(xiàn)程和非守護(hù)線(xiàn)程,main()屬于非守護(hù)
    發(fā)表于 04-03 11:03 ?5次下載

    Java:JVM虛擬機(jī)的入門(mén)知識(shí)

    Java開(kāi)發(fā)現(xiàn)在面試越來(lái)越難了,進(jìn)大廠(chǎng)必備的JVM、多線(xiàn)程高并發(fā)這都是最基礎(chǔ)的知識(shí)了,今天我們一起來(lái)學(xué)習(xí)Java虛擬機(jī)入門(mén)。
    的頭像 發(fā)表于 07-01 11:43 ?2489次閱讀
    Java:<b class='flag-5'>JVM</b>虛擬機(jī)的<b class='flag-5'>入門(mén)</b>知識(shí)

    JVM入門(mén)Class結(jié)構(gòu)介紹1

    ?根據(jù)《JAVA虛擬機(jī)規(guī)范》的規(guī)定,Class文件格式采用一種類(lèi)似于C語(yǔ)言結(jié)構(gòu)體的偽結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù),這種偽結(jié)構(gòu)中(Class文件格式中)只有
    的頭像 發(fā)表于 02-09 16:57 ?807次閱讀
    <b class='flag-5'>JVM</b><b class='flag-5'>入門(mén)</b><b class='flag-5'>之</b><b class='flag-5'>Class</b><b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>介紹</b>1

    JVM入門(mén)Class結(jié)構(gòu)屬性表1

    ?屬性表在《JAVA虛擬機(jī)規(guī)范》中并沒(méi)有像其他數(shù)據(jù)一樣做嚴(yán)格的限制,我們甚至可以自己實(shí)現(xiàn)一個(gè)編譯器往Class結(jié)構(gòu)的屬性表中注入額外的屬性信息,虛擬機(jī)運(yùn)行時(shí)會(huì)忽略掉它識(shí)別不了的屬性。
    的頭像 發(fā)表于 02-10 11:02 ?818次閱讀
    <b class='flag-5'>JVM</b><b class='flag-5'>入門(mén)</b><b class='flag-5'>之</b><b class='flag-5'>Class</b><b class='flag-5'>結(jié)構(gòu)</b>屬性表1

    JVM入門(mén)Class結(jié)構(gòu)屬性表2

    ?屬性表在《JAVA虛擬機(jī)規(guī)范》中并沒(méi)有像其他數(shù)據(jù)一樣做嚴(yán)格的限制,我們甚至可以自己實(shí)現(xiàn)一個(gè)編譯器往Class結(jié)構(gòu)的屬性表中注入額外的屬性信息,虛擬機(jī)運(yùn)行時(shí)會(huì)忽略掉它識(shí)別不了的屬性。
    的頭像 發(fā)表于 02-10 11:02 ?792次閱讀
    <b class='flag-5'>JVM</b><b class='flag-5'>入門(mén)</b><b class='flag-5'>之</b><b class='flag-5'>Class</b><b class='flag-5'>結(jié)構(gòu)</b>屬性表<b class='flag-5'>2</b>

    USB Class介紹

    電子發(fā)燒友網(wǎng)站提供《USB Class介紹.pdf》資料免費(fèi)下載
    發(fā)表于 08-01 16:19 ?0次下載
    USB <b class='flag-5'>Class</b>的<b class='flag-5'>介紹</b>

    垃圾收集器的JVM參數(shù)配置

    本篇文章我們就來(lái)給大家介紹垃圾收集器的 JVM 參數(shù)配置。 JVM參數(shù)有很多,其實(shí)我們直接使用默認(rèn)的JVM參數(shù),不去修改都可以滿(mǎn)足大多數(shù)情況。但是如果你想在有限的硬件資源下,部署的系統(tǒng)
    的頭像 發(fā)表于 10-09 16:35 ?763次閱讀
    垃圾收集器的<b class='flag-5'>JVM</b>參數(shù)配置

    jvm內(nèi)存溢出該如何定位解決

    超出限制和堆空間不足。 定位JVM內(nèi)存溢出問(wèn)題是一個(gè)比較復(fù)雜的任務(wù),需要結(jié)合工具和技術(shù)來(lái)進(jìn)行分析和解決。本文將介紹一些常用的調(diào)試和解決內(nèi)存溢出問(wèn)題的工具和技術(shù)。 一、理解JVM內(nèi)存結(jié)構(gòu)
    的頭像 發(fā)表于 12-05 11:05 ?1651次閱讀

    jvm內(nèi)存模型和內(nèi)存結(jié)構(gòu)

    JVM(Java虛擬機(jī))是Java程序的運(yùn)行平臺(tái),它負(fù)責(zé)將Java程序轉(zhuǎn)換成機(jī)器碼并在計(jì)算機(jī)上執(zhí)行。在JVM中,內(nèi)存模型和內(nèi)存結(jié)構(gòu)是兩個(gè)重要的概念,本文將詳細(xì)介紹它們。 一、
    的頭像 發(fā)表于 12-05 11:08 ?1213次閱讀

    jvm調(diào)優(yōu)參數(shù)

    和類(lèi)元數(shù)據(jù)等方面的參數(shù)設(shè)置。下面我們將詳細(xì)介紹這些參數(shù)以及如何進(jìn)行優(yōu)化。 首先,堆內(nèi)存是JVM中用于存放對(duì)象實(shí)例的內(nèi)存區(qū)域。通過(guò)調(diào)整堆內(nèi)存的大小,我們可以控制應(yīng)用程序?qū)?nèi)存資源的使用。JVM的堆內(nèi)存包括新生代和老年代兩部分。新生
    的頭像 發(fā)表于 12-05 11:29 ?948次閱讀

    jvm參數(shù)的設(shè)置和jvm調(diào)優(yōu)

    JVM(Java虛擬機(jī))參數(shù)的設(shè)置和調(diào)優(yōu)對(duì)于提高Java應(yīng)用程序的性能和穩(wěn)定性非常重要。在本文中,我們將詳細(xì)介紹JVM參數(shù)的設(shè)置和調(diào)優(yōu)方法。 一、JVM參數(shù)的設(shè)置 內(nèi)存參數(shù): -Xms
    的頭像 發(fā)表于 12-05 11:36 ?2248次閱讀