日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JIT的Profile神器JITWatch

發(fā)布時間:2024/2/28 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JIT的Profile神器JITWatch 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

老是使用命令行工具在現(xiàn)代化社會好像已經(jīng)跟不上節(jié)奏了,尤其是在做JIT分析時,使用LogCompilation輸出的日志實在是太大了,讓人望而生畏。有沒有什么更加簡便的方法來分析JIT日志呢?快來和小師妹一起來學(xué)習(xí)JITWatch吧。

什么是JIT

小師妹,F師兄,JIT就是Just In Time compilers。能不能再總結(jié)一下JIT到底是做什么的呢?

當(dāng)然沒問題,JIT主要有兩個作用,第一個作用大家應(yīng)該已經(jīng)知道了,就是在運行時將byte code編譯成為機(jī)器碼,提高程序的執(zhí)行速度。

第二個作用就是在運行時對代碼進(jìn)行優(yōu)化,同樣的也對性能進(jìn)行提升。

JIT中有兩種編譯器,C1代表的是Client Compiler,C2代表的是Server Compiler。

其中C1只是簡單的編譯,而C2在收集到更多信息之后,會進(jìn)行更加深入的編譯和優(yōu)化。

常見的優(yōu)化手段有:Loop unrolling, Inlining, Dead Code Elimination,Escape analysis, Intrinsics, Branch prediction等。

JDK8中會默認(rèn)啟動分層編譯。你也可以使用-XX:+TieredCompilation來手動啟動它。

更多精彩內(nèi)容且看:

  • 區(qū)塊鏈從入門到放棄系列教程-涵蓋密碼學(xué),超級賬本,以太坊,Libra,比特幣等持續(xù)更新
  • Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續(xù)更新
  • Spring 5.X系列教程:滿足你對Spring5的一切想象-持續(xù)更新
  • java程序員從小工到專家成神之路(2020版)-持續(xù)更新中,附詳細(xì)文章教程

JITWatch簡介

小師妹:F師兄,上次你講的LogCompilation和PrintCompilation輸出結(jié)果還是太復(fù)雜了,尤其是LogCompilation,輸出的結(jié)果有十幾M,分析起來好難。有沒有更簡單一點的辦法,讓我的工作效率加倍呢?

這個必須有,有需求就有市場,有需求就有大神出場。今天給你介紹一個工具叫做JITWatch。

JITWatch是一個大神做的JIT日志的可視化分析工具。在使用它之前你可能覺得它有點強(qiáng)大,在使用后你就會覺得它真的是強(qiáng)大。

運行JITWatch

小師妹:F師兄,這么強(qiáng)大的工具,快快介紹我使用吧。

完全沒有問題,不過JITWatch沒有現(xiàn)成的打包好的可執(zhí)行文件。沒錯,你需要到github上面下載源碼。

下載完畢,可以執(zhí)行:

mvn clean compile test exec:java

就可以開啟JITWatch之旅了。

JITWatch詳解

小師妹:F師兄,這么好用的工具為什么不打個包出來讓大家直接用呢?還要下載源碼這么麻煩。

其實吧,JITWatch為了大家方便使用,自帶一個Sandbox功能,提供了一些可以直接在JITWatch中運行的代碼,同時JITWatch可以實現(xiàn)源碼的實時比對功能。所以需要大家下載源碼。

閑話休提,我們開啟JITWatch之旅吧。

入眼就是如此樸實無華的界面,讓人感覺總有點…重劍無鋒,大巧不工。高手做的UI就是這么的完美。

接下來我們需要運行一個程序,來實時感受一下JITWatch的魅力。

看到左邊最上角的sandbox了嗎?點開它可以看到下面的sandbox頁面:

這一個頁面會選擇一個sadbox中的例子展示給你,大家注意下面的輸出框的說明,它會顯示你的Disassembler是否可用。如果想要安裝disassembler,請參照我之前的文章。

如果你對這個例子不滿意,或者你想使用自己的代碼,那也完全沒有問題。點擊config。

這里你可以配置源代碼的路徑,可以選擇VM的語言,還有各種VM的選項,下面的選項相信我在之前的文章中都已經(jīng)介紹過了吧。

如果還有不懂的小伙伴,微信我,私聊我,1對1現(xiàn)場教學(xué)。

萬事俱備,只欠東風(fēng),開始吧,我可是要成為Java王的男人!

然后我們就進(jìn)入了TirView界面,這里我們可看到主界面分成了三部分,源代碼,ByteCode和Assembly。

小師妹:真是熱淚盈眶啊,終于不需要自己去添加那些XX參數(shù)了。面向界面編程,真好。

上面還有幾個按鈕,這里簡單介紹一下他們的功能,具體的界面這里就不截圖了,因為實在是太多了…

Chain會展示調(diào)用鏈。

Journal就是之前使用LogCompilation產(chǎn)生的xml日志。

LNT,全稱是line number table。—目前我還不知道這個是做什么用的,有知道的朋友,請給我留言。

然后就是Inlined into功能了,這個功能要詳細(xì)講一下,因為會影響到程序的執(zhí)行效率。

還記得之前舉的inline的例子嗎?

int a = 1; int b = 2; int result = add(a, b); ... public int add(int x, int y) { return x + y; } int result = a + b; //內(nèi)聯(lián)替換

上面的add方法可以簡單的被替換成為內(nèi)聯(lián)表達(dá)式。

JITWatch可以顯示方法是否被inlined,并且顯示出inlined的原因。

點擊BCI可以顯示關(guān)聯(lián)的inlined的代碼。大家自行體會。

現(xiàn)在再讓我們回到可愛又有風(fēng)格的主頁面:

左邊是源代碼,包含了JDK自己的代碼,如果你想詳細(xì)的分析JDK自己代碼的優(yōu)化,那么這是一個非常好的工具。

右邊顯示的是被JIT編譯的類和方法,并且展示了編譯級別和編譯的時間。

右上角又有一排按鈕,Config是用來配置運行的代碼。

TimeLine是以圖形的形式展示JIT編譯的時間軸。

Histo是直方圖展示的一些編譯信息。

TopList里面是編譯中產(chǎn)生的一些對象的或者數(shù)據(jù)的排序。

Cache是free code cache空間。

NMethod是native方法。

Threads是JIT編譯的線程。

TriView就是我們最開始展示的面板。

最后我們重點講一下Suggestion:

Suggestion是對代碼的一些優(yōu)化建議。

從上圖我們可以看到在調(diào)用String的hashMap方法時候無法inlined,因為被調(diào)用的方法太大了,超出了最大inlining size。

總結(jié)

所以,我們通過JITWatch可以學(xué)到什么呢?最最重要的是我們可以通過JITWatch來分析JIT的運行原理和本質(zhì)。然后inlined的方法不要太大了,否則影響執(zhí)行效率。

本文作者:flydean程序那些事

本文鏈接:http://www.flydean.com/jvm-jit-jitwatch/

本文來源:flydean的博客

歡迎關(guān)注我的公眾號:程序那些事,更多精彩等著您!

總結(jié)

以上是生活随笔為你收集整理的JIT的Profile神器JITWatch的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。