定义
JVisualVM 是一个图形化的 Java 虚拟机监控与故障处理工具,其全称为 Java VisualVM,名称中的 visual 来自它以可视化方式呈现 JVM 运行信息这一特点[3]。它面向的是运行在指定 Java 虚拟机上的 Java 应用,开发者可以借此查看应用在运行期间的详细状态[4]。
在工具定位上,它被设计成一个多合一(multi-in-one)的故障排查程序,把监控、故障排查和性能剖析三类能力合并到同一个程序中[1]。它同时属于 JDK 附带的一批用于获取运行中 JVM 实例数据的可选工具之一[4]。
原理
JVisualVM 的数据来源是多条技术路径的组合。对于本机或远程的 Java 进程,它会自动识别并连接目标应用暴露的 JMX(Java Management Extensions)代理,通过 JMX 的 MBean 收集内存、线程、类加载、垃圾回收等指标,并把这些数据以图形方式重新组织后展示[3]。若无法自动发现 JMX 代理,工具也允许手工建立连接[3]。
在功能整合层面,它把 jmap、jinfo、jstat、jstack 等原先独立命令的大部分能力收进同一个界面,再统一呈现[1]。采样式的性能剖析则通过定期抓取线程堆栈来统计各方法的出现频次,从而判断哪段代码占用 CPU 较多[5]。
远程连接依赖特定的支撑机制。工具要发现并连接远程机器上的 JMX 代理,要求该远程主机上运行 jstatd 守护进程[3]。堆转储的生成可以设置为在应用抛出 OutOfMemoryError 异常时自动触发,也可以在界面中手动创建[3]。
发展历程
Java VisualVM 最早随 Java 平台标准版进入 JDK,具体版本是 JDK 6 Update 7[4]。它的 1.0 正式版本于 2008 年发布,当时对 JDK 6.0 的支持最为完善[6]。在相当长一段时间里,它由 Oracle 作为官方主力推动的虚拟机故障处理工具随 JDK 一起分发[7]。
这一捆绑方式在 JDK 9 发生改变。据 OpenJDK 的发布说明,自 JDK 9 起 jvisualvm 不再包含在 Oracle JDK 中,用户需从该项目官网另行获取[2]。Oracle 官方文档亦说明,自 JDK 8u361 起 Java VisualVM 不再作为 Java SE 8 的组成部分提供[4]。此后该工具以 VisualVM 之名成为独立发展的开源项目[8]。
独立发布后版本更新按自己的节奏推进。2025 年 4 月 22 日发布的 VisualVM 2.2 增加了对 JDK 24 的支持、虚拟线程指标以及 Jolokia 连接插件[9]。该版本要求的运行环境包括 Oracle JDK 8 至 24、OpenJDK 8 至 24 以及 GraalVM 19 至 GraalVM for JDK 24[9]。
应用
该工具的主要用途是帮助 Java 应用开发人员排查应用故障,并监控和改善应用的性能[4]。它能列出本机与远程的 Java 应用,并显示每个应用的进程号、主机、主类、启动参数、JVM 版本、JDK 安装目录、JVM 标志与系统属性等基本信息[3]。
在运行时诊断方面,它可以监控应用的内存消耗、活动线程与已加载类数量,并支持立即触发一次垃圾回收[3]。堆转储可按概要、按类、按实例等不同视图查看,也可保存到本地文件系统,用于离线分析[3]。此外,工具支持创建线程转储以获得活动线程的堆栈跟踪,并能在 Oracle Solaris 与 Linux 系统上分析核心转储[3]。
功能可以通过插件扩展。用户可在工具的插件目录中选择标准插件,例如安装 MBeans 标签页与 JConsole 插件包装器后,即可获得 JConsole 的大部分功能[1]。开发者也可以自行编写插件并发布到工具内置的更新中心[10]。离线分析则借助应用快照实现,快照可记录运行时的配置、线程转储与内存转储等信息[3]。
局限
该工具的能力在若干方面受到限制。就地内存分配剖析等部分剖析功能只对本地应用开放,远程应用无法使用[3]。核心转储分析则只在 Oracle Solaris 与 Linux 操作系统上提供,其他平台不支持[3]。
其性能剖析被官方描述为轻量级的内存与 CPU 剖析[1]。采样间隔设置得越小结果越精确,但对被分析应用带来的性能开销也越大,因此通常建议沿用默认间隔[5]。工具本身只能定位问题所在,并不能替代对内存模型与垃圾回收机制等底层知识的理解来解决问题[5]。
分发方式的变化也构成了使用上的门槛。由于不再随 JDK 捆绑,使用者需要自行获取并安装该工具,同时还要关注它与目标 JDK 版本之间的兼容范围[2]。在远程监控场景下,还需要在目标主机上预先启动 jstatd 守护进程或配置 JMX 参数,才能建立连接[3]。
参见
参考资料
- jvisualvm [引用日期2026-10-14]
- [JDK-8180002] Release Note: Visual VM removed in JDK 9 [引用日期2026-10-14]
- tooldescr010 [引用日期2026-10-14]
- Java VisualVM [引用日期2026-10-14]
- 吃透 JVisualVM 与 JConsole:Java 性能调优实战指南 [引用日期2026-10-14]
- jvisualvm.exe [引用日期2026-10-14]
- 带你了解可视化JVM 故障处理工具 [引用日期2026-10-14]
- VisualVM: Upgrading Java VisualVM [引用日期2026-10-14]
- VisualVM: 2.2 Release Notes [引用日期2026-10-14]
- Java VisualVM [引用日期2026-10-14]