使用 JDK Mission Control 分析
读取 JFR 记录
使用 JDK Mission Control 分析 是 CoddyKit 上的免费 Java Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 4 节课。
什么是 JMC
JDK 任务控制(JMC)是用于分析 JFR 记录的图形化工具。
它可以打开 .jfr 文件,并将原始事件转换为可导航的视图:热点方法、垃圾回收行为、锁竞争、对象分配等。它还包含一个自动分析页面,用于标记可能存在的问题。
获取 JMC
JMC 是一个独立的下载软件(JDK 8 之后,它不再随 JDK 捆绑提供)。
从 Adoptium 或甲骨文提供的 JMC 构建版本中获取它,启动后使用 文件 > 打开文件 打开您的 .jfr 文件。无需代理,也无需重启应用——您可以直接分析已经捕获的记录。
自动分析页面
JMC 首先显示的是自动分析:一组用于评估记录的启发式规则。
它会突出显示长时间的垃圾回收暂停、高对象分配量、被阻塞的线程以及基本类型到对象的装箱等问题。每项发现都有严重性级别和简短说明,是您开始手动深入分析前的绝佳起点。
方法性能分析视图
方法性能分析页面会将执行采样汇总为调用树。
自身耗时最高的方法就是 CPU 热点。您可以在自顶向下(从调用方到被调用方)和自底向上(先显示热点方法)视图之间切换,从而同时了解哪些方法运行缓慢,以及是谁调用了它们。
火焰图
JMC 会将堆栈采样呈现为火焰图:宽度与耗时成正比。
图顶部附近的宽大平台就是 CPU 实际消耗周期的地方。这种可视化方式能让主导性能的调用路径一目了然,比阅读排序表格快得多。
垃圾回收视图
垃圾回收页面会显示暂停时长、频率以及运行的是哪种收集器。
请关注会影响延迟的长时间或频繁暂停。较高的对象分配速率通常与频繁的年轻代垃圾回收相关——解决方法是减少对象的频繁创建与销毁,而不是更换收集器。
分配热点
JMC 的TLAB 分配视图会按照对象创建位置进行排序。
将其与堆栈跟踪结合起来,即可找到热点循环中执行分配的确切行。通常只需进行小幅修改——例如复用缓冲区或避免自动装箱——就能大幅降低垃圾回收压力。
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Autoboxing: each add boxes an int into an Integer object
List<Integer> boxed = new ArrayList<>();
for (int i = 0; i < 5; i++) boxed.add(i);
System.out.println("Boxed " + boxed.size() + " Integers");
System.out.println("JMC allocation view would flag this hotspot");
}
}锁竞争
锁实例和 Java 监视器视图会显示正在等待同步的线程。
如果许多线程因同一个监视器而阻塞,那么该锁就是可扩展性的瓶颈。JMC 会显示发生竞争的对象和等待线程的堆栈跟踪,帮助您定位正确的关键代码段。
线程和延迟视图
线程页面会显示每个线程的时间线:正在 CPU 上运行、停驻、等待 IO 或被阻塞。
借助它,您可以确认性能下降是受 CPU 限制还是受 IO 限制——这正是瓶颈课程中介绍的区别。宽大的“等待”带意味着系统受 IO 或锁限制,而不是受计算限制。
从发现问题到解决问题
工作流程如下:打开记录,阅读自动分析,深入查看被标记的区域(方法性能分析、垃圾回收或锁),通过火焰图和线程视图进行确认,然后提出假设。
更改一项内容,重新记录,并与基线进行比较。JMC 能将二进制文件转化为可执行的结论。
比较记录
要证明优化有效,请比较“之前”和“之后”的记录。
捕获一份基线 JFR 记录,应用一项更改,再捕获另一份记录,然后在 JMC 中打开两者。并排查看相同的视图——方法性能分析、垃圾回收和对象分配。真正的改进会表现为自身耗时降低、垃圾回收暂停减少或对象分配速率下降。如果指标没有变化,请撤销这项更改。
快速检查
在 JMC 的方法性能分析和火焰图视图中,方法的自身耗时(或顶部的宽大平台)表示什么?
回顾
JMC 会读取 JFR 记录并将其转化为可执行的信息:
- 自动分析会预先标记可能存在的问题。
- 方法性能分析和火焰图通过自身耗时揭示 CPU 热点。
- 垃圾回收和对象分配视图会揭示内存对象的频繁创建与回收。
- 锁和线程视图可以区分受 CPU 限制与受 IO 或锁限制的情况。
- 深入查看,提出假设,修复一项内容,重新记录并进行比较。
常见问题解答
「使用 JDK Mission Control 分析」课时是免费的吗?
是的 — 「使用 JDK Mission Control 分析」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 4 节课。
「使用 JDK Mission Control 分析」这节课中我会学到什么?
读取 JFR 记录 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Java Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「使用 JDK Mission Control 分析」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Java Academy 课中编写并运行代码吗?
能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 识别瓶颈
- Java Flight Recorder
- 使用 JDK Mission Control 分析
- 常见 JVM 调优标志