JVisualVM的使用教程
一、前言
JVisualVM是一個(gè)Java虛擬機(jī)的監(jiān)控工具,要是需要對(duì)JVM的性能進(jìn)行監(jiān)控可以使用這個(gè)工具哦
使用這個(gè)工具,你就可以監(jiān)控到j(luò)ava虛擬機(jī)的gc過程了
那么,這么強(qiáng)大的工具怎么下載呢?
在JDK1.6后的版本是自帶這個(gè)工具,它就在你的jdk的bin目錄上
如果是默認(rèn)安裝的JDK,一般就在C盤,Program Files的java目錄,就會(huì)看到你的jdk版本,點(diǎn)進(jìn)去之后打開bin這個(gè)文件夾,就可以看到這個(gè)軟件了
二、啟動(dòng)JVisualVM
啟動(dòng)方法:
1.進(jìn)入jdk安裝目錄的bin目錄,雙擊打開這個(gè)程序
2.菜單鍵+R,輸入cmd進(jìn)入命令行模式,輸入命令jvisualvm 啟動(dòng)程序。注:要是使用命令行啟動(dòng)的軟件,命令框可不能關(guān)閉哦,關(guān)閉了的話JVisualVM也會(huì)被關(guān)閉,切記切記!!!
啟動(dòng)程序之后進(jìn)入這個(gè)界面,這個(gè)就是JVisualVM的使用界面了
三、安裝插件
使用之前,我們需要安裝一個(gè)插件,來更好的來觀察虛擬機(jī)的性能,點(diǎn)擊上方的工具-插件
在可用插件那里選擇下載,安裝一個(gè)VIsual GC的插件
一般會(huì)報(bào)錯(cuò),因?yàn)槟J(rèn)的鏈接已經(jīng)給轉(zhuǎn)移了,需要在設(shè)置那里把默認(rèn)的鏈接更改
點(diǎn)擊設(shè)置,編輯,把URL更改一下
那URL填什么呢?先確定一下自己的jdk版本號(hào),然后用以下鏈接去查看URL
確認(rèn)版本號(hào),可以菜單鍵+R,執(zhí)行cmd,輸入java -version來查看自己的版本號(hào)
比如我的是201
那就在這個(gè)網(wǎng)站:https://visualvm.github.io/pluginscenters.html
找到自己版本號(hào)的地址,復(fù)制URL到設(shè)置那里
比如我的是JDK8的201,所以應(yīng)該是131-291之間,所以我就復(fù)制下面那行藍(lán)色的URL到設(shè)置的定制器中
然后就可以下載想要的插件啦
然后重啟一下即可看到有visual GC這個(gè)選項(xiàng)了
四、使用
那我先執(zhí)行一個(gè)不停止的程序
結(jié)果是不停的輸出1,這是個(gè)死循環(huán),我們?cè)倩厝タ纯碐C
第一次觀察
幾秒鐘后觀察
我把這個(gè)程序停止掉之后,最后進(jìn)行觀察,左邊的test這個(gè)java程序就不見了,右邊的GC也就停了下來
那現(xiàn)在就開始分析一下這幾個(gè)過程,就看最后關(guān)掉之后的那個(gè)狀態(tài),可以看到GC time是指發(fā)生了多少次的GC,圖中就是發(fā)生了233次GC,就花了276.256ms的時(shí)間,而下一行的Eden區(qū),也是發(fā)生了223次GC,花費(fèi)的時(shí)間也是276.256ms,很顯然,發(fā)生的GC都是在Eden區(qū),Old老年代區(qū)發(fā)生了0次GC,花費(fèi)0s。
這只是個(gè)普通的死循環(huán),工作量并不大,所以占用不了多少內(nèi)存空間,根本就不會(huì)發(fā)生多少次GC,也根本不需要老年代區(qū)GC
而右邊的進(jìn)度圖,就是說明內(nèi)存使用的情況,當(dāng)圖中的色塊達(dá)到頂端的時(shí)候,就是內(nèi)存滿的時(shí)候,這時(shí)候就需要進(jìn)行一次GC,把內(nèi)存占用推送到下一個(gè)區(qū),滿一次清理一次就GC一次
除了可以檢測(cè)java虛擬機(jī)的垃圾回收,還可以監(jiān)視一下該java程序CPU的占用情況,線程等等。
當(dāng)我們開發(fā)其他程序的時(shí)候,可能需要對(duì)程序做優(yōu)化,就要結(jié)合這些指標(biāo)來進(jìn)行分析,確定優(yōu)化的方法。比如說CPU使用率一直只有很低,那就說明CPU可以利用的內(nèi)存比較大,可以適當(dāng)降低其他的消耗,提升CPU損耗來提升效率等等
當(dāng)然,除了我提及的各種性能監(jiān)控和GC過程的查看,還有其他的功能可以使用,比如性能風(fēng)險(xiǎn),觀察各進(jìn)程的運(yùn)行情況等等
最后,可能會(huì)有小伙伴會(huì)問,如果執(zhí)行的程序不是死循環(huán),而是一個(gè)普通的輸出呢。如果執(zhí)行的是那種執(zhí)行完畢就會(huì)停止的,比如我這里把循環(huán)條件去掉,使程序只執(zhí)行一次后停止
點(diǎn)擊運(yùn)行之后返回JVisualVM來查看結(jié)果,但JVisualVM并沒有顯示這個(gè)java進(jìn)程,或者是一閃而過。這是因?yàn)镴VisualVM只能實(shí)時(shí)監(jiān)控到執(zhí)行中的java程序,因?yàn)楦膭?dòng)過的程序執(zhí)行了輸出之后就結(jié)束了,所以JVisualVM根本沒辦法去監(jiān)控程序的狀態(tài),前面停止之后還能看到,是因?yàn)槟阋呀?jīng)在停止之前打開了這個(gè)程序的監(jiān)控,在點(diǎn)了停止之后,顯示的是停止之前最后一刻的狀態(tài)
今天的分享就到此結(jié)束了,感覺自己又向前邁了一小步,喜歡本文章的小伙伴可以點(diǎn)個(gè)贊或者留個(gè)評(píng)論支持一下哦
總結(jié)
以上是生活随笔為你收集整理的JVisualVM的使用教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【eoe特刊】第二十七期 OpenGL
- 下一篇: 偷梁换柱做自己的封装系统