大小:14.68MB更新时间:2022-01-12软件授权:国产软件
VisualVM最新版是一款专业实用的集成了多个jdk命令行的可视化工具,一般都用来对Java应用程序做性能分析和调优,功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和
CPU分析,同时VisualVM还支持在MBeans上进行浏览和操作!
VisualVM功能介绍
一、性能分析的主要方式
1.监视:监视是一种用来查看应用程序运行时行为的一般方法。通常会有多个视图(View)分别实时地显示CPU
使用情况、内存使用情况、线程状态以及其他一些有用的信息,以便用户能很快地发现问题的关键所在。
2.转储:性能分析工具从内存中获得当前状态数据并存储到文件用于静态的性能分析。Java程序是通过在启动Java
程序时添加适当的条件参数来触发转储操作的。它包括以下三种:
系统转储:JVM生成的本地系统的转储,又称作核心转储。一般的,系统转储数据量大,需要平台相关的工具去分析,如Windows上的windbg和
Linux上的gdb.
Java转储:JVM内部生成的格式化后的数据,包括线程信息,类的加载信息以及堆的统计数据。通常也用于检测死锁。
堆转储:JVM将所有对象的堆内容存储到文件。
二、快照:
应用程序启动后,性能分析工具开始收集各种运行时数据,其中一些数据直接显示在监视视图中,而另外大部分数据被保存在内部,直到用户要求获取快照,基于这些保存的数据的统计信息才被显示出来。快照包含了应用程序在一段时间内的执行信息,通常有
CPU快照和内存快照两种类型。
CPU快照:主要包含了应用程序中函数的调用关系及运行时间,这些信息通常可以在CPU快照视图中进行查看。
内存快照:主要包含了内存的分配和使用情况、载入的所有类、存在的对象信息及对象间的引用关系等。这些信息通常可以在内存快照视图中进行查看。
三、性能分析:
性能分析是通过收集程序运行时的执行数据来帮助开发人员定位程序需要被优化的部分,从而提高程序的运行速度或是内存使用效率,主要有以下三个方面:
CPU性能分析:CPU性能分析的主要目的是统计函数的调用情况及执行时间,或者更简单的情况就是统计应用程序的CPU使用情况。通常有CPU
监视和CPU快照两种方式来显示CPU性能分析结果。
内存性能分析:内存性能分析的主要目的是通过统计内存使用情况检测可能存在的内存泄露问题及确定优化内存使用的方向。通常有内存监视和内存快照两种方式来显示内存性能分析结果。
线程性能分析:线程性能分析主要用于在多线程应用程序中确定内存的问题所在。一般包括线程的状态变化情况,死锁情况和某个线程在线程生命期内状态的分布情况等
VisualVM软件特色
1、内存分析
VisualVM通过检测JVM中加载的类和对象信息等帮助我们分析内存使用情况,我们可以通过VisualVM的监视标签和Profiler
标签对应用程序进行内存分析。
2、CPU分析
VisualVM能够监控应用程序在一段时间的CPU的使用情况,显示CPU
的使用率、方法的执行效率和频率等相关数据帮助我们发现应用程序的性能瓶颈。我们可以通过VisualVM的监视标签和Profiler标签对应用程序进行
CPU性能分析。
3、线程分析
Java
语言能够很好的实现多线程应用程序。当我们对一个多线程应用程序进行调试或者开发后期做性能调优的时候,往往需要了解当前程序中所有线程的运行状态,是否有死锁、热锁等情况的发生,从而分析系统可能存在的问题。
4、快照分析
我们可以使用VisualVM
的快照功能生成任意个性能分析快照并保存到本地来辅助我们进行性能分析。快照为捕获应用程序性能分析数据提供了一个很便捷的方式因为快照一旦生成可以在任何时候离线打开和查看,也可以相互传阅。
VisualVM提供了两种类型的快照:
Profiler快照:当有一个性能分析会话(内存或者CPU)正在进行时,我们可以通过性能分析结果工具栏的“快照”按钮生成Profiler
快照捕获当时的性能分析数据。
应用程序快照:我们可以右键点击左侧Applications
窗口中应用程序节点,选择“应用程序快照”为生成一个应用程序快照。应用程序快照会收集某一时刻的堆转储,线程转储和Profiler快照,同时也会捕获JVM
的一些基本信息。
5、转储功能
线程转储的生成与分析:VisualVM
能够对正在运行的本地应用程序生成线程转储,把活动线程的堆栈踪迹打印出来,帮助我们有效了解线程运行的情况,诊断死锁、应用程序瘫痪等问题。
堆转储的生成与分析:VisualVM能够生成堆转储,统计某一特定时刻JVM
中的对象信息,帮助我们分析对象的引用关系、是否有内存泄漏情况的发生等。
VisualVM安装步骤
VisualVM是一个性能分析工具,自从JDK6Update7以后已经作为OracleJDK的一部分,位于JDK根目录的bin
文件夹下。VisualVM自身要在JDK6以上的版本上运行,但是它能够监控JDK1.4以上版本的应用程序。下面主要介绍如何安装VisualVM
以及各种VisualVM上的插件。
一、安装VisualVM
1、将VisualVM安装程序解压缩到本地系统。
2、导航至VisualVM安装目录的bin目录,然后启动jvisualvm.exe。
二、安装VisualVM上的插件
VisualVM插件中心提供很多插件以供安装向VisualVM添加功能。可以通过VisualVM应用程序安装,或者从VisualVM
插件中心手动下载插件,然后离线安装。另外,用户还可以通过下载插件分发文件(.nbm文件)安装第三方插件为VisualVM添加功能。
1、VisualVM插件中心安装插件安装步骤:
从主菜单中选择“工具”“插件”。
在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。
逐步完成插件安装程序。
2、从主菜单中选择“工具”“插件”。
在“已下载”标签中,点击"添加插件"按钮,选择已下载的插件分发文件(.nbm)并打开。
选中打开的插件分发文件,并单击"安装"按钮,逐步完成插件安装程序。
VisualVM更新日志
变化
功能和改进。
GH-260:完全支持在JDK16上运行并监控/描述Java16进程
GH-262:增加对苹果M1的支持
GH-270:从以前的VisualVM版本导入插件
GH-275:增加关于启用模块的信息
GH-279:增加保留尺寸计算的部分进度
GH-254:更新器的品牌效应。
Python的堆栈跟踪
HeapViewer-逻辑值增加了Instant,Attributes$Name,FDBigInteger,
java.lang.module
HeapViewer-java.util类的逻辑值--集合现在显示元素的数量
Gradle的应用识别器
更新了JDK工具的应用识别器
API变更。
GH-282:在org.graalvm.visualvm.lib.jfluid.heap包的公共API中添加泛型。
GH-283:增加了从实例中获取Heap的方法。
修复了Bug。
GH-127:G1GC的最大堆不正确
GH-257:"打开快照失败。"由于没有完全读取压缩数据
GH-263:保留的大小计算为负数
GH-268:检测VisualVM是否在EclipseOpenJ9上运行
GH-272:计算引用时没有进度条
GH-273:NPE:无法调用"java.lang.management.MemoryMXBean.gc()"
GH-274:逻辑值:'...'被添加到完整的字符串中
GH-276:缺少已知的阻塞方法
GH-277:不正确的水平滚动
GH-278:LongBuffer.startReading()处的NPE。
GH-280:在MacOS上选择背景颜色不正确
HeapViewer--PythonModule、SourceImpl$Key、InetSocketAddress、BigDecimal的逻辑值固定。
内存采样器--改进了重载下的刷新功能
改进了对IntelliJ应用程序的检测
华军小编推荐:
VisualVM这款软件完全傻瓜式操作,超级简单,另外小编还推荐{recommendWords}等相关软件下载使用。