VisualVM 是 JDK 自带的轻量级 JVM 监控工具,支持本地/远程实时监控内存、CPU 及堆快照分析,无需重启应用;通过趋势观察、堆 Dump 和 CPU 采样实现从宏观到微观的问题定位。

VisualVM 是 JDK 自带的轻量级可视化监控工具,无需额外安装,启动后即可对运行中的 JVM 实时追踪内存与 CPU 消耗,整个过程无需重启应用、侵入性极低。
连接并实时监视 JVM 进程
在命令行执行 jvisualvm 启动工具,左侧“本地”节点下会自动列出当前机器所有 Java 进程。双击目标进程即可进入主监控页。若需监控远程 JVM,须提前在目标 JVM 启动参数中添加 JMX 配置(如 -Dcom.sun.management.jmxremote 等),并在 VisualVM 中通过“文件 → 添加 JMX 连接”输入地址和端口。
动态观察内存使用趋势
切换到“监视”标签页,可看到实时刷新的堆内存(Heap)与元空间(Metaspace)曲线图:
- 堆内存区域显示已用/最大容量、GC 触发次数及时间,能快速识别内存持续增长或回收不力现象
- 点击“执行垃圾回收”按钮可主动触发 Full GC,验证内存是否可正常释放
- 当堆使用率长期高于 75%,或出现频繁 Minor GC 但老年代缓慢上升,提示可能存在内存泄漏或分配不合理
定位高消耗对象与类
在“监视”页点击“堆 Dump”,生成当前堆快照(仅支持本地 JVM)。转到该 dump 的“类”子标签:
立即学习“Java免费学习笔记(深入)”;
- 按“实例数”或“保留大小”排序,快速发现占用内存最多的类(如 char[]、byte[] 或业务自定义大对象)
- 双击目标类名,进入“实例”视图,查看前 500 个实例的具体字段值与引用链,辅助判断泄漏源头(例如静态集合持续 add、缓存未淘汰、流未 close)
- 注意:局部变量不会出现在 dump 中,分析重点应放在静态域、长生命周期对象或线程局部存储(ThreadLocal)上
分析 CPU 热点方法
切换到“Profiler”标签页,选择“CPU”启动采样:
- 工具自动注入探针,统计各方法调用次数、总耗时、自耗时(不包含子方法)
- 重点关注“自时间占比”高的方法,尤其是业务核心逻辑、循环体、序列化/反序列化、正则匹配等易耗 CPU 的操作
- 采样期间会对性能产生轻微影响,建议在测试环境或低峰期启用,生产环境慎用;如需长期监控,可改用 BTrace 等无侵入方案
整个流程强调“先看趋势、再抓快照、最后深挖”,不依赖预设规则,而是基于实时数据驱动排查。只要 JVM 正常运行且可被 Attach,VisualVM 就能完成从宏观监控到微观定位的闭环。


















