1

我想知道如果我可以关闭 JIT,为什么还要使用 JMH 进行基准测试?JMH 是否没有抑制可以通过禁用 JIT 来防止的优化?

4

2 回答 2

9

TL;博士; 通过在同一赛道上骑自行车来评估一级方程式的表现。

这个问题很奇怪,特别是如果你问自己一个简单的后续问题。在与生产环境截然不同的条件下运行基准测试有什么意义?换句话说,在解释模式下运行获得的知识如何应用于现实世界?

这里的问题不是非黑即白:您需要像在现实世界中发生的那样进行优化,并且您需要在一些精心挑选的地方破坏它们以进行良好的实验设置。这就是 JMH 正在做的事情:它提供了构建实验装置的方法。JMH 示例很好地解释了复杂性和场景。

而且,基准测试不仅仅是与编译器作斗争。需要解决很多很多非编译器(和非 JVM!)问题。当然,也可以手工完成(JMH 并不神奇,它只是一个同样由人类编写的工具),但是您将花费大部分时间预算来解决简单的问题,而没有时间解决真正重要的问题那些,特定于您的实验。

于 2015-05-10T10:29:49.847 回答
0

JIT 不是万能的。例如,在某段代码运行一定次数之前它不会启动,或者如果一段字节码太大/埋得太深/等,它就不会启动。此外,考虑实时检测,这通常会阻止 JIT 运行(想想分析)。

因此,兴趣仍然在于能够将其关闭或打开;如果一段代码确实是时间紧迫的,您可能想知道它会如何执行,具体取决于 JIT 是否启动。

但是这些情况非常少见,并且随着 JVM(因此是 JIT)的发展而变得越来越少见。

于 2015-05-09T22:18:38.603 回答