Java 附加探查器是否会导致某些东西比其他东西运行得慢?
是否可能将探查器附加到JVM(比方说VisualVM)会使某些方法运行较慢,而不会影响其他方法,从而导致结果出现偏差,使某段代码看起来像是一个热点,而实际上并非如此。我将专门询问有关反射调用的问题,作为一个示例。我运行的一些代码显示了在Spring AOP调用中花费的大量时间(特别是invokeJoinpointUsingReflection)——作者说这些代码在测试中运行得很好(使用代码内微基准),但当他们分析时,它显示这种方法比其他非反射方法花费的时间更长。(抱歉,如果这有点不清楚)所以我想知道探查器是否真的会有这种效果,并导致开发人员走上错误的道路。请随意回答任何示例,反射部分只是我的示例。大多数探查器都是基于样本的,因此收集的数据越多,结果就越准确。据我所知,对纯Java编写的方法没有偏见。海森堡有一个著名的观察,从系统收集信息总是会干扰它,所以你不能得到一个不受干扰的观察结果。(因此,软件术语“海森堡”)。是的,收集分析信息可能会导致实际性能发生改变,从而误导您Java 附加探查器是否会导致某些东西比其他东西运行得慢?,java,performance,reflection,profiling,Java,Performance,Reflection,Profiling,是否可能将探查器附加到JVM(比方说VisualVM)会使某些方法运行较慢,而不会影响其他方法,从而导致结果出现偏差,使某段代码看起来像是一个热点,而实际上并非如此。我将专门询问有关反射调用的问题,作为一个示例。我运行的一些代码显示了在Spring AOP调用中花费的大量时间(特别是invokeJoinpointUsingReflection)——作者说这些代码在测试中运行得很好(使用代码内微基准),但当他们分析时,它显示这种方法比其他非反射方法花费的时间更长。(抱歉,如果这有点不清楚)所以我想
对于您的特定JVM或探查器来说,这在很大程度上是否正确,以及发生了多少干扰,这是一个工程问题。某些探查器需要一个校准步骤,例如和。您可以验证所选探查器的年份和设置。探查器通常会提供错误的引导信息,但通常它们是正确的。他们倾向于扭曲结果的地方是非常简单的方法,如果不启用评测,这些方法可能会得到进一步优化
如果有疑问,我建议您使用另一个探查器,例如YourKit(评估版应该可以),它具有更轻的记录重量,但可能存在相同的问题。一些探查器是基于采样的。有些是基于仪器的。有些人使用其他手段。YMMV.仪器和取样不是相互排斥的。