如何在windows平台下使用hsdis與jitwatch查看JIT后的匯編碼


1. 安裝hsids

這一步比較麻煩,需要提前安裝cygwin,以及下載openjdk的源碼

具體步驟請參考下面的兩篇文章

How to build hsdis-amd64.dll and hsdis-i386.dll on Windows

在64位Windows上編譯hsdis

編譯時還遇到兩個小坑

a. 使用最新的binutils-2.29無法編譯成功,最后只能下載binutils-2.27的包重新編譯

b. make的時候使用-j4參數希望加速編譯,結果反而編譯失敗,只能去掉-j4參數繼續單線程編譯,比較慢

編譯完成后,將/hsdis/build/Linux-amd64里生成的hsdis-amd64.dll文件復制到$JAVA_HOME/jre/bin/server里即可

 

2. 用hsdis查看JIT后的匯編碼

參考這篇文章

使用hsdis查看jit生成的匯編代碼

 

3. 用jitwatch更方便的查看JIT后的匯編碼

如果我們使用加-XX:+PrintAssembly參數的方法直接查看JIT后的匯編代碼,會得到很多很多的結果,非常難以看懂。

還好有個叫做jitwatch的工具可以幫助我們分析。

安裝方法:

a. 去jitwatch的github主頁上下載源碼,download zip就行了

b. 確定電腦上已經安裝了maven3組件,然后在解壓后的jitwatch源碼目錄里執行mvn clean compile exec:java

c. jitwatch的圖形界面啟動,如下圖所示

使用方法:

a. 使用-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+LogCompilation -XX:LogFile=jit.log  參數啟動你的應用程序,然后工作目錄下就會產生一個名為jit.log的文件了,里面內容很多,試圖人肉分析基本是徒勞的。

b. 運行jitwatch,點擊"Open Log"按鈕,加載jit.log文件

c. 點擊"Config"按鈕,設置應用的源碼路徑和編譯后的Class路徑,如下圖所示:

 

 

d. 點擊"Start"按鈕,然后在左邊的樹形圖里選擇自己想要分析的Class,然后右邊點擊method,就會彈出匯編碼分析界面了,如下圖所示:

 

e. 分析界面分為左中右三欄,左邊為java源碼,中間為java字節碼,右邊為jit后的匯編碼,如果進行過多次jit編譯,還能分別查看編譯結果,如下圖所示:

 

 

總之,hsdis+jitwatch用起來還是比較方便的(雖然安裝起來確實比較費勁),推薦使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM