如果可以关闭JIT,为什么要使用JMH?

mmi*_*ldt 1 java jit jmh

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

Ale*_*lev 9

TL; DR; 通过在同一轨道上骑自行车来评估一级方程式的表现.

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

问题不在于黑白:你需要在现实世界中实现优化,并且需要在一些精心挑选的地方打破它们以进行良好的实验设置.这就是JMH正在做的事情:它提供了构建实验设置的方法.JMH样本很好地解释了复杂性和情景.

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