在IntelliJ IDEA Ultimate中检测运行时间:能否用Profiler统计方法执行时长
当然可以,IntelliJ IDEA Ultimate 自带的 Profiler 完全支持统计单个方法的执行耗时,具体操作方式如下:
操作步骤
常规采样模式(推荐,对应用性能影响极小)
这种模式适合绝大多数分析场景,性能开销可以忽略,拿到的耗时数据误差在可接受范围内:
- 打开目标项目,点击右上角运行配置旁的示波器样式的 Profile 按钮,以 Profile 模式启动项目
- 主动触发目标方法的执行逻辑,确保方法运行足够多的次数(如果是单次调用也可以,不过调用次数越多统计结果越稳定)
- 方法执行完成后,点击 Profiler 工具窗口的「停止捕获」按钮,等待分析报告生成
- 在报告中切换到
Call Tree视图或者火焰图视图,直接搜索目标方法的全限定名,就能看到该方法的总执行耗时、自执行耗时(扣除子方法调用的耗时)、调用次数、占总运行时间的占比等核心统计数据
插桩模式(适合短执行时间方法的高精度统计)
如果要统计的方法本身执行时间极短,采样模式可能无法抓取到足够的样本导致误差偏大,可以用插桩模式实现更高精度的统计:
- 打开顶部菜单「运行」→「编辑配置」,找到你要启动的运行配置,切换到
Profiler标签页 - 勾选 Enable advanced profiling,在下方的类过滤规则中只指定你要统计的类和方法范围(不要全量开启插桩,否则会大幅拖慢项目启动和运行速度)
- 保存配置后同样以 Profile 模式启动项目,触发方法执行后停止捕获,此时报告中的方法耗时数据精度会远高于采样模式
临时快速统计方案
如果只是需要临时验证单个方法的单次执行耗时,不需要完整的分析报告,可以用断点快速实现:
- 在目标方法的第一行和最后一行分别打一个断点,右键断点取消勾选「挂起」,勾选「Evaluate and log」
- 第一个断点的日志输入框填写
long start = System.nanoTime();,第二个断点填写System.out.println("方法执行耗时:" + (System.nanoTime() - start) / 1000000 + "ms"); - 正常启动项目触发方法执行,控制台就会直接打印该次方法的实际执行耗时
注意:采样模式的统计结果是近似值,适合快速定位性能瓶颈;插桩模式精度更高但性能开销大,建议仅在需要精准统计小方法耗时的时候使用。
内容的提问来源于stack exchange,提问作者EinNarr
相关产品推荐
相关产品推荐

