Visual GC是一個(gè)Java 內(nèi)存使用分析與GC收集的可視化工具插件
工具GC使用說(shuō)明:

一:整個(gè)區(qū)域分為三部分:spaces、graphs、histogram
1,spaces區(qū)域:代表虛擬機(jī)內(nèi)存分布情況。從圖中可以看出,虛擬機(jī)被分為Perm、Old、Eden、S0、S1
注意:如果對(duì)每個(gè)區(qū)域基本概念不是很熟悉的可以先了解下java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)這篇文字。
? 1.1)perm:英文叫做Permanent Generation,我們稱之為永久代。(根據(jù)深入。
? 1.1.1)通過(guò)VM Args:-XX:PermSize=128m -XX:MaxPermSize=256m 設(shè)置初始值與最大值
1.2)heap:java堆(Java heap)。它包括老年代(圖中Old區(qū)域)和新生代(圖中Eden/S0/S1三個(gè)統(tǒng)稱新生代,分為Eden區(qū)和兩個(gè)Survivor區(qū)域),他們默認(rèn)是8:1分配內(nèi)存
? 1.2.1)通過(guò)VM Args:-xms512m -Xmx512m -XX:+HeapDumpOnOutofMemoryError -Xmn100m -XX:SurvivorRatio=8 設(shè)置初始堆內(nèi)存、最大堆內(nèi)存、內(nèi)存異常打印dump、新生代內(nèi)存、新生代內(nèi)存分配比例(8:1:1),因?yàn)镠eap分為新生代跟老年代,所以512M-100M=412M,老年代就是412M(初始內(nèi)存跟最大內(nèi)存最好相等,防止內(nèi)存不夠時(shí)擴(kuò)充內(nèi)存或者Full GC,導(dǎo)致性能降低)
2,Graphs區(qū)域:內(nèi)存使用詳細(xì)介紹
? ? ? 2.1)Compile Time(編譯時(shí)間):6368compiles 表示編譯總數(shù),4.407s表示編譯累計(jì)時(shí)間。一個(gè)脈沖表示一次JIT編譯,窄脈沖表示持續(xù)時(shí)間短,寬脈沖表示持續(xù)時(shí)間長(zhǎng)。
? ? ? 2.2)Class Loader Time(類(lèi)加載時(shí)間): 20869loaded表示加載類(lèi)數(shù)量, 139 unloaded表示卸載的類(lèi)數(shù)量,40.630s表示類(lèi)加載花費(fèi)的時(shí)間
? ? ? 2.3)GC Time(GC Time):2392collections表示垃圾收集的總次數(shù),37.454s表示垃圾收集花費(fèi)的時(shí)間,last cause表示最近垃圾收集的原因
? ? ? 2.4)Eden Space(Eden 區(qū)):括號(hào)內(nèi)的31.500M表示最大容量,9.750M表示當(dāng)前容量,后面的4.362M表示當(dāng)前使用情況,2313collections表示垃圾收集次數(shù),8.458s表示垃圾收集花費(fèi)時(shí)間
? ? 2.5)Survivor 0/Survivor 1(S0和S1區(qū)):括號(hào)內(nèi)的3.938M表示最大容量,1.188M表示當(dāng)前容量,之后的值是當(dāng)前使用情況
? ? 2.6)Old Gen(老年代):括號(hào)內(nèi)的472.625M表示最大容量,145.031M表示當(dāng)前容量,之后的87.031表示當(dāng)前使用情況,79collections表示垃圾收集次數(shù) ,28.996s表示垃圾收集花費(fèi)時(shí)間
? ? 2.7)Perm Gen(永久代):括號(hào)內(nèi)的256.000M表示最大容量,105.250M表示當(dāng)前容量,之后的105.032M表示當(dāng)前使用情況
3,Histogram區(qū)域:survivor區(qū)域參數(shù)跟年齡柱狀圖
3.1)Tenuring Threshold:表示新生代年齡大于當(dāng)前值則進(jìn)入老年代
? ? 3.2)Max Tenuring Threshold:表示新生代最大年齡值。
3.3)Tenuring Threshold與Max Tenuring Threshold區(qū)別:Max Tenuring Threshold是一個(gè)最大限定,所有的新生代年齡都不能超過(guò)當(dāng)前值,而Tenuring Threshold是個(gè)動(dòng)態(tài)計(jì)算出來(lái)的臨時(shí)值,一般情況與Max Tenuring Threshold相等,如果在Suivivor空間中,相同年齡所有對(duì)象大小的總和大于Survivor空間的一半,則年齡大于或者等于該年齡的對(duì)象就都可以直接進(jìn)入老年代(如果計(jì)算出來(lái)年齡段是5,則Tenuring Threshold=5,age>=5的Suivivor對(duì)象都符合要求),它才是新生代是否進(jìn)入老年代判斷的依據(jù)。
3.4)Desired Survivor Size:Survivor空間大小驗(yàn)證闕值(默認(rèn)是survivor空間的一半),用于Tenuring Threshold判斷對(duì)象是否提前進(jìn)入老年代。
? ? ? 3.5)Current Survivor Size:當(dāng)前survivor空間大小
? ? ? 3.6)histogram柱狀圖:表示年齡段對(duì)象的存儲(chǔ)柱狀圖
? ? ? 3.7)如果顯示指定-XX:+UseParallelGC --新生代并行、老年代串行收集器 ,則histogram柱狀圖不支持當(dāng)前收集器