linux中查看java彙編代碼(hsdis+jitwatch)

前言

在研究JVM時,想要研究下volatile關鍵字的底層實現,需要其對其彙編代碼的指令進行觀察,故需要查看即時編譯器產生的彙編代碼。

正文

環境:linux(deepin)

hsdis的配置

  1. 進入https://sourceforge.net/projects/fcml/files/fcml-1.1.3/,下載源碼並解壓(這裏可能需要科學上網)
  2. cd fcml-1.1.3
  3. ./configure && make && sudo make install
  4. cd example/hsdis && make && sudo make install
  5. source /etc/profile
  6. sudo ln -s /usr/local/lib/libhsdis.so <JAVA_HOME>/lib/amd64/hsdis-amd64.so
  7. sudo ln -s /usr/local/lib/libhsdis.so <JAVA_HOME>/jre/lib/amd64/hsdis-amd64.so

此時隨便編寫一個java文件Test.java。

  1. javac Test.java
  2. java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly Test
    成功打印彙編代碼信息。

jitwatch工具的使用

以上打印的彙編代碼過於雜亂,可以通過jitwatch工具來提供便利。

  1. git clone https://github.com/AdoptOpenJDK/jitwatch
  2. cd jitwatch
  3. mvn clean
  4. mvn install
  5. ./launchUI.sh
    此時便可以打開jitwatch工具。

具體查看某個類的彙編代碼的步驟如下:
首先,使用 Hsdis 執行代碼,輸出反彙編內容:

javac Test.java
java -server -XX:+UnlockDiagnosticVMOptions -XX:+TraceClassLoading  -XX:+PrintAssembly -XX:+LogCompilation -XX:LogFile=test.log Test    # Test是java文件類名, test.log 是輸出的 log 文件,輸出到當前目錄下

接着,通過jitwatch工具open log打開日誌文件,即可以看到各個方法的彙編代碼,關於此工具的更多使用說明可自行搜索。

總結

再次看周志明的《深入理解Java虛擬機》,感覺好接受很多了,JVM還得沉下心來慢慢學。

發佈了68 篇原創文章 · 獲贊 28 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章