javap

Bill-Mac:learning Bill$ javap -verbose Test
Compiled from "Test.java"
public class Test extends java.lang.Object
  SourceFile: "Test.java"
  minor version: 0
  major version: 50
  Constant pool:
const #1 = Method    #6.#15; //  java/lang/Object."<init>":()V
const #2 = String    #16;    //  ab1
const #3 = Field #17.#18;    //  java/lang/System.out:Ljava/io/PrintStream;
const #4 = Method    #19.#20;    //  java/io/PrintStream.println:(Ljava/lang/String;)V
const #5 = class #21;    //  Test
const #6 = class #22;    //  java/lang/Object
const #7 = Asciz <init>;
const #8 = Asciz ()V;
const #9 = Asciz Code;
const #10 = Asciz    LineNumberTable;
const #11 = Asciz    main;
const #12 = Asciz    ([Ljava/lang/String;)V;
const #13 = Asciz    SourceFile;
const #14 = Asciz    Test.java;
const #15 = NameAndType  #7:#8;//  "<init>":()V
const #16 = Asciz    ab1;
const #17 = class    #23;    //  java/lang/System
const #18 = NameAndType  #24:#25;//  out:Ljava/io/PrintStream;
const #19 = class    #26;    //  java/io/PrintStream
const #20 = NameAndType  #27:#28;//  println:(Ljava/lang/String;)V
const #21 = Asciz    Test;
const #22 = Asciz    java/lang/Object;
const #23 = Asciz    java/lang/System;
const #24 = Asciz    out;
const #25 = Asciz    Ljava/io/PrintStream;;
const #26 = Asciz    java/io/PrintStream;
const #27 = Asciz    println;
const #28 = Asciz    (Ljava/lang/String;)V;
 
{
public Test();
  Code:
   Stack=1, Locals=1, Args_size=1 //全部方法都會有,stack表明棧頂的單位大小(每一個大小爲1個slot,每一個slot是4個字節寬度)
   0:    aload_0  //第一個0表明虛指令中的行號,每一個方法從0開始遞增,可是能夠跳躍。
   1:    invokespecial   #1; //Method java/lang/Object."<init>":()V  //構造方法、父類構造方法以及非靜態的private方法調用指令
   4:    return
  LineNumberTable: 
   line 2: 0
注:當須要使用一個數據時,它首先會被放入棧頂,使用完後會寫回到本地變量或主存中。這裏棧的寬度是1,其實表明有一個this將會被引用。
  Locals是本地變量的slo個數,可是並不表明與Stack寬度一致。(double、long會佔用兩個slot)
  Args_size表明的是入口參數的個數,再也不試slot的個數。
  aload_0指令是講「第一個」slot所在的本地變量推到棧頂,而且這個本地變量是引用類型的。

public static void main(java.lang.String[]); Code: Stack=3, Locals=3, Args_size=1 0: ldc #2; //String ab1 2: astore_1 3: ldc #2; //String ab1 5: astore_2 6: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream; 9: aload_2 10: dup 11: astore_1 12: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 15: return LineNumberTable: line 4: 0 line 5: 3 line 6: 6 line 7: 15 }
相關文章
相關標籤/搜索