吴忠躺衫网络科技有限公司

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

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

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

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

jf_78858299 ? 來(lái)源:北洋洋洋 ? 作者:北洋 ? 2023-02-10 11:02 ? 次閱讀

LocalVariableTable,LocalVariableTypeTable

1.「LocalVariableTable」

?用于描述局部變量表中的變量與JAVA代碼中定義變量之間的關(guān)系,同樣也可以選擇不生成該屬性

?

?用處:當(dāng)編寫代碼引用到這個(gè)方法時(shí),參數(shù)可以直接顯示變量名和類型,如果沒有該屬性,就用arg0,arg1代替;調(diào)試信息的時(shí)候可以根據(jù)參數(shù)變量名明確語(yǔ)義。

?

2.「LocalVariableTypeTable」

?引入泛型后加入的屬性,結(jié)構(gòu)和LocalVariableTable相似,將原先用于描述字段描述符的descriptor_index替換成了描述字段的特征簽名(Signature)。

?

?對(duì)于非泛型變量,特征簽名和描述符是一致的,但是對(duì)于泛型來(lái)說(shuō),由于泛型參數(shù)類型的擦除,描述符不能夠描述泛型類型,因此定義了該屬性來(lái)完成泛型的描述。

?

結(jié)構(gòu):圖片


ConstantValue

「變量初始化,賦值時(shí)機(jī):」 位于該屬性結(jié)構(gòu)中的常量將會(huì)在類加載的準(zhǔn)備階段就會(huì)初始化并且賦值;

其他的靜態(tài)變量在這個(gè)階段只是會(huì)被初始化然后賦默認(rèn)值,如果靜態(tài)變量設(shè)置了final關(guān)鍵字,那么就是第一種情況會(huì)對(duì)變量進(jìn)行賦值;

對(duì)于實(shí)例變量(非靜態(tài)變量)的賦值是在實(shí)例構(gòu)造器《init》中。

「該結(jié)構(gòu)中存放的字段是:」

「《Java虛擬機(jī)規(guī)范》中規(guī)定該屬性結(jié)構(gòu)中存放的必須是靜態(tài)的字段,而對(duì)于javac編譯器來(lái)說(shuō)還需要滿足final關(guān)鍵字的修飾,因此經(jīng)過(guò)javac編譯器編譯后的該屬性中存放的字段必須是static并且是final的。」

?通知虛擬機(jī)自動(dòng)為靜態(tài)變量賦值(上面那句話)。該屬性中只能存放基本類型和String,因?yàn)樵搶傩缘膶傩灾?/p>

?

結(jié)構(gòu):圖片


Deprecated及Synthetic屬性

?這兩項(xiàng)屬性有點(diǎn)特殊,不攜帶任何屬性值,出現(xiàn)這兩個(gè)屬性的目的只是為了標(biāo)識(shí),這兩個(gè)屬性只有存在或不存在。

?

  1. 「Deprecated屬性」 該屬性用于表示某個(gè)類,字段或方法已經(jīng)不再推薦使用,通過(guò)“@deprecated”注解設(shè)置這個(gè)屬性

2.「Synthetic屬性」

該屬性用于表示字段或者方法是編譯器自己添加的,不是代碼中的。也可以通過(guò)設(shè)置訪問(wèn)標(biāo)志ACC_SYNTHETIC標(biāo)志位生成該項(xiàng)屬性。

結(jié)構(gòu):兩者都一樣,不攜帶任何屬性值。只是用于標(biāo)識(shí)圖片


StackMapTable

「該屬性位于Code屬性的屬性表中」

?用處:在類加載階段的驗(yàn)證階段使用該屬性,代替以前耗性能的基于數(shù)據(jù)流分析的類型推導(dǎo)驗(yàn)證器(有了該屬性之后就不用類型推導(dǎo)了,可以直接判斷類型是不是符合要求,之后單獨(dú)寫類加載階段進(jìn)行分析)

?

?之前驗(yàn)證階段是基于數(shù)據(jù)流來(lái)進(jìn)行分析推導(dǎo)出操作數(shù)棧和本地變量表操作的類型是否一致等(比如istore需要將操作數(shù)棧的數(shù)據(jù)保存到本地變量表中,但是取出的數(shù)據(jù)類型不是int就會(huì)發(fā)生問(wèn)題),現(xiàn)在基于該項(xiàng)屬性可以不用推導(dǎo)

?

結(jié)構(gòu):圖片「一個(gè)Code屬性最多只能有一個(gè)StackMapTable屬性」


MethodParameters

「用于記錄方法的各個(gè)形參名稱和信息」

方法參數(shù)屬性,位于class中的屬性表中。之前說(shuō)過(guò)這部分是存儲(chǔ)在局部變量表中的,因?yàn)榉椒ㄖ杏蟹椒wcode屬性,而code中需要有局部變量表屬性代表這個(gè)方法中的變量存儲(chǔ)。

但是為什么還要單獨(dú)抽出一個(gè)屬性放在class中呢?

大家想想沒有code就沒有局部變量表,沒有局部變量表是不是就不能存儲(chǔ)方法參數(shù)了;你看接口中他有方法吧但是呢他其實(shí)沒有方法提code所以它的方法參數(shù)往哪放呢?往他借口的屬性表集合中放,也就是與code同級(jí)。這樣的話我接口里可以直接獲得方法參數(shù)通過(guò)這個(gè)屬性;而對(duì)于正常的方法也就是有方法體的代碼可以從code中的局部變量表中拿。

