jvisualvm

一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。

通过检测 JVM 中加载的类和对象信息等帮助我们分析内存使用情况,我们可以通过 VisualVM 的监视标签对应用程序进行内存分析,包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。
工具位于JDK 根目录的 bin 文件夹下,无需安装,直接运行即可。

  1. [分析]
  2. :监视
  3. # 一种用来查看应用程序运行时行为的一般方法。
  4. # 多视图实时地显示CPU、内存、线程状态以及其他一些有用的信息,以便用户能很快地发现问题的关键所在
  5. :转储
  6. # 从内存中获得当前状态数据并存储到文件用于静态的性能分析,Java 程序是通过在启动 Java 程序时添加适当的条件参数来触发转储操作的。
  7. -> 系统转储 , VM 生成的本地系统的转储,又称作核心转储
  8. -> Java 转储, JVM 内部生成的格式化后的数据,包括线程信息,类的加载信息以及堆的统计数据,通常也用于检测死锁
  9. -> 堆转储, JVM 将所有对象的堆内容存储到文件
  10. :快照
  11. # 收集各种运行时数据,其中一些数据直接显示在监视视图中,而另外大部分数据被保存在内部,直到用户要求获取快照,基于这些保存的数据的统计信息才被显示出来。
  12. -> CPU快照, 包含了应用程序中函数的调用关系及运行时间,这些信息通常可以在 CPU 快照视图中进行查看
  13. -> 内存快照, 包含了内存的分配和使用情况、载入的所有类、存在的对象信息及对象间的引用关系等
  14. :性能分析, 收集程序运行时的执行数据来帮助开发人员定位程序需要被优化的部分,从而提高程序的运行速度或是内存使用效率
  15. -> 内存分析, 主要目的是通过统计内存使用情况检测可能存在的内存泄露问题及确定优化内存使用的方向
  16. # 通常有内存监视和内存快照两种方式来显示内存性能分析结果
  17. -> CPU分析, 主要目的是统计函数的调用情况及执行时间,或者更简单的情况就是统计应用程序的 CPU 使用情况
  18. # 通常有 CPU 监视和 CPU 快照两种方式来显示 CPU 性能分析结果
  19. -> 线程分析, 主要用于在多线程应用程序中确定内存的问题所在
  20. # 一般包括线程的状态变化情况,死锁情况和某个线程在线程生命期内状态的分布情况等

image.png