> 文章列表 > JVisualVM、Visual GC

JVisualVM、Visual GC

JVisualVM、Visual GC

JVisualVM

JVisualVM

Java VisualVM 是一款 JDK 自带免费的性能分析工具

public class JVisualVM {public static void main(String[] args) {Thread t1 = new Thread(() -> {while (!Thread.currentThread().isInterrupted()) {}}, "JVisualVM测试子线程");t1.start();}
}

main方法启动后就能在java- VisualVm界面左侧找到了

在cmd等命令工具输入jvisualvm命令启动 Java VisualVM


监视页面

监视页面主要展示系统资源占用情况。

该页面有2个可点按钮

  •   执行垃圾回收 -- 手动触发一次GC 相当于在程序代码中调用(System.gc()),如果是远程连接到生产环境中请慎重点击。
  •   堆Dump -- 生产当前程序的内存快照hprof文件,对于分析内存溢出问题比较有帮助。(可以查看当前程序内存中的所有对象)

CPU -- 展示java程序运行的时候占用的cpu资源

 堆 -- 这里要说明下堆内存的组成部分

  类 -- 此视图 主要展示 当前程序加载了多少个类

  线程 -- 当前程序的线程启动情况


线程页面

展示程序中所有的线程运行状态

 线程dump – 此按钮主要生产当前程序中所有线程的快照(对分析线程死锁,比较有帮助)

 时间线 – 展示每个线程的实时运行状态(不同颜色代表不同的状态)


抽样器

是线程页面功能的一个补充

内存-> 每个线程分配—展示不同线程占用内存的情况


Visual GC

Visual GC 插件提供了可视化的图形界面,更加利于调优分析。

Visual GC插件安装

查看自己的jdk版本

如上图,我的就是51

1、打开visualvm官方插件网址:VisualVM: Plugins Centers

2、选择适合自己安装的jdk版本对应的Java VisualVM,点击相应蓝色链接:

例如我的jdk版本是:jdk1.8.0_51,其中51在40-121之间,并且我的是jdk8版本,所以我选择JDK 8 Update 40-121,点击对应蓝色链接即可

3、点击链接进入之后,复制Catalog URL后面的网址:

jvisualvm.exe打开的界面中,安装Visual GC

点击菜单栏 工具->插件->设置->编辑  刚才复制的URL替换红色框里的url,然后点击确定

-----------------------------------

在插件中点击可用插件,选中你要安装的插件,点击安装:

等一下就会在已安装目录看到了

-----------------------------------------------

安装完成后重启Java VisualVM,Visual GC界面自动打开,即可看到JVM中堆内存的分代情况


Spaces部分

各个分代 的内存使用情况

分代:根据对象的生命周期长短,把堆分为3个代:Young,Old和Permanent,根据不同代的特点采用不同的收集算法,扬长避短


Graphs部分

compile time  JIT 编译时间
图上标题说明: 6451次编译,使用 18.068 秒

class Loader Time 类加载时间 

图上标题明说:6373个已经加载 0 未加载,使用 4.911秒

GC Time  gc 时间 

图上标题说明:17次执行 gc ,共使用了 229.409毫秒 。最近一次 gc 的原因

Eden Space 年轻代内存说明
最大 84M ,实际分配内存:61M ,当前使用了 27.092M  , 15 次 的 GC 共使用了 125.394毫秒

Surivor 存活区内存说明
最大内存 28M 实际分配 7.5M 当前使用了 5.094M

old gen 老年代说明
最大内存 171M 实际分配了 41M ,当前使用 27.476M , 2次的 GC ,共使用了104.015毫秒

metaspace 元空间
最大内存 1.029G 实际分配了 41.25M ,当前使用了 38.603M