Java程序性能分析工具Java VisualVM(Visual GC)—程序员必备利器-程序员宅基地

技术标签: java  

VisualVM 是一款免费的\集成了多个JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。

在内存分析上,Java VisualVM的最大好处是可通过安装Visual GC插件来分析GC(Gabage Collection)趋势、内存消耗详细状况。

 

一  Visual GC(监控垃圾回收器)

Java VisualVM默认没有安装Visual GC插件,需要手动安装JDK的安装目录的bin目露下双击jvisualvm.exe,即可打开Java VisualVM,点击菜单栏 工具->插件 安装Visual GC

技术分享

 

 

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

技术分享

 

 

被监控的程序运行一段时间后Visual GC显示如下

技术分享

 

要看懂上面的图必须理解Java虚拟机的一些基本概念:

堆(Heap) :JVM管理的内存叫堆


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

  1. Young(年轻代)
    年轻代分三个区。一个Eden区,两个Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor复制过来的对象。而且,Survivor区总有一个是空的。

  2. Tenured(年老代)
    年老代存放从年轻代存活的对象。一般来说年老代存放的都是生命期较长的对象。

  3. Perm(持久代)
    用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=进行设置。

 

GC的基本概念

gc分为full gc 跟 minor gc,当每一块区满的时候都会引发gc。

  1. Scavenge GC
    一般情况下,当新对象生成,并且在Eden申请空间失败时,就触发了Scavenge GC,堆Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。

  2. Full GC
    对整个堆进行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,因此应该尽可能减少Full GC。有如下原因可能导致Full GC:

  • 上一次GC之后Heap的各域分配策略动态变化

  • System.gc()被显示调用

  • Perm域被写满

  • Tenured被写满

 

内存溢出  out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。

内存泄露  memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。其实说白了就是该内存空间使用完毕之后未回收。

 

 

二 Java VisualVM的其他功能

 

1.监视界面(cpu,类,堆,线程)

技术分享

 

 

2.线程界面

 

技术分享

 

 

3.Profile界面(性能剖析)

点击CPU按钮执行cpu分析查看方法

 

技术分享

 

点击内存按钮执行内存分析查看类

技术分享

 

 

4.堆dump线程dump操作

Dump文件是进程的内存镜像,可以把程序的执行状态通过调试器保存到dump文件中,堆dump的dump文件内容如下图所示

技术分享

 

转载于:https://www.cnblogs.com/linghu-java/p/5689227.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30375247/article/details/96578510

智能推荐

机器学习笔试面试题——day2_影响聚类算法结果的主要因素-程序员宅基地