數(shù)據(jù)結(jié)構(gòu):1.首先說(shuō)明他是什么,我是一個(gè)方法參數(shù)類型 2.我說(shuō)明我存儲(chǔ)的時(shí)候數(shù)據(jù)有多長(zhǎng)(多少字節(jié)),為了切割按照這個(gè)就可以正確讀取對(duì)應(yīng)的數(shù)據(jù);但是如果這個(gè)屬性中還用到了其他的數(shù)據(jù)結(jié)構(gòu)(屬性),那么就是這個(gè)屬性的個(gè)數(shù)了

3.對(duì)于沒有再次用到其他屬性來(lái)描述的屬性直接使用定長(zhǎng)數(shù)據(jù)即可;但是對(duì)于有用到其他屬性來(lái)描述這個(gè)屬性的話,則后面是對(duì)應(yīng)的屬性一個(gè)一個(gè)排開,然后每個(gè)屬性如果是定長(zhǎng)的話則不需要通過(guò)長(zhǎng)度來(lái)說(shuō)明所占字節(jié),然后這個(gè)屬性中存儲(chǔ)的第一個(gè)永遠(yuǎn)是他是什么也就是名字,然后再是對(duì)應(yīng)的值

不斷使用這種結(jié)構(gòu)來(lái)描述一個(gè)完整的class結(jié)構(gòu)

結(jié)構(gòu):圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎ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)注

    19

    文章

    2974

    瀏覽量

    105141
  • Class
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

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

    關(guān)注

    0

    文章

    158

    瀏覽量

    12260
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

    中文商品屬性結(jié)構(gòu)化方法

    從非結(jié)構(gòu)化商品描述文本中抽取結(jié)構(gòu)屬性信息,對(duì)于電子商務(wù)實(shí)現(xiàn)商品的對(duì)比與推薦及用戶需求預(yù)測(cè)等功能具有重要意義.現(xiàn)有結(jié)構(gòu)化方法大多采用監(jiān)督或半監(jiān)督的分類方法抽取
    發(fā)表于 01-02 15:58 ?0次下載
    中文商品<b class='flag-5'>屬性</b><b class='flag-5'>結(jié)構(gòu)</b>化方法

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

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

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

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

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

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

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

    本篇文章圖中貼出的類型這一列也都是這兩個(gè)數(shù)據(jù)類型,如果類型是u開頭的表示為無(wú)符號(hào)數(shù)的數(shù)據(jù)類型,如果是_info結(jié)尾的表示是類型。
    的頭像 發(fā)表于 02-09 16:57 ?498次閱讀
    <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'>結(jié)構(gòu)</b>介紹<b class='flag-5'>2</b>

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

    ?屬性在《JAVA虛擬機(jī)規(guī)范》中并沒有像其他數(shù)據(jù)一樣做嚴(yán)格的限制,我們甚至可以自己實(shí)現(xiàn)一個(gè)編譯器往Class結(jié)構(gòu)屬性
    的頭像 發(fā)表于 02-10 11:02 ?607次閱讀
    <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'>結(jié)構(gòu)</b><b class='flag-5'>屬性</b><b class='flag-5'>表</b>1

    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 ?1380次閱讀

    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ì)介紹它們。 一、JVM內(nèi)存
    的頭像 發(fā)表于 12-05 11:08 ?984次閱讀

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

    初始分配的堆內(nèi)存大小。例如,-Xms512m表示將初始堆大小設(shè)置為512MB。 -Xmx:設(shè)置JVM最大可分配的堆內(nèi)存大小。例如,-Xmx2g表示將最大堆大小設(shè)置為2GB。 -Xmn:設(shè)置年輕代的大小
    的頭像 發(fā)表于 12-05 11:36 ?1661次閱讀

    jvm metaspacesize大小設(shè)置

    JVM的Metaspace是用于存儲(chǔ)類元數(shù)據(jù)的區(qū)域。在JVM中,類的元數(shù)據(jù)包括類的結(jié)構(gòu)、方法、字段等信息。Metaspace的大小對(duì)于應(yīng)
    的頭像 發(fā)表于 12-05 14:22 ?9444次閱讀
    足球百家乐官网投注| 二八杠技巧培训| 百家乐官网电子发牌盒| 皇家娱乐场| 百家乐博乐36bol在线| 网上百家乐官网赌博出| 六合彩特码开奖结果| 尊龙百家乐娱乐平台| 东营区百家乐官网艺术团| 达州市| 大发888客户端 运行| 百家乐游戏机出千| 百家乐官网一柱擎天| 大赢家足球比分| 百家乐大| 百家乐有没有攻略| 百家乐官网玩法最多的娱乐城 | 赌百家乐官网的体会| 大发888体育注册| 百家乐9点| 免水百家乐官网的玩法技巧和规则 | 德州扑克算牌器| 樱桃木百家乐桌| 24山安葬择日| 澳门百家乐官网怎么看小路| 澳门赌博攻略| 太阳城御园| 伟易博百家乐现金网| 百家乐官网pc| 百家乐官网怎样投注好| 顶级赌场手机版官方| 百家乐7scs娱乐网| 克拉克百家乐下载| 百家乐官网网上玩法| 百家乐官网另类投注法| 星空棋牌舟山| 百家乐官网计划工具| 历史百家乐官网路单图| 呈贡县| 顶级赌场真假的微博| 百家乐手论坛48491|