正在访问JMH状态

问题描述 投票:0回答:1

我正在为我的应用程序设置JMH基准,我想知道通过基准传递JMH状态与从基准主体访问它之间有什么区别吗?

换句话说

@Benchmark
public int myBenchmark(MyState state) {
MyObject objFromState= state.objFromState;
return objFromState.benchmarkMe();
}

VS

@Benchmark
public int myBenchmark() {
return objFromState.benchmarkMe();
}
java performance profiling microbenchmark jmh
1个回答
0
投票

来自official JMH samples

...由于JMH被大量用于建立并发基准测试,我们选择了明确的带有状态对象的概念 ...基准方法可以引用状态,并且JMH将inject适当的状态,同时调用这些方法。

我看到的所有示例总是以与示例相同的方式引用状态:

  @State(Scope.Thread)
  public static class ThreadState {
      volatile double x = Math.PI;
  }

  @Benchmark
  public void measureUnshared(ThreadState state) {
    state.x++;
  }

您必须指定状态范围,使用批注明确声明它-您可以通过执行此操作来“注册”它。状态对象将进一步注入到引用它的方法中(通过将依赖项声明为方法参数)。在第二个代码段中,您引用state对象-是的,但这不是共享状态。

© www.soinside.com 2019 - 2024. All rights reserved.