1. 程式人生 > >java虛擬機器5 位元組碼

java虛擬機器5 位元組碼

  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 類、方法、欄位 編譯器自動生成