火焰图

**火焰图** 选项卡提供了一个反向的调用图,该图聚合了相同的调用栈。也就是说,共享相同调用者序列的相同方法或函数会被收集并表示为火焰图中的一个较长的条形(而不是像调用图中显示的那样显示为多个较短的条形)。这使得更容易查看哪些方法或函数消耗了最多的时间。但是,这也意味着水平轴不代表时间线;相反,它指示每个方法或函数执行所需时间的相对量。

为了帮助说明这个概念,请考虑图 1 中的调用图。请注意,方法 D 对 B 进行多次调用 (B1、B2 和 B3),并且其中一些对 B 的调用会调用 C (C1 和 C3)。

图 1. 一个调用图,其中包含多个共享相同调用者序列的方法调用。

由于 B1、B2 和 B3 共享相同的调用者序列 (A → D → B),因此它们会被聚合,如图 2 所示。类似地,C1 和 C3 被聚合,因为它们共享相同的调用者序列 (A → D → B → C);请注意,C2 未包含在内,因为它具有不同的调用者序列 (A → D → C)。

图 2. 聚合共享相同调用栈的相同方法。

聚合的调用用于创建火焰图,如图 3 所示。请注意,对于火焰图中的任何给定调用,消耗最多 CPU 时间的被调用者会首先出现。

图 3. 图 5 中所示调用图的火焰图表示。