のJAVAバイトコードファイル構造

開発ツール:家田、JDK1.8、WinHex

バイトコードファイルの構造

ソース

パッケージcom.jalja.java.bytecode。

/ ** 
 * @Auther:XL 
 * @Date:2020年1月4日12時58分
 * @description:
 * / 
パブリック クラスBytecodeTest {
     プライベート int型 NUM = 1 ; 

    公共 INT getNum(){
         戻りNUM。
    } 

    公共 ボイド setNum(int型NUM){
         この .nu​​m = NUM。
    } 
}

分析てjavap -verbose Aバイトコードファイル、マジックナンバー情報は、ファイル、バージョン番号、定数プール、クラス情報、クラスのコンストラクタ、クラス情報、クラス変数とメンバ変数のメソッドバイトコード出力であります

F:\ワークスペース\ IDEA \研究\ jaljaベース-utilsの\ターゲット\テスト・クラス>てjavap - com.jalja.java.bytecode.BytecodeTest冗長
クラスファイル / F:/ワークスペース/ IDEA /研究/ jaljaベース-utilsの/ターゲット/テストクラス/ COM / jalja / javaの/バイトコード/ BytecodeTest。クラス
  最終更新日 2020年1月4日を。サイズ514 バイトの
  MD5チェックサムb661c2792027e7c9169a0266523412c1 
  からコンパイル "BytecodeTest.java"
 パブリック クラスcom.jalja.java.bytecode.BytecodeTestの
  マイナーバージョン: 0 
  メジャーバージョン: 52の
  フラグ:ACC_PUBLIC、ACC_SUPERの
定数プール: 1 = Methodref#4#20          / /Javaの/ LANG /オブジェクト"の<init>" :()V。 
   #2 =するFieldRef#3.#21          // COM / jalja / javaの/バイトコード/ BytecodeTest.num:I 
   #3 =クラス#22             // COM / jalja /ジャワ/バイトコード/ BytecodeTest 
   #4 =クラス#23             // のJava / LANG /オブジェクト 
   #5 = UTF8 NUM  6 = UTF8 I  7 = UTF8 <初期化>  8 = UTF8()V  9 = UTF8コード 10 = UTF8 LineNumberTable  11 =UTF8 LocalVariableTable  12 = UTF8                この 13 = UTF8 LCOM / jalja /ジャワ/バイトコード/ BytecodeTest。 14 = UTF8 getNum  15 = UTF8()I  16 = UTF8 setNum  17 = UTF8(I)V  18 = UTF8 SOURCEFILE  19 = UTF8 BytecodeTest.java  20 = NameAndType#7:#8           // 「< INIT> ":()V 
  #21 = NameAndType#5:#6           //NUM:I 
  #22 = UTF8 COM / jalja /ジャワ/バイトコード/ BytecodeTest  23 = UTF8のJava /ラング/ オブジェクト
{ 
  パブリックcom.jalja.java.bytecode.BytecodeTest()。
    記述子:()は、V 
    フラグ:ACC_PUBLIC 
    コード:
      スタック = 2、地元= 1、args_size = 1 
         0 :aload_0
          1:invokespecial#1                   // 。メソッドJAVA /ラング/オブジェクト"<初期化>" :()V 
         4 :aload_0
          5 :iconst_1で
          6:putfield#2                   // フィールドNUM:I 
         9:リターン
      LineNumberTable: 8:0  9:4 
      LocalVariableTable:
        スタート長スロット名署名
             0 10 0   この    LCOM / jalja /ジャワ/バイトコード/ BytecodeTest。

  公共 int型getNum(); 
    記述子:()のI 
    フラグ:ACC_PUBLIC 
    コード:
      スタック = 1、地元= 1、args_size = 1 
         0 :aload_0
          1:GETFIELD#2                   // フィールドNUM:I 
         4 :ireturn 
      LineNumberTable: 12:0 
      LocalVariableTable:
        スタートの長さのスロット名の署名
             0 5 0   この    LCOM / jalja / javaの/バイトコード/ BytecodeTest。

  公共 のボイド setNum(int型); 
    記述子:(I)Vの
    フラグ:ACC_PUBLIC 
    コード:
      スタック = 2、地元= 2、args_size = 2 
         0 :aload_0
          1 :iload_1
          2:第2位putfield                   // フィールドnumは:I 
         5:戻り
      LineNumberTable: 16:0 
        ライン 17 :5  
      LocalVariableTable:
        スタートの長さのスロット名の署名
             0 6 0   この    LCOM / jalja / javaの/バイトコード/ BytecodeTest。
            0 6 1    NUM I 
} 
SOURCEFILE: "BytecodeTest.java"
コードの表示

WinHex:オープンクラスファイル

第二に、マジックナンバー

1、マジックナンバー:すべてのクラスのバイトコードファイルの最初の4つのバイトはマジックナンバーであり、マジック番号は、データが準拠クラスローディングであること固定値0XCAFEBABE、JVMの検証です。

第二に、バージョン番号

2、バージョン番号: 

 4バイトのマジックナンバー、バージョン情報、最初の2バイト(00 00)であり、マイナーバージョン番号(マイナーバージョン:0)した後、最後の2バイト(00 34)メジャーバージョン番号(メジャーバージョンである:52 )、進34進52に変換され、52は、対応するJDK1.8であり; = 1.8.0クラスファイルの、したがって、バージョン番号、使用するJava -versionを検証することができます。JVMは、下位互換性があるので、ファイルのバージョン番号バイトコードあなたを行うので、どのように以下のJVMの現在のバージョンに等しいよりも、あなたは現在のJVMで実行することができます。

 

次のセクション:定数プールのJavaバイトコードファイル

おすすめ

転載: www.cnblogs.com/jalja365/p/12150107.html