天天看點

檢視Java的彙編指令

通過javap 指令,可以将位元組碼檔案反編譯。如通過下面的指令:

javap -c Xxxx.class

而有時候想看某些JDK底層實作,發現反編譯得到的代碼并沒有什麼幫助,是以本文介紹如何檢視Java的彙編指令,檢視Java代碼最真實的運作細節。

Java本身提供這個支援,但需要引入而外的包(

hsdis-amd64.dylib

)。

Mac下:

https://github.com/evolvedmicrobe/benchmarks/blob/master/hsdis-amd64.dylib

下載下傳下來後,将其放置到jre lib目錄下即可。

檢視Java的彙編指令

1、可以使用指令

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly Main

(Main是class檔案)

2、在IDEA配置VM options,列印彙編指令,如下圖。

-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly

檢視Java的彙編指令

這種方式,在運作程式時,直接在控制台列印彙編指令。

檢視Java的彙編指令

如果遇到:

Java HotSpot(TM) 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output 
Could not load hsdis-amd64.dylib; library  not loadable; PrintAssembly is disabled
           

下載下傳上面的庫檔案放到jre/lib下即可。