java反匯編工具介紹

反匯編程序

  • java生成字節(jié)碼層面會(huì)隱藏實(shí)現(xiàn)細(xì)節(jié),通過(guò)匯編代碼了解程序運(yùn)行指令,這個(gè)介紹HSDIS(Hotspot Disassembler)和JITWatch的使用方式
  • 注意:網(wǎng)上關(guān)于使用文章很多,以下方法是本人親測(cè)可用方法!
HSDIS使用
  1. 該插件是由Sun官方推薦的HotSpot虛擬機(jī)JIT編譯代碼的反匯編插件,實(shí)際上就是一個(gè)動(dòng)態(tài)庫(kù);
  2. 下載hsdis地址:hsdis-amd64.dylib,downLoad下載完畢放到JDK安裝路徑bin/文件下即可
  3. 使用IDE運(yùn)行程序時(shí)配置VM參數(shù)如下:
    -Xcomp : 讓JVM以編譯模式執(zhí)行代碼,即JVM會(huì)在第一次運(yùn)行時(shí)即將所有字節(jié)碼編譯為本地代碼
    -XX:+UnlockDiagnosticVMOptions : 解鎖診斷功能
    -XX:+PrintAssembly : 輸出反匯編后的匯編指令
    
  4. 配置完成運(yùn)行程序即可
    public class VolatileDemo {
        private static volatile int i = 0;
        public static void n(){
            i++;
        }
        public static synchronized void m(){}
        public static void main(String[] args) {
            //熱點(diǎn)代碼,編譯成本地代碼
            for (int j = 0; j < 1_000_000; j++) {
                n();
                m();
            }
        }
    }
    
    //如上代碼運(yùn)行即可在run中輸出匯編碼,搜索‘n'即可查看到該條匯編語(yǔ)句,這就是valotile關(guān)鍵字的匯編碼實(shí)現(xiàn)方式
    lock addl $0x0,(%rsp)     ;*putstatic i
    
JITWatch使用
  • 上方中HSDIS打印查看方式很不方便,這里有三方插件解決此痛點(diǎn): 開(kāi)源地址
  • 根據(jù)文檔下載源碼到本地,通過(guò)三種方式運(yùn)行:需要添加對(duì)應(yīng)的環(huán)境變量
    //ant編譯
    ant clean compile test run
    //maven編譯
    mvn clean compile test exec:java
    //gradle編譯
    ./gradlew clean build run
    
  • 使用任一方式運(yùn)行即可打開(kāi)JITWatch
    1. 配置config,Source locations選項(xiàng)Add Folder工程的java目錄
    2. Class locations為功能的classes目錄
    3. 配置vm調(diào)試
     -XX:+LogCompilation JIT的編譯日志輸出
     -XX:LogFile=jit.log日志重定向到日志文件
     //前提設(shè)置
     -XX:+UnlockDiagnosticVMOptions 解鎖診斷功能
    
    1. 按照以上配置完畢運(yùn)行程序獲取log日志后添加到JITWatch的openLog中
    2. 點(diǎn)擊start運(yùn)行即可獲取源碼,字節(jié)碼,匯編代碼對(duì)比圖


      image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容