文章浏览阅读4k次。选择题1、以下不属于影响聚类算法结果的主要因素有()A 已知类别的样本质量B 分类准则C 特征选取D 模式相似性测度聚类不知道类别2、模式识别中,不属于马式距离较之于欧式距离的优点的是( )A 平移不变性B 尺度不变性C 考虑了模式的分布缺点1)马氏距离的计算是建立在总体样本的基础上的,即同样的样本在不同的总体中距离是不一样的2)要求协方差逆矩阵必须存在(总体样..._影响聚类算法结果的主要因素

centos7降低内核版本rpm_kernel-3.10.0-1160.el7.x86_64 回退到kernel-3.10.0-327-程序员宅基地

文章浏览阅读2.3k次。centos7降低内核版本rpm_kernel-3.10.0-1160.el7.x86_64 回退到kernel-3.10.0-327

静态库与DLL-程序员宅基地

文章浏览阅读103次。静态库与DLL的不同之处可执行文件的生成(Link期):前者很慢(因为要将库中的所有符号定义Link到EXE文件中),而后者很快(因为后者被Link的引入库文件无符号定义)可执行文件的大小:前者很大,后者很小(加上DLL的大小就和前者差不多了)可执行文件的运行速度:前者快(直接在EXE模块的内存中查找符号),后者慢(需要在DLL模块的内存中查找,在另一个模块的内存中查找自然较慢)可共享性:前者..._为什么选静态库生成的是dll

nvl函数不生效(bug记录)_nvl函数没用-程序员宅基地

文章浏览阅读197次。nvl(表达式A,表达式B)_nvl函数没用

前端配置环境_vscode已为屏幕阅读器优化-程序员宅基地

文章浏览阅读965次。Sublime配置软件安装点击官网下载插件安装新版的sublime已经默认安装了package control,我们可以通过package control 安装适合自己的插件。如果没有安装package control,直接按command + shift + p 唤出命令列表,(windows用户把command键改为crtl键)输入install,点击install package control,耐心等待安装好package control会有弹框提示。以下三步为安装插件的方法:在s_vscode已为屏幕阅读器优化

快乐学Python,数据分析之使用爬虫获取网页内容_python获取鼠标下网页内容-程序员宅基地

文章浏览阅读1.6k次,点赞32次,收藏19次。造成这个现象的原因是豆瓣电视剧网页中的电视剧列表的部分是动态加载的,所以我们用 urllib3 去直接下载,只能下载到一个壳网页,没有里面的列表内容。对于煎蛋这类普通网页,urllib3 可以表现更好,但是有一种类型的网页,它的数据是动态加载的,就是先出现网页,然后延迟加载的数据,那 urllib3 可能就有点力不从心了。动态网页应该怎么抓取呢?执行上述代码,可以看到打印出了非常多的内容,而且很像我们第一部分手动保存的网页,这说明目前 html_content 变量中保存的就是我们要下载的网页内容。_python获取鼠标下网页内容

随便推点

python自动生成ppt报告_把时间还给洞察,且看PPT调研报告自动生成攻略-程序员宅基地

文章浏览阅读179次。文/JSong @2017.02.28在数据分析里面有一句话是说,80%的时间要用于数据清洗和整理,而我觉得理想的状态应该是把更多的把时间花在数据背后的洞察当中。去年11月在简书占了个坑,说要自己写一个工具来解决,今天我来填坑了。1、解决方案概述项目地址:github,欢迎star 或者folk软件依赖:python3(兼容python2,但中文部分需要手动修改一个第三方包的2行代码)数据需求:..._根据问卷答案 自动生成ppt报告

Matlab与单片机的串口通信_matlab和单片机进行串口通信-程序员宅基地

文章浏览阅读438次。在本文中,我们将探讨如何使用Matlab与单片机进行串口通信。Matlab是一种功能强大的数值计算和数据分析工具,它提供了丰富的串口通信功能,使我们能够轻松地与单片机进行数据交互。通过配置串口参数、打开串口连接、发送和接收数据,我们可以轻松地与单片机进行数据交互。首先,我们需要将USB串口转换器连接到计算机的USB接口上,并将串口转换器的串口连接到单片机开发板上的串口引脚(通常是TX和RX引脚)。这样,我们就成功地完成了Matlab与单片机的串口通信。请根据你的实际情况修改代码中的串口端口号和参数。_matlab和单片机进行串口通信

Java 转换EXCEL Duble格式时间为指定格式日期字符串_java excel 日期double-程序员宅基地

文章浏览阅读1k次。不需要依赖其他工具,实现Excel数字日期转换为指定格式的日期字符串_java excel 日期double

Zookeeper和Redis实现分布式锁,附我的可靠性分析_redis集群分布式锁-程序员宅基地

文章浏览阅读683次,点赞25次,收藏23次。由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档还有更多面试复习笔记分享如下《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!)]还有更多面试复习笔记分享如下[外链图片转存中…(img-VsIdPb6e-1713439894712)]《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!_redis集群分布式锁

mysql:列类型之float、double_mysql float-程序员宅基地

文章浏览阅读1.6w次,点赞4次,收藏20次。环境:window10vs2022.net 6mysql 8.0.25DBeaver参考:《MSDN:浮点数值类型(C# 引用)》《mysql:11.1.4 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE》1. float和double类型在mysql中,float和double都是浮点数类型:float 占4个字节,精度是6位;double 占8个字节,精度是16位;它们的性质和c#中浮点数的性质是一样_mysql float

滚动条滚动异步加载数据_contentdom.clonenode异步问题-程序员宅基地

文章浏览阅读1.3k次。<script type="text/javascript"> //获取列表中的原有内容 var content=document.getElementById("img").innerHTML; function addLi(){ var userid = document.getElementById("use").value; ..._contentdom.clonenode异步问题

推荐文章

热门文章

相关标签