下載安裝
首先要下載VisualVM
下載地址:https://visualvm.github.io/download.html
不下載也可以熊榛,jdk本身自帶了,crm命令行執(zhí)行命令jvisualvm
。
如果是mac系統(tǒng)就下載下面的萍虽,下載完成后將壓縮包解壓到本地目錄盯孙,無需安裝姆吭,找到bin目錄下的visualvm.exe雙擊即可啟動(dòng)。
然后安裝Visual GC 插件
點(diǎn)擊菜單Tools券勺,選擇Pulgins,在第二個(gè)選項(xiàng)中找到Visual GC灿里,選中关炼,點(diǎn)擊Install,然后一路下一步即可安裝成功匣吊,如下圖
插件界面介紹
安裝完插件后重啟軟件儒拂,讓后打開idea,隨后便可以在左邊了Local中看到啟動(dòng)的idea應(yīng)用色鸳,雙擊即可進(jìn)入監(jiān)控頁面社痛,如下圖:
右邊就是Visual GC 插件的主要界面了,我們可以看到軟件運(yùn)行時(shí)的內(nèi)存變化情況
下面對(duì)上圖中的各個(gè)窗口區(qū)域做簡單介紹命雀,整個(gè)界面分為三個(gè)區(qū)域蒜哀,分別為:Spaces、Graphs和Histogram咏雌。
Spaces窗口:
上圖是呈現(xiàn)了程序運(yùn)行時(shí)我們比較關(guān)注的幾個(gè)區(qū)域的內(nèi)存使用情況
- Metaspace:方法區(qū)凡怎,如果JDK1.8之前的版本,就是Perm赊抖,JDK7和之前的版本都是以永久代(PermGen)來實(shí)現(xiàn)方法區(qū)的统倒,JDK8之后改用元空間來實(shí)現(xiàn)(MetaSpace)。
- Old:老年代
- Eden: 新生代Eden區(qū)
- S0和S1:新生代的兩個(gè) Survivor 區(qū)
Graphs窗口:
該窗口區(qū)域包含8個(gè)圖標(biāo)氛雪,以時(shí)間為橫坐標(biāo)動(dòng)態(tài)展示各個(gè)指標(biāo)的運(yùn)行狀態(tài)
下面從上往下對(duì)上圖中的各個(gè)圖標(biāo)表及其狀態(tài)進(jìn)行說明
Compile Time:編譯情況
24266 compoles - 39.416s
表示編譯總數(shù)為24266房匆,編譯總耗時(shí)為39.416s。
一個(gè)脈沖表示一次JIT編譯,脈沖越寬表示編譯時(shí)間越長浴鸿。Class Loader Time:類加載情況
49052 loaded井氢,39 unloaded - 29.937s
表示已加載的數(shù)量為49052,卸載的數(shù)量為39岳链,耗時(shí)為29.537s花竞。GC Time:總的(包含新生代和老年代)gc情況記錄
123 collections,859.203ms Last Cause:Allocation Failure
表示一共經(jīng)歷了123次gc(包含Minor GC和Full GC)掸哑,總共耗時(shí)859.203ms约急。Eden Space:新生代Eden區(qū)內(nèi)存使用情況
(200.00M,34.125M): 31.52M苗分,109 collections厌蔽,612.827ms
表示Eden區(qū)的最大容量為200M,當(dāng)前容量為34.125M摔癣,當(dāng)前已使用31.52M奴饮,從開始監(jiān)控到現(xiàn)在在該內(nèi)存區(qū)域一共發(fā)生了109次gc(Minor GC),gc總耗時(shí)為612.827ms择浊。Survivor 0和Survivor 1:新生代的兩個(gè)Survivor區(qū)內(nèi)存使用情況
(25.000M戴卜,4.250M):1.757M
表示該Survivor區(qū)的最大容量為25M(默認(rèn)為Eden區(qū)的1/8),當(dāng)前已用1.757M近她。Old Gen:老年代內(nèi)存使用情況
(500.000M,255.195M):206.660M,14 collections叉瘩,246.375ms
表示老年區(qū)的最大容量為500M,當(dāng)前容量為255.195M粘捎,當(dāng)前已用206.660M薇缅,從開始監(jiān)控到現(xiàn)在在該內(nèi)存區(qū)域一共發(fā)生了14次gc(Full GC),gc總耗時(shí)為246.375ms攒磨,換算下可以看出單次Full GC要比Minor GC耗時(shí)長很多泳桦。
-
Metaspace:方法區(qū)內(nèi)存使用情況
(1.053G,278.250M):262.345M
表示方法區(qū)最大容量為1.053G,當(dāng)前容量為278.250M,當(dāng)前使用量為262.345MM。
Histogram窗口:
Histogram窗口是對(duì)當(dāng)前正在被使用的Survivor區(qū)內(nèi)存使用情況的詳細(xì)描述娩缰,如下
Tenuring Threshold:我們知道Survivor區(qū)中的對(duì)象有一套晉升機(jī)制灸撰,就是其中的每個(gè)對(duì)象都有一個(gè)年齡標(biāo)記,每當(dāng)對(duì)象在一次Minor GC中存活下來拼坎,其年齡就會(huì)+1浮毯,當(dāng)對(duì)象的年齡大于一個(gè)閾值時(shí),就會(huì)進(jìn)入老年代泰鸡,這個(gè)閾值就是Tenuring Threshold债蓝,要注意這個(gè)值不是固定不變的,一般情況下Tenuring Threshold會(huì)與Max Tenuring Threshold大小保持一致盛龄,可如果某個(gè)時(shí)刻Servivor區(qū)中相同年齡的所有對(duì)象的內(nèi)存總等于Survivor空間的一半饰迹,那Tenuring Threshold就會(huì)等于該年齡芳誓,同時(shí)大于或等于該年齡的所有對(duì)象將進(jìn)入老年代。
Max Tenuring Threshold:表示新生代中對(duì)象的最大年齡值啊鸭,這個(gè)值在JDK1.8中默認(rèn)為6锹淌,在JDK1.7及之前的版本中默認(rèn)為15,可以通過參數(shù)
-XX:MaxTenuringThreshold
來指定赠制。Desired Survivor Size:Survivor空間大小驗(yàn)證閾值(默認(rèn)是survivor空間的一半)赂摆,用于給Tenuring Threshold判斷對(duì)象是否提前進(jìn)入老年代。
Current Survivor Size:當(dāng)前Survivor空間大小钟些,單位為字節(jié)(Byte库正,B)。
Histogram柱狀圖:表示Survivor中不同年齡段對(duì)象分布厘唾。