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

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

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

3天內不再提示

JVM入門之Class結構屬性表1

jf_78858299 ? 來源:北洋洋洋 ? 作者:北洋 ? 2023-02-10 11:02 ? 次閱讀

上篇文章提到過在Class結構表中,屬性表存在于Class表,字段表和方法表中,是為了 「描述額外的信息

?屬性表在《JAVA虛擬機規范》中并沒有像其他數據一樣做嚴格的限制,我們甚至可以自己實現一個編譯器往Class結構的屬性表中注入額外的屬性信息,虛擬機運行時會忽略掉它識別不了的屬性。

?

屬性表屬性總覽

這張圖中按Class結構,字段表,方法表這三個維度進行了區分標注,將 「三者共有的屬性」 提取到最頂部的 「黃色橢圓」 中, 「藍色」 代表各自屬性表 「額外用到的屬性」「紅色」 代表 「Code屬性中引用的其他屬性的集合」圖片

引自《深入理解JAVA虛擬機》,讀者也可以看這下面的兩張圖:圖片圖片

屬性結構

圖片首先表結構中的前兩個字節說明該屬性是叫什么名字,也就是什么類型的屬性,最終指向常量池中的CONSTANT_Utf8_info類型的常量。

?eg:Code,ConstantValue,SourceFile。。。等

?

接著用四個字節描述屬性值的長度,也就是說明屬性值所占用的字節數;

?除了第一個屬性名稱信息和該屬性描述的屬性長度,其他的就是屬性值了,因此該值(屬性值長度)固定為 整個屬性表長度-6個字節

?

最后列出屬性信息,有多少屬性信息呢?前四個字節已經列出了這個屬性包含多少個屬性,因此最后描述各個屬性的信息。

前兩個屬性是所有屬性都共有的,之后就不進行講解了。

常見屬性

Code

?只有方法內有方法體的方法表才會有這項屬性,像抽象方法,非defult接口方法是沒有這個屬性的(沒有方法體)

?


「該屬性用于存放 操作數棧最大深度, 本地變量表最大占用存儲空間, 方法中Catch塊定義的異常類型和數量, 編譯后方法體的字節碼指令和指令長度, 還有其他屬性」


首先先看下Code屬性表的結構:圖片


1.「max_stack操作數棧最大深度」

先看下之前的這篇文章,Java程序運行是基于棧的操作,就是說的該項屬性。

通過指令從本地變量表中拿數據放到棧頂;將數據從棧頂保存到本地變量中;對棧頂兩個值進行運算后將結果壓入棧頂;將棧頂的值作為返回結果return.....等等這些都是通過操作數據結構棧來完成的。

?這項屬性描述了方法中操作數棧的最大深度,虛擬機運行時會根據這項屬性來分配棧幀中操作數棧的最大深度。

?


2.「max_locals局部變量表所需空間」

局部變量表最大占用的存儲空間,存儲的單位用的是Slot(變量槽),一個 Slot占用空間大小為32位。

存儲范圍:比如方法的參數,Catch塊中定義的異常類型,方法體中定義的局部變量。

?對于方法參數來說,根據實例方法(通過對象才能訪問)和靜態方法(通過類名就可以直接訪問)又有不同;實例方法的參數中第一個是this,該變量會在編譯時加入,而靜態方法則沒有這個變量。

?

存儲空間:對于小于32位的數據類型用一個變量槽,大于32位的用多個變量槽存儲(比如小于64位的數據類型double和long用兩個變量槽存儲)。優化:對變量限定作用域,如果變量超出了作用域范圍,那么存儲該變量的Slot進行存儲其他的變量,也就是重用變量槽。

?根據同時生存的最大局部變量數量和類型計算出max_locals的大小。

?


3.「code_length,code屬性用于表述方法體編譯后的字節碼指令長度和字節碼指令流」

?字節碼指令流,一個字節代表一條指令,即每條指令就是一個u1類型的單字節;u1數據類型取值范圍是0X00~0XFF,對應十進制為0到255。即u1可以表達256條指令,目前使用的大約只有200條

?

?方法體中不允許超過65535條字節碼指令,如果超出了編譯器拒絕編譯;但是code_length用的是u4長度值,可以達到2的32次冪,相當于指令長度只用了一半(u2長度)。

?


