java虛擬機——class文件結構

發(fā)布時間:2024-03-14
來自專輯
java虛擬機系列文章
java虛擬機講解第四篇
1、講解內容邏輯梳理圖:
邏輯圖為百度腦圖,以下為原圖連接:http://naotu.baidu.com/file/782b9fc9f78e729b19620026e615e5ad?token=94dc2c66cbffbd25
2、內容詳細講解:
2.1:class文件結構包含要素:
2.1.1、魔術(magic):class文件的頭4個字節(jié)為魔術,用來確定class文件是否能被虛擬機接受。
2.1.2、主次版本號(minor_version、major_version):5、6字節(jié)為次版本號,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支持多實現(xiàn),所以接口索引為集合。
2.1.6、字段表集合(fields_count、fields):用于描述接口或類聲明的變量,包括類級變量和實例級變量。字段信息包括:字段的作用域(public、private、protecte)、實例變量還是類變量(是否有static修飾)、可變性(是否有final修飾)、并發(fā)可見性(是否有volatile修飾)、可否被序列化(是否有transient修飾)、字段數(shù)據(jù)類型、字段名稱。
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編譯后字節(jié)碼存在code屬性中。接口和抽象類的方法不會存在code屬性中。
b)、exception屬性:描述的是throws關鍵字后面列舉的異常。
c)、linenumbertable屬性:描述源代碼行號和字節(jié)碼行號的對應關系,當程序拋出異常時使用。可選。
d)、localvariabletable屬性:描述局部變量表中的變量和java源代碼中的變量之間關系。可選。
e)、sourcefile屬性:記錄生成class文件的源代碼文件名稱??蛇x。
f)、constantvalue屬性:通知虛擬機自動為static靜態(tài)變量賦值。同時使用final和static修飾的基本類型和java.lang.string,編譯后會生成constantvalue屬性并初始化,否則會在實例構造器(<clinit>)中初始化。
g)、innerclasses屬性:記錄內部類和宿主類之間關系。
h)、deprecated、synthetic屬性:deprecated已棄用。synthetic表示字段或方法不是由java源代碼產生,由編譯器自行添加。
i)、stackmaptable屬性:該屬性在虛擬機類加載字節(jié)碼驗證階段被新類型檢查驗證器使用。一個方法的code屬性最多有一個該屬性。
j)、signature屬性:泛型的標識,可出現(xiàn)在類、字段表、方法表結構中。
k)、bootstrapmethods屬性:jdk1.7之后新增,該屬性用于保存invokedynamic指令引用的引導方法限定符。
2.2、虛擬機實現(xiàn)方式分兩種:
2.2.1、將輸入的java虛擬機代碼在加載和執(zhí)行時翻譯成另一種虛擬機的指令集。
2.2.2、將輸入的java虛擬機代碼在加載和執(zhí)行時翻譯成宿主機cpu的本地指令集(即jit代碼生成技術)。
往期回顧:
1)、java虛擬機——運行時數(shù)據(jù)區(qū)域(圖文方式講解運行時數(shù)據(jù)區(qū)域的內容)
2)、java虛擬機——垃圾收集(圖文方式講解垃圾算法、垃圾收集器等內容)
3)、java虛擬機——性能監(jiān)控常用命令(圖文方式講解性能監(jiān)控常用命令)
4)、java虛擬機——class類文件結構(圖文方式講解類文件結構內容)
5)、java虛擬機——類加載機制(圖文方式講解類加載過程)
6)、java虛擬機——虛擬機字節(jié)碼執(zhí)行引擎(圖文方式講解字節(jié)碼執(zhí)行過程)
7)、java虛擬機——java文件編譯過程(圖文方式講解java文件編譯過程)
8)、java虛擬機——即時編譯器和解釋器(圖文方式講解即時編譯器和解釋器的工作內容)
9)、java虛擬機——內存模型和線程(圖文方式講解內存模型和線程內容)
10)、java虛擬機——線程安全與鎖優(yōu)化(圖文方式講解線程安全及鎖優(yōu)化內容)
上一個:RS-05K4641FT,F(xiàn) 0805 4.64K現(xiàn)貨購買,風華 0805 4.64KΩ ±1% 1/8W
下一個:RC0603FR-072M26L,0603 2.26MΩ 1% 1/10W 電阻

捷克rawet電流變送器
電腦錄游戲視頻怎么弄(游戲錄制的視頻怎么保存本地)
Nisshinbo - 有助于實現(xiàn)高精度GNSS, 兩款新品射頻低噪聲放大器 (LNA) 進入量產“NT1191”
鼠標和其它指針設備不見了怎么恢復(鼠標和其它指針設備不見了怎么回事)
什么筆記本好用不貴,什么樣的筆記本電腦既實用又不貴
foxmail 添加賬戶(foxmail郵箱)
帶煙味的普洱茶品質如何呢?值得投資收藏嗎?
瓦楞紙箱蜂窩板抗壓試驗機-自動化操作
三星g9250壁紙怎么滾動,三星9308滾動桌面怎么改
怎么區(qū)別刑事責任和民事責任
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos