JVM-繪圖展現位元組碼執行引擎執行過程

来源:http://www.cnblogs.com/kingofkai/archive/2016/11/05/6032929.html
-Advertisement-
Play Games

在我的上一篇博客JVM-String比較-位元組碼分析中介紹了String字元串比較的原因,藉著分析位元組碼的機會,我這篇博客將會繪圖展現方法內部位元組碼執行過程。 話不多說,貼上我們將要分析的Java方法代碼: 再貼上我們將要分析的Java方法的位元組碼: 由Code:下麵的第一行,我們得知,操作數棧深度 ...


在我的上一篇博客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。

 

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

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

      

 

     

 

   

 

   

 

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

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • |定義|含義| | | | |int i|定義整形變數i| |int p|p為指向整形數據類型的指針變數| |int a[n]|定義有n個元素的整型數組a| |int p[n]|定義由n個指向整型數據的指針元素組成的指針數組p| |int ( p)[n]|p為指向n個元素的一維數組的指針變數| |i ...
  • php的閉包可能不常用,但是在某些場合之下還是可以考慮用php的閉包來實現某些功能的,比如遞歸,這裡講一下用php的閉包實現遞歸 這是一個簡單的使用php閉包實現遞歸的函數,其實,假如我們對這個函數稍微修改一下,是可以實現很多功能的,比如說,無限極分類。 關於裡面的閉包函數,其實,我們也可以不用引用 ...
  • List Set 都是介面,都繼承了Collection介面 ArrayList LinkList 直接實現了List介面 HashSet 實現了Set介面 HashSet 實現了Set介面 TreeSet繼承父類AbstractSet 間接的實現了Set 介面 Map 是介面,沒有實現Collec ...
  • JMS是一個用於提供消息服務的技術規範,它制定了在整個消息服務提供過程中的所有數據結構和交互流程。 而activemq則是消息隊列服務,是面向消息中間件(MOM)的最終實現,是真正的服務提供者。 jms 的一個標準或者說是一個協議。 通常用於企業級應用的消息傳遞。 主要有topic 消息(1 對多) ...
  • 一、前言 在之前的隨筆之中,我們已經瞭解Java通過上傳組件來實現上傳和下載,這次我們來瞭解Struts2的上傳和下載。 註意:文件上傳時,我們需要將表單提交方式設置為"POST"方式,並且將enctype屬性設置為"multipart/form-data",該屬性的預設值為"application ...
  • iText是著名的開放項目,是用於生成PDF文檔的一個java類庫。通過iText不僅可以生成PDF或rtf的文檔,而且可以將XML、Html文件轉化為PDF文件。 官方網站:http://itextpdf.com/ 示例版本:itextpdf-5.2.1.jar 示例代碼 document.add ...
  • 一、OOP(Object-oriented Programming)面向對象程式編程 初談類和對象,所謂萬物皆對象,類和對象有什麼區別和聯繫? 類,是對某一種類型的定義,比如字元串,動物,人,飛機等等,而對象是指具體的字元串,動物,人... 如:豬是類,定義了,豬,有體重,有年齡,可以吃飯,可以睡覺 ...
  • 英文文檔: 2. 當傳入多個可迭代對象時,函數的參數必須提供足夠多的參數,保證每個可迭代對象同一索引的值均能正確傳入函數。 3. 當傳入多個可迭代對象時,且它們元素長度不一致時,生成的迭代器只到最短長度。 4. map函數是一個典型的函數式編程例子。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...