程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JVM-繪圖展現字節碼執行引擎執行過程,jvm-字節碼

JVM-繪圖展現字節碼執行引擎執行過程,jvm-字節碼

編輯:JAVA綜合教程

JVM-繪圖展現字節碼執行引擎執行過程,jvm-字節碼


在我的上一篇博客JVM-String比較-字節碼分析中介紹了String字符串比較的原因,借著分析字節碼的機會,我這篇博客將會繪圖展現方法內部字節碼執行過程。

話不多說,貼上我們將要分析的Java方法代碼:

public static void bb(){
     String s1="a"+"b";
     String s2 = "ab";
     p(s1==s2);//true
}

再貼上我們將要分析的Java方法的字節碼:

public static void bb();
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=0
0: ldc #5 // String ab 將字符串"ab"從常量池中推送至棧頂 2: astore_0 將棧頂引用類型(字符串"ab")存入第一個本地變量 3: ldc #5 // String ab 將字符串"ab"從常量池中推送至棧頂 5: astore_1 將棧頂引用類型(字符串"ab")存入第一個本地變量 6: aload_0 將第一個本地變量("ab")推送至棧頂 7: aload_1 將第二個本地變量("ab")推送至棧頂 8: if_acmpne 15 比較棧頂兩引用類型數值,結果不同跳轉(這裡當然相同啦) 11: iconst_1 將int類型 1 推送至棧頂 12: goto 16 無條件跳轉到16字節碼偏移量 15: iconst_0 16: invokestatic #10 // Method java/lang/Boolean.valueO 調用靜態方法Boolean.valueOf();並將返回的Boolean類型的true壓入棧頂 f:(Z)Ljava/lang/Boolean; 19: invokestatic #11 // Method p:(Ljava/lang/Object;)V 調用靜態方法p(true);輸出true 22: return 從當前方法返回void

由Code:下面的第一行,我們得知,操作數棧深度為2,局部變量空間為2個Slot,參數個數為0。

 

如果你把所有的圖片復制下來,會看到動態般執行的效果。

-------------------------------------------------------------------繪圖分割線----------------------------------------------------------

      

 

     

 

   

 

   

 

如果有不對的地方,歡迎指正。

如果你認同我的博文,幫忙推薦一下,博主寫這篇博客不易。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved