附加分析器会导致某些事情比其他事情慢吗?

时间:2011-04-11 20:37:20

标签: java performance reflection profiling

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

4 个答案:

答案 0 :(得分:3)

海森堡着名的观察说,从系统中收集信息总是会扰乱它,所以你无法获得不受干扰的观察。 (因此软件术语“Heisenbug”)。是的,收集分析信息可能会导致实际性能以误导您的方式进行更改。

对于您的特定JVM或分析器是否真的如此,以及发生了多少干扰,这是一个工程问题。

答案 1 :(得分:3)

Profilers经常提供错误的信息,但通常它们通常都是正确的。在他们倾向于倾斜的地方,结果是非常简单的方法,如果未启用分析,可能会进一步优化。

如果有疑问,我建议你使用另一个探查器,例如YourKit(evalation版本应该没问题)它有更轻量级的录音,但可能有同样的问题。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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