Java匯編源碼如何查看環(huán)境搭建
一、簡介
JVM的學(xué)習(xí)很多時(shí)候得看著字節(jié)碼和匯編代碼才好理解,而作為Java程序員來說,其實(shí)更希望在開發(fā)環(huán)境中能查看匯編代碼,這樣其實(shí)更有助于我們平時(shí)的代碼調(diào)優(yōu)和JVM的學(xué)習(xí)。那么我們應(yīng)該如何搭建呢?跟著我一起動(dòng)手來搭建下吧。
二、在IDEA開發(fā)環(huán)境中搭建匯編環(huán)境
2.1 在IDEA中搭建字節(jié)碼查看環(huán)境
我們都知道,Java 源文件(.java格式)要運(yùn)行,需要編譯成Java字節(jié)碼文件(.class格式),在我們做源代碼原理分析時(shí),可能需要查看字節(jié)碼文件,我們一般使用過javap -v xxx.class 命令進(jìn)行查看的,這個(gè)javap 工具是jdk開發(fā)環(huán)境提供的一款工具,需要我們安裝好jdk和配置好jdk的環(huán)境變量;有時(shí)候我們可能希望在IDEA開發(fā)環(huán)境中直接打印控制臺(tái)查看,那么該如何實(shí)現(xiàn)配置呢?接下來我們實(shí)現(xiàn)下。
2.1.1 搭建步驟
這里以主流的開發(fā)工具IntelliJ IDEA 做例子:
2.1.1.1 第一步
2.1.1.2 第二步
2.1.1.3 第三步
2.1.1.4 第四步
2.1.2 驗(yàn)證
在需要查看字節(jié)碼的類中右鍵,打開External Tools,選擇我們剛才新建的擴(kuò)展工具javap -v,執(zhí)行
好了,在IDEA中搭建字節(jié)碼環(huán)境就完成了,接下來我們看下,在IDEA中如何搭建匯編環(huán)境。
2.2 在IDEA開發(fā)環(huán)境中搭建匯編代碼查看環(huán)境
要想查看匯編代碼,我們可以通過一款工具,叫做HSDIS,它是一個(gè)Sun官方推薦的HotSpot虛擬機(jī)JIT編譯代碼的反匯編插件。
2.2.1 下載HSDIS插件
官網(wǎng)地址:
hsdis HotSpot Disassembly Plugin Downloads (chriswhocodes.com)
因?yàn)槲覀兪莣indows環(huán)境,且系統(tǒng)版本是64位的,所以就下載hsdis-amd64.dll。
2.2.2 配置HSDIS插件
將hsdis-amd64.dll安裝到 %JAVA_HOME\jre\bin\server 目錄下。
2.2.3 驗(yàn)證HSDIS插件是否安裝成功
在CMD窗口中執(zhí)行如下指令:
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version
出現(xiàn)如上匯編指令,則算安裝成功。
2.2.4 在IDEA中配置
在IDEA開發(fā)環(huán)境中,我們那個(gè)類需要打印匯編代碼,就在哪個(gè)類的運(yùn)行配置中配置打印信息,如下:
配置如下指令:
-server -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+LogCompilation -XX:LogFile=D:\software_development\data\log\%t-hotspot.log
然后直接點(diǎn)擊運(yùn)行測試用例,我們就會(huì)在控制臺(tái)看到匯編代碼信息:
在我們配置的日志路徑下,也會(huì)生成有相關(guān)的匯編代碼信息:
好了,我們在IDEA中打印匯編代碼的配置就做好了。
三、JITWatch 環(huán)境搭建
JITWatch 是 HotSpot JIT 編譯器的日志分析器和可視化程序,它能幫助我們更加詳細(xì)的查閱JVM匯編代碼和JIT編譯詳情。下面我們來介紹下該如何安裝和使用它。
3.1 JITWatch 下載
官網(wǎng):
3.2 運(yùn)行
java -jar jitwatch-ui-1.4.9-shaded-win-x64.jar
3.3 使用
3.3.1 導(dǎo)入日志
3.3.2 查看匯編
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java super關(guān)鍵字調(diào)用父類過程解析
這篇文章主要介紹了Java super關(guān)鍵字調(diào)用父類過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12SpringBoot中web模版數(shù)據(jù)渲染展示的案例詳解
憑借 Spring Framework 的模塊、與你最喜歡的工具的大量集成以及插入你自己的功能的能力,Thymeleaf 是現(xiàn)代 HTML5 JVM Web 開發(fā)的理想選擇——盡管它還有更多功能,本文重點(diǎn)給大家介紹SpringBoot中web模版數(shù)據(jù)渲染展示,需要的朋友可以參考下2022-01-01@Value設(shè)置默認(rèn)值后,獲取不到配置值的原因分析
這篇文章主要介紹了@Value設(shè)置默認(rèn)值后,獲取不到配置值的原因,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Spring?Cloud?Gateway?2.x跨域時(shí)出現(xiàn)重復(fù)Origin的BUG問題
這篇文章主要介紹了Spring?Cloud?Gateway?2.x跨域時(shí)出現(xiàn)重復(fù)Origin的BUG問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04Java利用轉(zhuǎn)義字符過濾HTML中的標(biāo)簽
通過本文介紹的Java方法,我們可以輕松利用轉(zhuǎn)義字符來過濾HTML文本中的標(biāo)簽,確保輸出內(nèi)容的純文本展示,感興趣的朋友跟隨小編一起看看吧2024-11-11最詳細(xì)的Java循環(huán)結(jié)構(gòu)解析之for循環(huán)教程(適合小白)
:循環(huán)結(jié)構(gòu)是指在程序中需要反復(fù)執(zhí)行某個(gè)功能而設(shè)置的一種程序結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于Java循環(huán)結(jié)構(gòu)解析之for循環(huán)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09