java虛擬機系列文章

java虛擬機講解第四篇

1、講解內容邏輯梳理圖:

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

2、內容詳細講解:

2.1:class文件結構包含要素:

2.1.1、魔術(magic):class文件的頭4個字節為魔術,用來確定class文件是否能被虛擬機接受。

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

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

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

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

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

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

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

a)、Code屬性:java代碼經過javac編譯后字節碼存在Code屬性中。接口和抽象類的方法不會存在Code屬性中。

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

c)、LineNumberTable屬性:描述源代碼行號和字節碼行號的對應關系,當程序拋出異常時使用。可選。

d)、LocalVariableTable屬性:描述局部變量表中的變量和java源代碼中的變量之間關系。可選。

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

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

g)、InnerClasses屬性:記錄內部類和宿主類之間關系。

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

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

j)、Signature屬性:泛型的標識,可出現在類、字段表、方法表結構中。

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

2.2、虛擬機實現方式分兩種:

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

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

往期回顧:

1)、Java虛擬機——運行時數據區域(圖文方式講解運行時數據區域的內容)

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

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

4)、java虛擬機——class類文件結構(圖文方式講解類文件結構內容)

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

6)、java虛擬機——虛擬機字節碼執行引擎(圖文方式講解字節碼執行過程)

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

8)、java虛擬機——即時編譯器和解釋器(圖文方式講解即時編譯器和解釋器的工作內容)

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

10)、java虛擬機——線程安全與鎖優化(圖文方式講解線程安全及鎖優化內容)

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » java虛擬機——class文件結構

登錄

找回密碼

注冊

主站蜘蛛池模板: 日本阿v片在线播放免费| 日韩精品一区二区亚洲av| 日韩精品一区二区三区无| 亚洲欧美偷国产日韩| A男人的天堂久久A毛片| 国产精品午夜福利在线观看| 欧美日韩在线第一页免费观看| 狠狠色噜噜狠狠狠狠av不卡| 日本中文字幕有码在线视频| 国产精品一区 在线播放| 永昌县| 亚洲国产精品久久久天堂麻豆宅男 | 午夜福利国产精品视频| 亚州中文字幕一区二区| 亚洲精品成人老司机影视| 久久夜色精品国产噜噜亚洲sv| 国产欧美va欧美va在线| 免费观看的av在线播放| 国产中文三级全黄| 巨大黑人极品videos精品| 人妻夜夜爽天天爽| 露脸叫床粗话东北少妇| 一区二区福利在线视频| 强行交换配乱婬bd| 亚洲综合在线日韩av| 国产精品av免费观看| 龙川县| 亚洲精品毛片一区二区| 日韩精品无码去免费专区| 中文字幕色av一区二区三区| 扶绥县| 亚洲色成人一区二区三区人人澡人人妻人人爽人人蜜桃麻豆 | 亚洲一区久久蜜臀av| av日韩在线一区二区三区| 精品国产亚洲一区二区三区| 日本一道一区二区视频| 亚洲一区二区av高清| 女人扒开的小泬高潮喷小 | 和龙市| 亚洲中文字幕综合小综合| 国产精品人成视频免费播放|