精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

JVM入門之Class結構介紹2

jf_78858299 ? 來源:北洋洋洋 ? 作者:北洋 ? 2023-02-09 16:57 ? 次閱讀

access_flags訪問標識

常量池結束后就是這個Class對應的訪問標志內容,用u2(兩個字節)來表示。

?訪問標志可以有多個,根據多個標志位的或運算來決定最終的access_flags的取值

?

class的繼承實現關系

訪問標志之后的是this_class,super_class,interfaces_count,interfaces這些數據。1.this_class:該Class的權限定名。( 「通過訪問常量池中的類信息表來定位到類的權限定名」2.super_class:父類的全限定名。(由于Java中是 「單繼承多實現」 的,所以父類索引只有一個,但是接口可以有多個稍后將),跟上面的尋找過程類似,只不過換了一個常量池的索引,「如果沒有顯示使用繼承的話那么最終引用的是Object類的權限定名,如果明確使用了繼承自哪個類那么最終引用到的就是那個類的權限定名」3.interfaces和interfaces_count 剛剛說了Class是可以多實現的,所以

interfaces_count為 「該Class實現接口的數量」 (如果沒有任何實現的接口,那么該值為0后面的interfaces將沒有數據不占用任何字節);

interfaces為實現接口的對應接口的全限定名

字段表

「該表結構用于描述接口/類中聲明的變量」

變量可以分為類變量(static級別的),實例變量。

?注意:該部分不包括方法中的局部變量字段,局部變量會有一個單獨的局部變量表來存儲,下一篇文章講解。對于Class文件中最外層的字段表中存儲的只是類變量和實例變量。

?

而字段有哪些數據需要表示呢?權限修飾符,字段名稱,字段數據類型,類級別還是實例級別(是否有static修飾符),可變性(final),并發可見性(volatile修飾符,強制從主內存讀寫),是否可以被序列化(transient修飾符)

access_flags訪問標識

這個訪問標識和前面講的類的access_flags不一樣,這個是字段的訪問標識

名稱索引和描述符的索引

這兩個索引都是在常量池中的索引,對常量池的引用

name_index為 「字段的名稱」 descriptor_index為描述符,對應于字段來說是該**「字段的數據類型」**

描述符的含義:

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

?

存儲額外信息

可以看到描述符后面還有一個屬性表集合,該集合是用來**「存儲一些額外的信息,可以添加0到多個信息。」**

如果沒有額外描述的信息attributes_count就是0,后面沒有字節去描述屬性表;如果有額外的信息比如將字段聲明為final的話,屬性表中就會存儲一個ConstantValue的屬性,這個值指向對應的常量值。(關于這部分內容之后進行詳解)

?該字段表中不會記錄父類中或者父接口中繼承來的字段,但是有可能出現原本不存在的字段,比如在內部類中添加字段來訪問外部類。

?

?重載字段:對于Class文件來說剛剛看了,只要描述符不一致,字段名一樣也是可以被記錄到Class中的而不會引起沖突;但是對于Java語言來說字段是不能重載的,不管描述符一樣不一樣,「名稱必須不一樣!!!」

?

方法表

「該表結構用于描述接口/類中聲明的變量」

「圖例:」

可以看到和上面講的字段表結構大致是一樣的。

access_flags訪問標識

名稱索引和描述符的索引

這兩個索引都是在常量池中的索引,對常量池的引用

name_index為 「方法的名稱」 descriptor_index為描述符,對應于方法來說是該 「方法的參數集合和返回值類型」 對應的數據在上面講字段表的時候已經貼過圖,不在說明。

存儲額外信息

這個里面的屬性表中就會有各種各樣的表來存儲一個方法的額外信息,比如方法體中的代碼,局部變量表等等表結構數據類型。(下一篇文章進行詳解)

?和字段表一樣如果父類方法沒有被子類重寫,那么該表中不會記錄父類方法的信息的,但是同樣可以出現一些編譯器添加的方法,比如類構造器clvinit()和實例構造器init()

?

?重載方法:名稱一樣,方法的特征簽名不一樣。對于Class文件來說方法的特征簽名不同(描述符不完全一致)就可以進行重載不會發生沖突;但是對于Java語言來說方法的特征簽名中不包括返回值這個條件所以返回值不同不能作為重載的條件 Java代碼層面的方法特征簽名,Java代碼的方法特征簽名只包括方法名稱、參數順序及參數類型,而字節碼Class的特征簽名還包括方法返回值以及受查異常表,請讀者根據上下文語境注意區分。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2960

    瀏覽量

    104565
  • C語言
    +關注

    關注

    180

    文章

    7601

    瀏覽量

    136251
  • Class
    +關注

    關注

    0

    文章

    53

    瀏覽量

    19714
  • JVM
    JVM
    +關注

    關注

    0

    文章

    157

    瀏覽量

    12211
收藏 人收藏

    評論

    相關推薦

    jvm的類加載器的整體結構及過程解析

    前言 我們很多小伙伴平時都是做JAVA開發的,那么作為一名合格的工程師,你是否有仔細的思考過JVM的運行原理呢。 如果懂得了JVM的運行原理和內存模型,像是一些JVM調優、垃圾回收機制等等的問題我們
    的頭像 發表于 09-27 15:49 ?3384次閱讀
    <b class='flag-5'>jvm</b>的類加載器的整體<b class='flag-5'>結構</b>及過程解析

    Proteus基礎入門教程 Proteus界面功能介紹及常用操作

    Proteus基礎入門教程 Proteus界面功能介紹及常用操作
    發表于 09-27 22:35

    JavaWeb入門響應的結構

    JavaWeb入門—響應的結構
    發表于 05-15 06:00

    Jvm的整體結構和特點

    的整體結構大致如下:    1、類加載器  類加載器用來加載Java類到JVM虛擬機中,源代碼程序.java文件在經過編譯器編譯之后就被轉換成字節代碼.class文件,類加載器負責讀取字節代碼,并轉
    發表于 01-05 17:23

    Jvm工作原理學習筆記

    [] args)函數的class都可以作為JVM實例運行的起點 b) 運行。main()作為該程序初始線程的起點,任何其他線程均由該線程啟動。JVM內部有兩種線程:守護線程和非守護線程,main()屬于非守護
    發表于 04-03 11:03 ?5次下載

    Java:JVM虛擬機的入門知識

    Java開發現在面試越來越難了,進大廠必備的JVM、多線程高并發這都是最基礎的知識了,今天我們一起來學習Java虛擬機入門
    的頭像 發表于 07-01 11:43 ?2290次閱讀
    Java:<b class='flag-5'>JVM</b>虛擬機的<b class='flag-5'>入門</b>知識

    JVM入門Class結構介紹1

    ?根據《JAVA虛擬機規范》的規定,Class文件格式采用一種類似于C語言結構體的偽結構來存儲數據,這種偽結構中(Class文件格式中)只有
    的頭像 發表于 02-09 16:57 ?586次閱讀
    <b class='flag-5'>JVM</b><b class='flag-5'>入門</b><b class='flag-5'>之</b><b class='flag-5'>Class</b><b class='flag-5'>結構</b><b class='flag-5'>介紹</b>1

    JVM入門Class結構屬性表1

    ?屬性表在《JAVA虛擬機規范》中并沒有像其他數據一樣做嚴格的限制,我們甚至可以自己實現一個編譯器往Class結構的屬性表中注入額外的屬性信息,虛擬機運行時會忽略掉它識別不了的屬性。
    的頭像 發表于 02-10 11:02 ?549次閱讀
    <b class='flag-5'>JVM</b><b class='flag-5'>入門</b><b class='flag-5'>之</b><b class='flag-5'>Class</b><b class='flag-5'>結構</b>屬性表1

    JVM入門Class結構屬性表2

    ?屬性表在《JAVA虛擬機規范》中并沒有像其他數據一樣做嚴格的限制,我們甚至可以自己實現一個編譯器往Class結構的屬性表中注入額外的屬性信息,虛擬機運行時會忽略掉它識別不了的屬性。
    的頭像 發表于 02-10 11:02 ?543次閱讀
    <b class='flag-5'>JVM</b><b class='flag-5'>入門</b><b class='flag-5'>之</b><b class='flag-5'>Class</b><b class='flag-5'>結構</b>屬性表<b class='flag-5'>2</b>

    USB Class介紹

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

    垃圾收集器的JVM參數配置

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

    jvm內存溢出該如何定位解決

    超出限制和堆空間不足。 定位JVM內存溢出問題是一個比較復雜的任務,需要結合工具和技術來進行分析和解決。本文將介紹一些常用的調試和解決內存溢出問題的工具和技術。 一、理解JVM內存結構
    的頭像 發表于 12-05 11:05 ?1295次閱讀

    jvm內存模型和內存結構

    JVM(Java虛擬機)是Java程序的運行平臺,它負責將Java程序轉換成機器碼并在計算機上執行。在JVM中,內存模型和內存結構是兩個重要的概念,本文將詳細介紹它們。 一、
    的頭像 發表于 12-05 11:08 ?897次閱讀

    jvm調優參數

    和類元數據等方面的參數設置。下面我們將詳細介紹這些參數以及如何進行優化。 首先,堆內存是JVM中用于存放對象實例的內存區域。通過調整堆內存的大小,我們可以控制應用程序對內存資源的使用。JVM的堆內存包括新生代和老年代兩部分。新生
    的頭像 發表于 12-05 11:29 ?603次閱讀

    jvm參數的設置和jvm調優

    JVM(Java虛擬機)參數的設置和調優對于提高Java應用程序的性能和穩定性非常重要。在本文中,我們將詳細介紹JVM參數的設置和調優方法。 一、JVM參數的設置 內存參數: -Xms
    的頭像 發表于 12-05 11:36 ?1444次閱讀