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

简介: 通过学习,我们可以大概知道JVM的内存模型、JVM的垃圾回收机制、JVM对垃圾对象的判断方法、以及使用eclipse怎样进行堆内存大小的调整,当我们大概知道这些后就可以自己尝试着写一个小Demo来模拟大量业务对象的生成,然后再对JVM进行调优来实验JVM调优后到底有没有效果,那么我们怎样看有没有效果呢?这里我们就需要用到一个jdk自带的工具了,下面我来讲解一下工具怎么用。

前言



通过我之前的文章《JVM堆内存模型概括》、《java垃圾回收机制概括》、《JVM怎样判断是垃圾对象进行垃圾回收》、《eclipse怎么设置堆内存大小》大家可以大概知道JVM的内存模型、JVM的垃圾回收机制、JVM对垃圾对象的判断方法、以及使用eclipse怎样进行堆内存大小的调整,当我们大概知道这些后就可以自己尝试着写一个小Demo来模拟大量业务对象的生成,然后再对JVM进行调优来实验JVM调优后到底有没有效果,那么我们怎样看有没有效果呢?这里我们就需要用到一个jdk自带的工具了,下面我来讲解一下工具怎么用。


JVisualVm


这个工具叫JVisualVm,我们cmd在命令行直接输入jvisualvm然后回车就可以打开该工具。


24.png


25.png


当弹出该窗口的时候证明成功打开,这个时候我们不要急着看工具里面都有什么功能,这个时候我们先运行一段代码然后通过代码来学习该工具,我们运行如下代码。


26.png


这段代码其实就是用一个while死循环将新new的student对象add到一个List里面,这样的话List相当于GCRoot根节点(在《JVM怎样判断是垃圾对象进行垃圾回收》一文中有讲什么是GCRoot根)这个时候所有new出来的student对象都被List进行add操作了,所以所有的对象都是一直存活对象,这个时候之前的工具我们可以看到多了一个Main方法。


27.png


我们双击打开它然后点击监视可以看到cpu和堆的使用情况


28.png


这个时候我们可以看到堆的大小再一直变大,已使用的堆也在一直变大,之前的《eclipse怎么设置堆内存大小》文章中讲过怎么设置初始堆内存大小和最大堆内存大小,而通过图可以看出随着已使用的堆在变大,整个堆内存也在自动扩容,由于这个程序创建出来的对象都是一直存活的对象,最后肯定会OOM(内存溢出)的,内存溢出后可以看到它会报一些错误信息,这个需要大家自己试验一下这个结果,这里我就不给大家演示了,因为根据电脑内存大小的不同内存溢出所需要的执行次数也不同,本人的电脑内存16G的,大家可以看到大约执行了五千万次while循环,然而黄色那块堆大小扩展到了3.5G,一般堆内存最大值为整个电脑内存的四分之一,也就是堆内存扩展到4G就不能再扩展,就会OOM了,这里由于本人是游戏笔记本,程序运行起来电脑风扇呼呼的响,本人脑瓜子嗡嗡的,当然也很心疼笔记本,大家可以用公司的电脑来进行尝试(这是鄙人不成熟的一个小建议。。。。)


总结



这个JVisualVm工具是jdk自带的,只要电脑安装配置了jdk就可以使用,非常的方便,当我们在自己电脑上运行程序发现特别慢的时候我们可以直接打开JVisualVm来查看堆内存的一个使用情况,当然JVisualVm不止这一个功能,接下来我会讲一下怎么分析dump日志,希望大家多多关注、共同进步。


相关文章
|
监控 Java 应用服务中间件
jdk自带监控程序-jvisualvm使用介绍
jdk自带监控程序-jvisualvm使用介绍
398 0
|
1月前
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
|
28天前
|
Oracle Java 关系型数据库
简单记录在Linux上安装JDK环境的步骤,以及解决运行Java程序时出现Error Could not find or load main class XXX问题
本文记录了在Linux系统上安装JDK环境的步骤,并提供了解决运行Java程序时出现的"Error Could not find or load main class XXX"问题的方案,主要是通过重新配置和刷新JDK环境变量来解决。
62 0
|
3月前
|
前端开发 Java 应用服务中间件
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
|
2月前
|
Java 应用服务中间件 Linux
Tomcat安装部署[单机软件],可以让用户开发的WEB应用程序,变成可以被访问的网页,Tomcat的使用需要jdk环境
Tomcat安装部署[单机软件],可以让用户开发的WEB应用程序,变成可以被访问的网页,Tomcat的使用需要jdk环境
|
3月前
|
Oracle Java 关系型数据库
Java入门——开发环境、入门程序(搭建Java开发环境、安装JDK 验证、JDK、编写代码、编译代码、运行代码)
Java入门——开发环境、入门程序(搭建Java开发环境、安装JDK 验证、JDK、编写代码、编译代码、运行代码)
49 3
|
4月前
|
小程序 Java 程序员
【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系
【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系
58 0
|
4月前
|
Java
[Java]轻松掌握JDK和CGlib代理的使用技巧,让你的Java程序性能更卓越!
[Java]轻松掌握JDK和CGlib代理的使用技巧,让你的Java程序性能更卓越!
|
9月前
|
Java 应用服务中间件 Linux
linux安装jdk1.8 +nginx +springboot 实现通过nginx80转发8888端口访问springboot程序
linux安装jdk1.8 +nginx +springboot 实现通过nginx80转发8888端口访问springboot程序
151 0
编写程序将“jdk”全部变为大写并输出到屏幕,截取子串“DK”并输出到屏幕。
编写程序将“jdk”全部变为大写并输出到屏幕,截取子串“DK”并输出到屏幕。
210 0