我正在阅读JMH样本,现在我正在关于safe-looping的部分。这是一个例子:
@Benchmark
public void measureRight_2() {
for (int x : xs) {
sink(work(x));
}
}
@CompilerControl(CompilerControl.Mode.DONT_INLINE)
public static void sink(int v) {
// IT IS VERY IMPORTANT TO MATCH THE SIGNATURE TO AVOID AUTOBOXING.
// The method intentionally does nothing.
}
但是他们对这种技术提出了一个警告(强调我的)。
有时,将价值降入黑洞的成本是 主导纳米基准评分。在这些情况下,人们可能会尝试这样做 使用不可内联的方法制作移位“沉降片”。 这个技巧非常 特定于VM,只有在验证生成的时才能使用 代码(在处理纳米基准时,这是一个很好的策略 反正)。
我不太明白这里有什么特定的虚拟机。我们使用一种不应该内联的方法。因此无法优化计算。我错过了什么细节?
答案 0 :(得分:3)
无法保证:
这可能会从JVM系列更改为JVM系列,甚至可能在给定JVM系列的次要/修补程序版本中更改。这就是为什么它被称为特定于VM的原因,并且仅在您实际控制完全发生的事情时使用。