java虛擬機器5 位元組碼
阿新 • • 發佈:2018-11-08
java位元組碼本質是java程式的格式化表示,便於機器處理。所以他是java程式的另一種表示,java程式包含的資訊他都包含並且更加結構化。
java虛擬機器位元組碼格式:
magic
魔數,標識該檔案是一個位元組碼檔案。
minor_version
major_version
位元組碼的版本號
constant_pool
常量池,儲存位元組碼中的常量資料以及符號引用。常量資料包括有utf8、Integer、float、long、double幾種型別。符號引用包括有class、field、method
因為java在編譯的時候,不像c有連線的過程,虛擬機器載入的時候是動態連線,所以需要儲存符號引用以便虛擬機器載入的時候進行連線。
access_flags
訪問標識。
this_class
類索引,指向一個常量池中的class型別
super_class
父類索引,指向一個常量池中的class型別
interfaces
介面索引,指向多個常量池中的class型別
fields
欄位,儲存類的欄位定義。
methods
方法,儲存類的方法定義。
attributes
屬性表用於儲存class檔案、欄位、方法的專有資訊,如下所示。欄位和方法都有自己的屬性定義。
屬性名稱 | 使用位置 | 含義 |
code | 方法 | 位元組碼指令 |
ConstantValue | 欄位 | final定義的常量 |
Deprecated | 類、方法、欄位 | 聲名位deprecated的類、欄位、方法 |
Exceptions | 方法 | 方法丟擲的異常 |
InnerClasses | 類 | 內部類列表 |
LineNumberTable | code | 原始碼行號欲指令對應關係 |
LocalVariableTable | code | 方法區域性變數 |
SourceFile | 類 | 原檔名稱 |
Synthetic | 類、方法、欄位 | 編譯器自動生成 |