4.「exception_table_length,exception_table用于描述方法塊中Catch塊定義的異常數量和類型」

?如果方法體內部沒有catch塊則length為0,后面的字節不描述exception_table

?

圖片

在這里插入圖片描述

?Exception table:

from to target type

0 5 10 Class java/lang/Exception

0 5 21 any

10 16 21 any

?


Exceptions

該屬性和上面提到的exception_table描述的信息不一樣,exception_table是描述方法體中Catch塊中定義的異常數量和類型;而該項屬性是描述方法throws的異常數量和類型,通俗來說就是調用該方法需要catch的異常,也叫作受查異常。

?因此上面的excepitons_table描述方法體內部Catch的異常,Exceptions描述方法拋出的異常

?

結構:圖片


LineNumberTable

?用于描述Java代碼行號和字節碼行號的對應關系,該項屬性可選擇是否輸出

?

?用處:當執行某段字節碼指令拋出異常時可以根據這個對應關系,提示開發者Java代碼對應的行號。

?

結構圖片


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

    關注

    19

    文章

    2957

    瀏覽量

    104544
  • Class
    +關注

    關注

    0

    文章

    53

    瀏覽量

    19712
  • JVM
    JVM
    +關注

    關注

    0

    文章

    157

    瀏覽量

    12207
收藏 人收藏

    評論

    相關推薦

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

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

    jQuery的基本選擇器和class屬性操作

    jQuery的基本選擇器和class操作和屬性操作
    發表于 05-19 13:04

    Jvm的整體結構和特點

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

    Linux快速入門文件類型及文件屬性

    《嵌入式Linux應用程序開發詳解》第一章 Linux 快速入門1.3.1 文件類型及文件屬性1.文件類型1)普通文件2)目錄文件 3)連接文件 4)設備文件2文件
    發表于 12-17 07:58

    中文商品屬性結構化方法

    從非結構化商品描述文本中抽取結構屬性信息,對于電子商務實現商品的對比與推薦及用戶需求預測等功能具有重要意義.現有結構化方法大多采用監督或半監督的分類方法抽取
    發表于 01-02 15:58 ?0次下載
    中文商品<b class='flag-5'>屬性</b><b class='flag-5'>結構</b>化方法

    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>知識

    UM1802_STM32CubeL1入門STM32L1系列

    UM1802_STM32CubeL1入門STM32L1系列
    發表于 11-22 08:22 ?1次下載
    UM1802_STM32CubeL<b class='flag-5'>1</b><b class='flag-5'>入門</b><b class='flag-5'>之</b>STM32L<b class='flag-5'>1</b>系列

    JVM入門Class結構介紹1

    ?根據《JAVA虛擬機規范》的規定,Class文件格式采用一種類似于C語言結構體的偽結構來存儲數據,這種偽結構中(Class文件格式中)只有
    的頭像 發表于 02-09 16:57 ?583次閱讀
    <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'>1</b>

    JVM入門Class結構介紹2

    本篇文章圖中貼出的類型這一列也都是這兩個數據類型,如果類型是u開頭的表示為無符號數的數據類型,如果是_info結尾的表示是類型。
    的頭像 發表于 02-09 16:57 ?445次閱讀
    <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>介紹2

    JVM入門Class結構屬性2

    ?屬性在《JAVA虛擬機規范》中并沒有像其他數據一樣做嚴格的限制,我們甚至可以自己實現一個編譯器往Class結構屬性
    的頭像 發表于 02-10 11:02 ?538次閱讀
    <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><b class='flag-5'>表</b>2

    JVM入門認識程序運行本質

    寫JAVA文件然后用javac命令編譯成class文件運行即可。 > > ? 隨著學習的不斷拓展和工作中業務代碼的積累,對于“為什么會這樣”的困惑越來越多,于是寫了這篇博客
    的頭像 發表于 02-10 11:48 ?645次閱讀
    <b class='flag-5'>JVM</b><b class='flag-5'>入門</b><b class='flag-5'>之</b>認識程序運行本質

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

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

    jvm內存模型和內存結構

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

    jvm metaspacesize大小設置

    JVM的Metaspace是用于存儲類元數據的區域。在JVM中,類的元數據包括類的結構、方法、字段等信息。Metaspace的大小對于應
    的頭像 發表于 12-05 14:22 ?8686次閱讀