连接分析器会导致某些操作比其他操作运行得更慢吗?

3
附加JVM分析器(比如VisualVM)可能会使某些方法运行变慢,而不影响其他方法,从而导致结果出现偏差,让某段代码看起来像是热点,但实际上并非如此。举个例子,我想问一下关于反射调用的情况。我正在运行一些代码,显示在Spring AOP调用中花费了很多时间(具体来说是invokeJoinpointUsingReflection),作者表示这段代码在测试中运行良好(使用内部微基准测试),但当他们对其进行分析时,发现该方法所需时间比其他非反射方法长。(如果有点不清楚,请原谅)。所以,我想知道分析器是否真的会产生这种影响,并引导开发人员走上错误的轨迹。请随意回答任何例子,反射只是我的一个例子。

https://dev59.com/3G855IYBdhLWcg3wXS8I#4390868 - Mike Dunlavey
4个回答

3

海森堡著名地观察到从系统中收集信息总会干扰它,因此你无法获得未被干扰的观察结果。(因此软件术语“海森巴格”而得名)。是的,收集分析信息可能会导致实际性能以某种方式发生变化,这将误导您。

对于您特定的JVM或分析器是否存在显着的干扰以及干扰程度如何,这是一个工程问题。


3

性能分析工具通常会提供误导性信息,但总体上它们通常是正确的。它们倾向于扭曲结果的地方是在非常简单的方法中,如果禁用了性能分析,则可以进一步优化这些方法。

如果有疑问,建议使用另一个性能分析工具,例如YourKit(评估版本应该可以)。它具有更轻量级的记录功能,但可能存在相同的问题。


0

大多数分析器都是基于采样的,因此收集的数据越多,结果就越准确。据我所知,对于纯Java编写的方法,不存在偏见。


有些分析器是基于采样的,有些是基于仪器的,有些使用其他方式。因人而异。 - Ira Baxter
仪器测量和采样并不是互相排斥的。 - Amir Afghani

0

某些分析工具需要进行校准步骤,例如NetBeansVisualVM。您可以验证所选分析工具的版本和设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接