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