zl程序教程

您现在的位置是:首页 >  后端

当前栏目

jdk自带程序监控工具——JVisualVm

2023-09-11 14:22:53 时间

前言
通过我之前的文章《JVM堆内存模型概括》《java垃圾回收机制概括》《JVM怎样判断是垃圾对象进行垃圾回收》《eclipse怎么设置堆内存大小》大家可以大概知道JVM的内存模型、JVM的垃圾回收机制、JVM对垃圾对象的判断方法、以及使用eclipse怎样进行堆内存大小的调整,当我们大概知道这些后就可以自己尝试着写一个小Demo来模拟大量业务对象的生成,然后再对JVM进行调优来实验JVM调优后到底有没有效果,那么我们怎样看有没有效果呢?这里我们就需要用到一个jdk自带的工具了,下面我来讲解一下工具怎么用。
JVisualVm
这个工具叫JVisualVm,我们cmd在命令行直接输入jvisualvm然后回车就可以打开该工具。
在这里插入图片描述
在这里插入图片描述
当弹出该窗口的时候证明成功打开,这个时候我们不要急着看工具里面都有什么功能,这个时候我们先运行一段代码然后通过代码来学习该工具,我们运行如下代码。
在这里插入图片描述
这段代码其实就是用一个while死循环将新new的student对象add到一个List里面,这样的话List相当于GCRoot根节点(在《JVM怎样判断是垃圾对象进行垃圾回收》一文中有讲什么是GCRoot根)这个时候所有new出来的student对象都被List进行add操作了,所以所有的对象都是一直存活对象,这个时候之前的工具我们可以看到多了一个Main方法。
在这里插入图片描述
我们双击打开它然后点击监视可以看到cpu和堆的使用情况
在这里插入图片描述
这个时候我们可以看到堆的大小再一直变大,已使用的堆也在一直变大,之前的《eclipse怎么设置堆内存大小》文章中讲过怎么设置初始堆内存大小和最大堆内存大小,而通过图可以看出随着已使用的堆在变大,整个堆内存也在自动扩容,由于这个程序创建出来的对象都是一直存活的对象,最后肯定会OOM(内存溢出)的,内存溢出后可以看到它会报一些错误信息,这个需要大家自己试验一下这个结果,这里我就不给大家演示了,因为根据电脑内存大小的不同内存溢出所需要的执行次数也不同,本人的电脑内存16G的,大家可以看到大约执行了五千万次while循环,然而黄色那块堆大小扩展到了3.5G,一般堆内存最大值为整个电脑内存的四分之一,也就是堆内存扩展到4G就不能再扩展,就会OOM了,这里由于本人是游戏笔记本,程序运行起来电脑风扇呼呼的响,本人脑瓜子嗡嗡的,当然也很心疼笔记本,大家可以用公司的电脑来进行尝试(这是鄙人不成熟的一个小建议。。。)。
总结
这个JVisualVm工具是jdk自带的,只要电脑安装配置了jdk就可以使用,非常的方便,当我们在自己电脑上运行程序发现特别慢的时候我们可以直接打开JVisualVm来查看堆内存的一个使用情况,当然JVisualVm不止这一个功能,接下来我会讲一下怎么分析dump日志,希望大家多多关注、共同进步。