附加分析器是不是会导致某些事情比其他事情运行得慢?

Posted

技术标签:

【中文标题】附加分析器是不是会导致某些事情比其他事情运行得慢?【英文标题】:Does attaching a profiler cause some things to run slower then others?附加分析器是否会导致某些事情比其他事情运行得慢? 【发布时间】:2011-04-11 20:37:19 【问题描述】:

是否有可能将分析器附加到 JVM(比方说 VisualVM)可能会使某些方法运行速度变慢,而不会影响其他方法,从而导致结果出现偏差,使其看起来像某段代码是热点事实上它不是。我将专门询问有关反射调用的示例。我正在运行一些代码,显示在 Spring AOP 调用(特别是 invokeJoinpointUsingReflection)中花费了很多时间——作者说这些代码在测试中运行良好(使用代码中的微基准测试)但是当他们分析它时显示这种方法比其他方法花费更长的时间非反射方法。 (对不起,如果有点不清楚)所以我想知道探查器是否真的可以产生这种效果并引导开发人员走上错误的道路。随意用任何例子来回答,反射部分只是我的例子。

【问题讨论】:

***.com/questions/4387895/… 【参考方案1】:

分析者经常提供误导性信息,但通常他们通常是正确的。他们倾向于使用非常简单的方法来扭曲结果,如果未启用分析,这些方法可能会进一步优化。

如果有疑问,我建议您使用其他分析器,例如 YourKit(评估版应该没问题)它具有更轻量级的记录,但可能存在相同的问题。

【讨论】:

【参考方案2】:

海森堡著名地观察到,从系统中收集信息总是会扰乱它,因此您无法获得不受干扰的观察。 (因此软件术语,“Heisenbug”)。是的,收集分析信息可能会导致实际性能发生变化,从而误导您。

对于您的特定 JVM 或分析器而言,这是否在很大程度上是正确的,以及发生了多少干扰,都是工程问题。

【讨论】:

【参考方案3】:

大多数分析器都是基于样本的,因此您收集的数据越多,结果就越准确。据我所知,对于纯粹用 Java 编写的方法没有任何偏见。

【讨论】:

一些分析器是基于抽样的。有些是基于仪表的。有些人使用其他方式。 YMMV。 仪器和采样不是相互排斥的。【参考方案4】:

某些分析器需要校准步骤,例如NetBeans 和 VisualVM。您可以验证所选分析器的年份和设置。

【讨论】:

以上是关于附加分析器是不是会导致某些事情比其他事情运行得慢?的主要内容,如果未能解决你的问题,请参考以下文章

我是不是应该期望 C++ 编译器会编译具有“按编码”的数据竞争的多线程代码,或者它可能会做其他事情?

python之三方库日志

在做其他事情的同时在 C++ 中播放声音

线程如何使用少于 100% 的挂壁时间?

实现消息总线架构

在动画期间检测按钮按下