IntelliJ IDEA 2025.1 Help

CPU 和分配分析简介

本主题介绍了 CPU 和分配剖析的基本概念。 这些概念将帮助您了解 IntelliJ Profiler 的工作原理。

IntelliJ Profiler 的工作原理

对于 CPU 和内存分配分析,IntelliJ IDEA 提供与以下 Profiler 的集成:

  • Java Flight Recorder——作为 JDK 的一部分提供的标准分析工具。

  • Async Profiler——一款非常精确的分析器,还可以收集本机调用和内存分配数据。

默认情况下,IntelliJ IDEA 会同时运行两个分析器,以提供最准确的结果。 虽然可以单独使用支持的 profiler,但开箱即用的组合配置是大多数情况下的更好选择。 这种方法利用了分析器的优势,并且除非您有非常具体的需求,否则无需进行任何设置。

IntelliJ Profiler 收集 CPU 和分配分析数据。 这是该内容的简要说明。

CPU 分析

CPU 分析通过定期收集所有运行线程的堆栈跟踪来工作。 为了实现这一点,IntelliJ Profiler 使用 JVM 和操作系统的 API,这使您能够深入了解本地部分,并确保即使在通常仅查询 JVM 的分析器通常失败的极端情况下也能进行准确的 JVM 分析。

IntelliJ IDEA 中的分析器使用采样。 这意味着,IntelliJ Profiler 不会像基于插装的 profiler 那样捕获所有方法的入口和出口,而是只会在固定的时间间隔获取堆栈跟踪。

捕获堆栈跟踪的图示

这会牺牲一小部分数据,这并不影响整体情况,但会带来一些显著的益处,例如最小化被分析应用程序的占用空间。 这为您提供了一个客观的视角,甚至可以让您在生产环境中分析应用程序,而对其性能影响甚微。

探查器收集样本的频率称为采样率。 您可以根据您的分析场景 configure 它。 更高的采样率提供了更准确的图像,但代价是快照大小增大。 相反,对于运行时间长的场景来说,较低的采样率可能更为合适,因为将快照大小控制在可管理的范围内是一个重要因素。

内存分配分析

IntelliJ Profiler 对内存分配事件作出反应。 当此类事件发生时,IntelliJ Profiler 会记录发出请求的线程的调用堆栈以及分配对象的类型。

这些信息有助于您了解哪些代码路径导致特定类型的内存分配,以及这些分配的规模。

与 CPU 分析一样,分析器通过仅记录足够形成有意义图像的数据来最小化占用空间。

分析工作流程

通常,分析过程包括以下步骤:

  1. 收集数据。 您可以在应用程序启动时附加 profiler,或稍后再进行。 在您停止分析后,IntelliJ IDEA 将生成快照。

  2. 打开并分析 profile。 在此步骤中,内置工具将帮助您以有意义的形式组织原始数据,并根据需要对其进行切片。 分析方法可能因您的目标而异。

最后修改日期: 2025年 4月 24日