JDK Mission Control (JMC) 现在作为一个模块在 Fedora 29. JDK Mission Control 是一个功能强大的 HotSpot JVM 分析应用程序。 它具有一组先进的工具,可以对 JDK Flight Recorder (JFR) 收集的大量数据进行高效和详细的分析。 JMC 需要 JDK 8 或更高版本。
JFR 是 JVM 的一部分,在 OpenJDK 11 或 Oracle JDK 7u4 或更高版本中可用。 因此,要生成飞行记录以加载到 JMC 中进行分析,目标应用程序需要在 OpenJDK 11 或 OracleJDK 7u4 或更高版本上运行。
本文是安装和运行 JMC 的指南 Fedora 29 工作站。 然后,您将学习如何使用它来解决称为热方法的 Java 程序的常见问题。
安装江铃 Fedora 29
使用 Java 11 将允许 JMC 为自己记录 JFR 数据。 通过以下方式安装 Java 11:
$ sudo dnf install java-11-openjdk
通过以下方式启用并安装具有默认配置文件的 JMC 模块:
$ sudo dnf module install jmc:latest/default
通过以下方式运行针对 Java 11 JRE 的 JMC:
$ jmc -vm /usr/lib/jvm/jre-11/bin
使用JMC和JFR探索热点方法
JDK Mission Control 可用于深入分析 Java 应用程序。 在这个 example,我们来看看热门方法。 热方法是在执行期间花费大量时间的方法。 在尝试减少总体执行时间时,这些是开始调查的好地方。
为了演示,这里是 Java 应用程序的一部分代码。
在实践中,JDK Mission Control 中有多种分析 Java 应用程序的方法。 作为一个 example,您可以在启用 Flight Recording 并设置为在 JVM 退出时转储的情况下运行应用程序。 这会在应用程序退出时生成一个 Flight Recording (.jfr) 文件,该文件可由 JDK Mission Control 打开。 请注意,Flight Recorder 在 OpenJDK 11+ 和 OracleJDK 7u4+ 中可用。
为了 example,对于 OpenJDK 11+,使用此命令通过 Flight Recorder 运行该类:
$ java -XX:+FlightRecorder -XX:StartFlightRecording=dumponexit=true,filename=initiator.jfr Initiator
应用程序完成执行后,使用 JMC 打开生成的飞行记录。 以下是自动分析结果。
自动化的 Method Profiling 分析已经在对 Integer.equals(Object) 的调用中指出了潜在的优化区域。 转到 Method Profiling 选项卡,选择该方法并检查 Stack Trace ,如下所示。

在此堆栈跟踪中,您可以跟踪对方法 Initiator.countIntersection(Initiator) 的调用。 检查下面显示的 Initiator 类,请注意,使用 HashSet 集合而不是 LinkedLists 集合来计算两个 Integer 集合之间的交集会更好。

进行此更改后,您可以在后续的飞行记录中看到执行的改进。

JDK Mission Control 和 JDK Flight Recorder 为您提供 Java 应用程序行为的非常详细的视图。 您可以使用它来诊断热方法、死锁、锁争用、内存泄漏等问题。 通过 JMC 模块试一试 Fedora 29!