我正在为我的应用程序设置JMH基准测试,我想知道通过benchmark传递JMH状态和从benchmark主体访问JMH状态有什么区别吗?
换句话说
@Benchmark
public int myBenchmark(MyState state) {
MyObject objFromState= state.objFromState;
return objFromState.benchmarkMe();
}VS
@Benchmark
public int myBenchmark() {
return objFromState.benchmarkMe();
}发布于 2019-11-29 21:20:22
来自官方JMH样本
..。由于JMH被大量用于构建并发基准测试,所以我们选择了显式的状态对象概念。基准测试方法可以引用状态,JMH将在调用这些方法时向注入适当的状态。
我看到的所有示例总是以与代码段相同的方式引用状态:
@State(Scope.Thread)
public static class ThreadState {
volatile double x = Math.PI;
}
@Benchmark
public void measureUnshared(ThreadState state) {
state.x++;
}您必须指定状态的范围,使用注释显式声明它--通过这样做“注册”它。将状态对象进一步注入到引用它的方法(通过将依赖项声明为方法参数)。在您的第二个片段中,您引用了state对象-是的,但这不是一个共享状态。
https://stackoverflow.com/questions/58375292
复制相似问题