java虛擬機(jī)——class文件結(jié)構(gòu)

來(lái)自專輯 java虛擬機(jī)系列文章

java虛擬機(jī)講解第四篇

創(chuàng)新互聯(lián)建站專注于綠園網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供綠園營(yíng)銷型網(wǎng)站建設(shè),綠園網(wǎng)站制作、綠園網(wǎng)頁(yè)設(shè)計(jì)、綠園網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造綠園網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供綠園網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

1、講解內(nèi)容邏輯梳理圖:

邏輯圖為百度腦圖,以下為原圖連接:http://naotu.baidu.com/file/782b9fc9f78e729b19620026e615e5ad?token=94dc2c66cbffbd25

2、內(nèi)容詳細(xì)講解:

2.1:class文件結(jié)構(gòu)包含要素:

2.1.1、魔術(shù)(magic):class文件的頭4個(gè)字節(jié)為魔術(shù),用來(lái)確定class文件是否能被虛擬機(jī)接受。

2.1.2、主次版本號(hào)(minor_version、major_version):5、6字節(jié)為次版本號(hào),7、8為主版本號(hào),jdk從45開始遞增版本號(hào),jdk支持向下兼容版本,即jdk1.2可以運(yùn)行jdk1.1編譯的class文件。

2.1.3、接著主次版本號(hào)之后的是常量池(constant_pool_count、constant_pool):常量池中主要包括兩大類常量,字面量和符號(hào)引用。字面量:文本字符串、聲明為final的常量值。符號(hào)引用:類和接口的全限定名、字段的名稱和描述符、方法的名稱和描述符。

2.1.4、訪問(wèn)標(biāo)志(access_flags):用戶識(shí)別類或者接口層次信息。Class是類還是接口,是否定義為public,是否定義為abstract,如果是類,是否被聲明為final。

2.1.5、類索引、父類索引、接口索引集合(this_class、super_class、interface_count、interfaces):類索引用于確定類的全限定名,父類索引用于確定父類的全限定名。除java.lang.Object類之外,其他所有類的父類索引都不為0。由于java支持多實(shí)現(xiàn),所以接口索引為集合。

2.1.6、字段表集合(fields_count、fields):用于描述接口或類聲明的變量,包括類級(jí)變量和實(shí)例級(jí)變量。字段信息包括:字段的作用域(public、private、protecte)、實(shí)例變量還是類變量(是否有static修飾)、可變性(是否有final修飾)、并發(fā)可見(jiàn)性(是否有volatile修飾)、可否被序列化(是否有transient修飾)、字段數(shù)據(jù)類型、字段名稱。

2.1.7、方法表集合(methods_count、methods):包含訪問(wèn)標(biāo)志(access_flags)、名稱索引(name_index)、描述符索引(descriptor_index)、屬性表集合(attributes)。方法內(nèi)的代碼在編譯后會(huì)存放到屬性表集合中一個(gè)名為Code的屬性里面。

2.1.8、屬性表集合(attributes_count、attributes):Class文件、字段表、方法表都包含了屬性表集合。

a)、Code屬性:java代碼經(jīng)過(guò)javac編譯后字節(jié)碼存在Code屬性中。接口和抽象類的方法不會(huì)存在Code屬性中。

b)、Exception屬性:描述的是throws關(guān)鍵字后面列舉的異常。

c)、LineNumberTable屬性:描述源代碼行號(hào)和字節(jié)碼行號(hào)的對(duì)應(yīng)關(guān)系,當(dāng)程序拋出異常時(shí)使用??蛇x。

d)、LocalVariableTable屬性:描述局部變量表中的變量和java源代碼中的變量之間關(guān)系??蛇x。

e)、SourceFile屬性:記錄生成Class文件的源代碼文件名稱??蛇x。

f)、ConstantValue屬性:通知虛擬機(jī)自動(dòng)為static靜態(tài)變量賦值。同時(shí)使用final和static修飾的基本類型和java.lang.String,編譯后會(huì)生成ConstantValue屬性并初始化,否則會(huì)在實(shí)例構(gòu)造器(<clinit>)中初始化。

g)、InnerClasses屬性:記錄內(nèi)部類和宿主類之間關(guān)系。

h)、Deprecated、Synthetic屬性:Deprecated已棄用。Synthetic表示字段或方法不是由java源代碼產(chǎn)生,由編譯器自行添加。

i)、StackMapTable屬性:該屬性在虛擬機(jī)類加載字節(jié)碼驗(yàn)證階段被新類型檢查驗(yàn)證器使用。一個(gè)方法的Code屬性最多有一個(gè)該屬性。

j)、Signature屬性:泛型的標(biāo)識(shí),可出現(xiàn)在類、字段表、方法表結(jié)構(gòu)中。

k)、BootstrapMethods屬性:jdk1.7之后新增,該屬性用于保存invokedynamic指令引用的引導(dǎo)方法限定符。

2.2、虛擬機(jī)實(shí)現(xiàn)方式分兩種:

2.2.1、將輸入的java虛擬機(jī)代碼在加載和執(zhí)行時(shí)翻譯成另一種虛擬機(jī)的指令集。

2.2.2、將輸入的java虛擬機(jī)代碼在加載和執(zhí)行時(shí)翻譯成宿主機(jī)CPU的本地指令集(即JIT代碼生成技術(shù))。

往期回顧:

1)、Java虛擬機(jī)——運(yùn)行時(shí)數(shù)據(jù)區(qū)域(圖文方式講解運(yùn)行時(shí)數(shù)據(jù)區(qū)域的內(nèi)容)

2)、java虛擬機(jī)——垃圾收集(圖文方式講解垃圾算法、垃圾收集器等內(nèi)容)

3)、java虛擬機(jī)——性能監(jiān)控常用命令(圖文方式講解性能監(jiān)控常用命令)

4)、java虛擬機(jī)——class類文件結(jié)構(gòu)(圖文方式講解類文件結(jié)構(gòu)內(nèi)容)

5)、java虛擬機(jī)——類加載機(jī)制(圖文方式講解類加載過(guò)程)

6)、java虛擬機(jī)——虛擬機(jī)字節(jié)碼執(zhí)行引擎(圖文方式講解字節(jié)碼執(zhí)行過(guò)程)

7)、java虛擬機(jī)——java文件編譯過(guò)程(圖文方式講解java文件編譯過(guò)程)

8)、java虛擬機(jī)——即時(shí)編譯器和解釋器(圖文方式講解即時(shí)編譯器和解釋器的工作內(nèi)容)

9)、java虛擬機(jī)——內(nèi)存模型和線程(圖文方式講解內(nèi)存模型和線程內(nèi)容)

10)、java虛擬機(jī)——線程安全與鎖優(yōu)化(圖文方式講解線程安全及鎖優(yōu)化內(nèi)容)

分享題目:java虛擬機(jī)——class文件結(jié)構(gòu)
當(dāng)前網(wǎng)址:http://www.muchs.cn/article4/cpoooe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、企業(yè)建站、云服務(wù)器、網(wǎng)站營(yíng)銷網(wǎng)站建設(shè)、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司