Visual GC 插件使用

下載安裝

首先要下載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)存變化情況

下面對上圖中的各個(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)

下面從上往下對上圖中的各個(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窗口是對當(dāng)前正在被使用的Survivor區(qū)內(nèi)存使用情況的詳細(xì)描述,如下

  • Tenuring Threshold:我們知道Survivor區(qū)中的對象有一套晉升機(jī)制,就是其中的每個(gè)對象都有一個(gè)年齡標(biāo)記,每當(dāng)對象在一次Minor GC中存活下來,其年齡就會(huì)+1,當(dāng)對象的年齡大于一個(gè)閾值時(shí),就會(huì)進(jìn)入老年代,這個(gè)閾值就是Tenuring Threshold,要注意這個(gè)值不是固定不變的,一般情況下Tenuring Threshold會(huì)與Max Tenuring Threshold大小保持一致,可如果某個(gè)時(shí)刻Servivor區(qū)中相同年齡的所有對象的內(nèi)存總等于Survivor空間的一半,那Tenuring Threshold就會(huì)等于該年齡,同時(shí)大于或等于該年齡的所有對象將進(jìn)入老年代。

  • Max Tenuring Threshold:表示新生代中對象的最大年齡值,這個(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判斷對象是否提前進(jìn)入老年代。

  • Current Survivor Size:當(dāng)前Survivor空間大小,單位為字節(jié)(Byte,B)。

  • Histogram柱狀圖:表示Survivor中不同年齡段對象分布。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容