首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

JVM 字節碼執行引擎圖解:方法內部執行過程可視化

     編輯:Java 綜合教學

JVM 字節碼執行引擎圖解:方法內部執行過程可視化

承接上一篇《JVM-String比較-字節碼分析》,本文將通過圖解方式展示方法內部字節碼的逐步執行過程。

分析目標方法

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

對應字節碼

public static void bb();
  flags: ACC_PUBLIC, ACC_STATIC
  Code: stack=2, locals=2, args_size=0
     0: ldc #5           // String "ab" 推送至棧頂
     2: astore_0         // 存入第1個局部變量
     3: ldc #5           // String "ab" 推送至棧頂
     5: astore_1         // 存入第2個局部變量
     6: aload_0          // 載入第1個局部變量
     7: aload_1          // 載入第2個局部變量
     8: if_acmpne 15     // 比較引用,不同則跳轉
    11: iconst_1         // 壓入 int 1 (true)
    12: goto 16          // 無條件跳轉
    15: iconst_0         // 壓入 int 0 (false)
    16: invokestatic #10 // Boolean.valueOf(Z)Ljava/lang/Boolean;
    19: invokestatic #11 // p(Ljava/lang/Object;)V
    22: return

從 Code 首行可知:操作數棧深度=2,局部變量表=2 Slot,參數數量=0。

執行過程圖解

以下圖片按字節碼偏移量順序展示棧、局部變量、程序計數器變化(若把所有圖片連續查看會有動態效果):

步驟0-2  步驟3-5  步驟6-8

步驟11-12  步驟15-16  步驟19-22

歡迎指正不準確之處,若認同請推薦支持。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved