下载安装VisualVM
下载地址:Visual VM
mac系统选择macOS Application Bundle,下载完成后,双击dmg包安装即可,之后双击启动。
安装Visual GC 插件
点击菜单栏Tools,选择Pulgins,在第二个选项中找到Visual GC,选中,点击Install,然后一路下一步即可安装成功,如下图
插件界面介绍
安装完插件后重启软件,然后打开idea,之后可以在左边的Local中看到启动的idea应用,双击即可进入监控页面,点击Visual GC可以看到软件运行时的内存变化情况。如下图:
整个界面分为三个区域,分别为:Spaces、Graphs和Histogram。下面为其介绍:
Spaces
上图呈现了程序运行时我们比较关注的几个区域的内存使用情况。
- Metaspace:方法区,如果JDK1.8之前的版本,就是Perm,JDK7和之前的版本都是以永久代(PermGen)来实现方法区的,JDK8之后改用元空间来实现(MetaSpace)。
- Old:老年代
- Eden: 新生代Eden区
- S0和S1:新生代的两个 Survivor 区
Graphs
-
Compile Time:编译情况
11459 compoles - 29.950s
表示编译总数为11459,编译总耗时为29.950s。
一个脉冲表示一次JIT编译,脉冲越宽表示编译时间越长。 -
Class Loader Time:类加载情况
23564 loaded,326 unloaded - 18.490s
表示已加载的数量为23564,卸载的数量为326,耗时为 18.490s。 -
GC Time:总的(包含新生代和老年代)gc情况记录
32 collections,288.879ms Last Cause:Allocation Failure
表示一共经历了32次gc(包含Minor GC和Full GC),总共耗时288.879ms。 -
Eden Space:新生代Eden区内存使用情况
(273.062M,34.125M): 32.796M,32 collections,288.879ms
表示Eden区的最大容量为273.062M,当前容量为34.125M,当前已使用32.796M,从开始监控到现在在该内存区域一共发生了32次gc(Minor GC),gc总耗时为288.879ms。 -
Survivor 0和Survivor 1:新生代的两个Survivor区内存使用情况
(34.125M,4.250M):3.126M
表示该Survivor区的最大容量为34.125M(默认为Eden区的1/8),当前已用3.126M。 -
Old Gen:老年代内存使用情况
(682.688M,218.871M):137.316M,0 collections,0ms
表示老年区的最大容量为682.688M,当前容量为218.871M,当前已用137.316MM,从开始监控到现在在该内存区域一共发生了0次gc(Full GC),gc总耗时为0ms,换算下可以看出单次Full GC要比Minor GC耗时长很多。 -
Metaspace:方法区内存使用情况
(1.41G,145.496M):137.098M
表示方法区最大容量为1.41G,当前容量为145.496M,当前使用量为137.098M。
Histogram
Tenuring Threshold:
我们知道Survivor区中的对象有一套晋升机制,就是其中的每个对象都有一个年龄标记,每当对象在一次Minor GC中存活下来,其年龄就会+1,当对象的年龄大于一个阈值时,就会进入老年代,这个阈值就是Tenuring Threshold,要注意这个值不是固定不变的,一般情况下Tenuring Threshold会与Max Tenuring Threshold大小保持一致,可如果某个时刻Servivor区中相同年龄的所有对象的内存总等于Survivor空间的一半,那Tenuring Threshold就会等于该年龄,同时大于或等于该年龄的所有对象将进入老年代。Max Tenuring Threshold:
表示新生代中对象的最大年龄值,这个值在JDK1.8中默认为6,在JDK1.7及之前的版本中默认为15,可以通过参数-XX:MaxTenuringThreshold
来指定。Desired Survivor Size:
Survivor空间大小验证阈值(默认是survivor空间的一半),用于给Tenuring Threshold判断对象是否提前进入老年代。Current Survivor Size:
当前Survivor空间大小,单位为字节(Byte,B)。Histogram柱状图:
表示Survivor中不同年龄段对象分布.
本文摘录自(简书: 链接: Visual GC 插件使用)