之前看过 jvisualvm,但是那个时候对 JVM 并不是很熟悉,后面看了下八股文,看了下 JVM 的相关知识之后,发现多了解点 JVM 的东西,对我们 CRUD 其实是有指导意义的,就比如我们通常会 new 一堆的没有用到的对象出来,这些其实就是会占用 JVM 内存空间。其实很久之前就玩过了这个 jvisualvm,可惜年少不知 jvisualvm 的好,错把 CRUD 当成宝。
看来有些时候,该看的,改学的,都不能偷懒。废话说了这么多了,那我们开始吧:
老版本
路径
在JDK 对应的 bin 路劲下,存在这个对应的可执行文件,我在 JDK-17 的包下面没有找到(VisualVM: Home 点击这里可以下载,或者看文章后面),然后在 JDK 1.8 的包下面看到了
启动
在 cmd 中 直接执行 jvisualvm.exe 就好,运行完了之后,就可以看到 jvisualvm 的程序界面了:
安装插件
为了方便于我们更加直观的观察 Heap 堆的情况,我们可以来安装一个插件 Visual GC。
在 “工具 -> 插件” 中
找到 “设置 -> 编辑”
一般会报错,因为默认的链接已经给转移了,需要在设置那里把默认的链接更改
修改 URL
那URL填什么呢?先确定一下自己的jdk版本号,然后用以下链接去查看URL
确认版本号,可以菜单键+R,执行cmd,输入java -version来查看自己的版本号,比如我的 jdk8 是 91 的版本
访问网站:VisualVM: Plugins Centers, 找到自己对应的,比如我的就在下面的区间,找到下面的连接地址:
修改完之后:
其实这个时候,已经可以看到可用插件就有 16个了
下载插件
勾选之后,点击安装就搞完了
然后选择一个就对应的进程就可以看到了
高版本
单独下载
访问官网连接 VisualVM: Download,下载最新的就好,下载完了之后,解压
修改配置文件
修改为自己的JDK 路径就好
启动
启动之后的界面
安装插件
采用同样的方式下载就好,不过,最新的不用我们再去找对应的插件地址了:
找到 Visual GC 就好 ,install 就好
监控
准备一段测试代码
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class HeapTest {
public static void main(String[] args) throws InterruptedException {
List list = new ArrayList();
while (true) {
list.add(new HeapTest());
TimeUnit.SECONDS.sleep(3);
}
}
}
然后找到对应的线程ID,进入查看
好了,就到这里吧,后面还有一些性能指标,这个大伙可以去搜索下看看。