- 適用於 JDK 23 的 GraalVM (最新)
- 適用於 JDK 24 的 GraalVM (搶先體驗)
- 適用於 JDK 21 的 GraalVM
- 適用於 JDK 17 的 GraalVM
- 封存
- 開發版本
理想圖形視覺化工具
理想圖形視覺化工具 (IGV) 是一個開發人員工具,用於分析編譯圖形並調查效能問題。IGV 的開發目的是檢視和檢查中繼表示圖形,這是一種介於原始語言和機器碼之間的、與語言無關的中繼表示 (IR),由編譯器產生。對於任何基於 GraalVM 建構的語言實作者而言,這都至關重要。
IGV 工具的開發目的是讓 GraalVM 語言實作者能夠使用 Truffle 框架 來最佳化他們組裝的語言。作為開發工具,它不應安裝到生產環境中。
先決條件 #
開始使用 #
IGV 可免費使用,必須在使用者電腦上使用 mx
工具 建置,mx
是一個命令列工具,用於建置、測試、執行、更新程式碼,以及建置 GraalVM 的成品。
- 將
mx
儲存庫複製到您的工作目錄git clone https://github.com/graalvm/mx.git
- 複製 Graal 儲存庫
git clone https://github.com/oracle/graal.git
- 將
mx
新增至PATH
環境變數export PATH="/path/to/mx:$PATH"
若要檢查安裝是否成功,請執行命令
mx --version
- 使用
mx
啟動 IGVmx -p graal/compiler igv
使用 Ruby 範例傾印圖形 #
使用一個嵌入了一些 Java 的主機 Ruby 應用程式,您現在將透過網路傾印編譯器圖形。
-
將下列程式碼片段儲存到名為
Test.rb
的檔案中require 'json' obj = { time: Time.now, msg: 'Hello World', payload: (1..10).to_a } encoded = JSON.dump(obj) js_obj = Polyglot.eval('js', 'JSON.parse').call(encoded) puts js_obj[:time] puts js_obj[:msg] puts js_obj[:payload].join(' ')
- 使用 Ruby 管理器/安裝程式,從 TruffleRuby 獨立版本安裝 Ruby。檢查其版本以確保您正在執行 TruffleRuby 發行版本
ruby --version
- 執行應用程式,將程序連線到正在執行的 IGV
ruby --vm.Djdk.graal.Dump=:1 --vm.Djdk.graal.PrintGraph=Network Test.rb
這會透過網路將編譯器圖形以 IGV 格式傾印到監聽 127.0.0.1:4445 的 IGV 程序。連線建立後,您就可以在「大綱」視圖中看到圖形。例如,找到 java.lang.String.char(int)
資料夾,然後按兩下開啟其「解析後」圖形。如果節點具有 sourceNodePosition
屬性,則「處理」視窗將嘗試顯示其位置和整個堆疊追蹤。
瀏覽圖形 #
開啟特定圖形後,您可以按名稱、ID 或 property=value
資料搜尋節點,並且會顯示所有相符的結果。這個工具的另一個絕佳功能是能夠導覽至原始客體語言原始程式碼。在圖形中選取一個節點,然後按一下「堆疊檢視」視窗中的「前往原始碼」按鈕。
也可以從內容功能表執行圖形導覽,方法是專注並按一下滑鼠右鍵選取特定的圖形節點。「擷取節點」選項會重新轉譯圖形,並且只顯示選取的節點及其鄰近節點。
如果圖形大於螢幕,請操作主工具列中的「衛星視圖」按鈕來移動檢視區矩形。
為了方便使用者偏好,可以透過編輯「色彩配置」篩選器來調整圖形色彩配置,預設會在左側邊欄中啟用。
檢視原始程式碼 #
原始程式碼檢視可以在手動和輔助模式下開啟。在圖形檢視中選取節點後,「處理」檢視會開啟。如果 IGV 知道目前框架的原始程式碼在哪裡,則會啟用綠色的「前往原始碼」箭頭。如果 IGV 不知道原始程式碼在哪裡,則該行會呈現灰色,並且會出現「放大鏡」按鈕。
按一下它並選取「在 Java 專案中尋找」以在對話方塊中找到正確的專案。IGV 會隱藏不包含所需原始檔的專案。「原始程式碼集合」用於顯示由「新增原始碼根目錄」一般動作新增的獨立根目錄。如果使用慣用方法 (例如,從 Java 專案) 找到原始程式碼,則稍後可以在「專案」索引標籤上管理其專案。該索引標籤最初會隱藏,但您可以使用「視窗」,然後使用「專案」來顯示已開啟專案的清單。
從嵌入式 Java 傾印圖形 #
若要將嵌入式 Java 應用程式的 GraalVM 編譯器圖形傾印到 IGV,您需要在基於 GraalVM 的程序中新增選項。根據所使用的語言/VM,您可能需要將選項加上 --vm
前置詞。請參閱特定語言的文件以瞭解詳細資訊。要新增的主要選項是 -Djdk.graal.Dump=:1
。這會將圖形以 IGV 可讀格式傾印到本機檔案系統。若要將傾印直接透過網路傳送至 IGV,請在啟動 GraalVM 執行個體時新增 -Djdk.graal.PrintGraph=Network
。您也可以選擇指定連接埠。然後,傾印會從 localhost 上執行的 GraalVM 傳送到 IGV。如果 IGV 未監聽 localhost,請在「選項」下檢查,然後可以勾選「理想圖形設定 | 接受來自網路的資料」。如果沒有 IGV 執行個體監聽 127.0.0.1
,或無法連線到它,傾印將會重新導向到本機檔案系統。檔案系統位置在程序的目前工作目錄下的 graal_dumps/
,並且可以使用 -Djdk.graal.DumpPath
選項變更。
如果使用較舊的 GraalVM 版本,您可能需要明確要求傾印包含 nodeSourcePosition
屬性。這可以透過新增 -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints
選項來完成。