聊聊JVM(十)Mac下hsdis和jitwatch下载和使用
網(wǎng)上已經(jīng)有了詳細(xì)的hsdis和jitwatch的教材,比如這篇利用hsdis和JITWatch查看分析HotSpot JIT compiler生成的匯編代碼
hsdis能夠查看Java生成的匯編代碼,具體的可以查看上面這篇文章。這里提供一下Mac下的hsdis-amd64.dylib和hsdis-amd64.so文件的下載地址http://pan.baidu.com/s/1i3HxFDF
免得還要重新去編譯。前者是Mac 64位機(jī)器下的,后者是Linux 64位機(jī)器下的。
下載下來hsdis之后,最簡單讓java命令加載它的方法是把它放在一個目錄下面,然后export一下這個目錄就行,比如在.bashrc下面
[java]?view plaincopy這樣就可以使用hsdis來查看JIT生成的匯編代碼了??梢杂孟旅娴拿顏聿榭磆sdis是否工作 [java]?view plaincopy
看到下面這個結(jié)果證明hsdis已經(jīng)配置正確了
下面來試一下用hsdis來生成一個類的匯編碼。
java -server指令指定了JIT使用C2編譯器來優(yōu)化,-Xcomp選項指定了JVM以編譯模式運(yùn)行,否則默認(rèn)是Mix模式,只有熱點(diǎn)代碼才會被JIT編譯優(yōu)化。很多人說寫的類沒有被JIT編譯,我的經(jīng)驗是這個類如果有main方法就會生成匯編碼。-XX:+PrintAssembly 可以打印匯編碼。執(zhí)行下面命令可以讓JIT編譯并把結(jié)果生成到指定的log文件中
[java]?view plaincopy可以用jitwatch工具來查看剛生成的日志文件。 jitwatch可以從 http://pan.baidu.com/s/1i3HxFDF ?下載。我放了一個jitwatch.sh在里面,下載下來之后改一下文件中的路徑就可以直接運(yùn)行了。
關(guān)于jitwatch的使用方法可以看這篇利用hsdis和JITWatch查看分析HotSpot JIT compiler生成的匯編代碼
用jitwatch可以看到哪些方法被JIT編譯了
在調(diào)用一個方法后,會設(shè)置OopMap狀態(tài),這是一個safepoint
在方法返回前,會插入safepoint polling page的代碼 test %eax, 0xxxxxxx,以便讓線程進(jìn)入到這個safepoint的時候可以被阻塞
hsdis和jitwatch是學(xué)習(xí)JVM的利器,下載下來用一用吧
總結(jié)
以上是生活随笔為你收集整理的聊聊JVM(十)Mac下hsdis和jitwatch下载和使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [译]GC专家系列5-Java应用性能优
- 下一篇: 一文读懂如何用LSA、PSLA、LDA和