[研究ノート] JVMバイトコードファイルの構造

新しいJavaクラスを作成します。

パッケージcom.learn.jvm。

パブリック クラスMyTest1 {
     プライベート int型の A = 1 ; 

    パブリックMyTest1(){ 
    } 

    公共 のint 下駄は(){
         戻り 、この.Aと、
    } 

    公共 ボイドセットA(INT A){
         この .A = 
    } 
}

-c抗コンソールを解決してjavap使用

D:\ \共通学びをワークスペース-学ぶ\学ぶ-クラスローダの\ターゲット\クラスは\ COM \学ぶ\ JVM>てjavap -c MyTest1 
警告:二进制文件MyTest1包含com.learn.jvm.MyTest1 
"MyTest1.java"より作成
、公開クラスcom.learn.jvm.MyTest1 { 
  パブリックcom.learn.jvm.MyTest1()。
    コード:
       0:aload_0 
       。invokespecial#1 //メソッドのJava /ラング/オブジェクト"<初期化>" :()V:1 
       4:aload_0 
       iconst_1で:5 
       6:putfield#2 //フィールド:私は
       9:返す

  パブリックINTを入手する(); 
    コード:
       0:aload_0 
       のgetField#2 //フィールド:I 1 
       4:ireturn 
       0:aload_0
 
  ます。public voidセットA(int型);
    コード:
       1:iload_1 
       2:putfield#2 //フィールド:I 
       5:リターン
}

-verbose抗コンソールを解決してjavap使用

D:\ワークスペース-学ぶ\共通学ぶ\学ぶ-クラスローダの\ターゲット\クラス\ COM \学ぶ\ JVM>てjavap -verbose MyTest1 
警告:二进制文件MyTest1包含com.learn.jvm.MyTest1 
クラスファイル/ D:/ワークスペース-学びます/common-learn/learn-classloader/target/classes/com/learn/jvm/MyTest1.class 
  最後は2019年9月4日に変更しました。サイズ473バイトの
  MD5チェックサムが8dc78fb3801af3d26bc3befec9b7c5ed 
  "MyTest1.java"より作成
パブリッククラスcom.learn.jvm.MyTest1 
  SOURCEFILE: "MyTest1.java" 
  マイナーバージョン:0 
  メジャーバージョン:51の
  旗:ACC_PUBLIC、ACC_SUPER 
定数プール:
   第1位= Methodref#を4.#20 // Javaの/ LANG /オブジェクト。 "の<init>" :()V 
   #2 =するFieldRef#3.#21 // COM /学ぶ/ JVM / MyTest1.a:I
   #3 =クラス#22 // COM /学習/ JVM / MyTest1 
   #4 =クラス#23 //のJava /ラング/ OBJECT 
   #5 = UTF8 A 
   #6 = UTF8 I 
   #7 = UTF8 <初期化> 
   #8 = UTF8( )V 
   #9 = UTF8コード
  #10 = UTF8 LineNumberTable 
  #11 = UTF8 LocalVariableTable 
  #12 = UTF8この
  #13 = UTF8 LCOM /学習/ JVM / MyTest1。
  #14 = UTF8下駄
  #15 = UTF8()I 
  #16 = UTF8セットA 
  #17 = UTF8(I)のV 
  #18 = UTF8 SOURCEFILE
  #19 = UTF8 MyTest1.java  
  #20 = NameAndType#7:#8 // "<初期化>" :( )V
  #21 = NameAndType#5:#6:// I 
  #22 = UTF8 COM /学習/ JVM / MyTest1 
  #23 = UTF8のJava /ラング/オブジェクト
{ 
  公共com.learn.jvm.MyTest1 (); 
    フラグ:ACC_PUBLIC 
    コード:
      スタック= 2、地元の人々が= 1、args_size = 1 
         0:aload_0 
         1:invokespecial#1 //メソッドのJava / langは/オブジェクト"<初期化>" :()V 
         4:aload_0 
         5:iconst_1で
         6: putfield#2 //フィールド:I 
         9:戻る
      :LineNumberTable 
        行8:0 
        9行目:4 
      LocalVariableTableを: 
        スタートの長スロット名の署名を
               0 10 0このLCOM /学ぶ/ JVM / MyTest1。

  公共int型下駄(); 
    フラグ:ACC_PUBLIC 
    コード:
      スタック= 1、地元の人々 = 1、args_size = 1 
         0:aload_0 
         1:のgetField#2 //フィールド:私は
         4:ireturn 
      LineNumberTable:
        行12:0 
      LocalVariableTableは:
        長さスロット名の署名を開始し
               、この0 5 0 LCOM /学ぶ/ JVM / MyTest1。

  公共無効セットA(int型); 
    フラグ:ACC_PUBLIC 
    コード:
      スタック= 2、地元の人々は= 2、args_size = 2 
         2:putfield#2 //フィールド:私は 
         0:aload_0
         1:iload_1
         5:返す
      LineNumberTableを:
        行16:0 
        の行17:5 
      LocalVariableTable:
        開始長のスロット名の署名
               0 6 0このLCOM /学ぶ/ JVM / MyTest1。
               0 6 1 I 
}

 

おすすめ

転載: www.cnblogs.com/heben/p/11460391.html