の@SetupメソッドからBenchmarkParamsにアクセスすることがそのクラスをパラメータとして@Benchmark
に渡された場合、@State(Scope.Benchmark)
クラスの@Setup
にBenchmarkParams
にアクセスすることは可能ですか?JMH:@stateクラス
最小限のコード例では、(実際の使用はより複雑であるが、これは私の問題を再現する):
@State(Scope.Benchmark)
public class Test
{
@Setup
public void setUp(BenchmarkParams params){}
@Benchmark
public void nothing(Test test){}
}
あり、基本的なJMH sampleですが、@State
は@Benchmark
方法
に渡されていないところBenchmarkParams
の@Setup
にアクセスして、JMH @Param
の値に基づいて作成したベンチマークごとの設定データを取得/ログに記録したいと考えています。
、:
- が
Test
<という名前@State(Scope.Benchmark)
クラスを定義するには、--- --- - が
nothing()
<という名前@Benchmark
メソッドを定義作品@Benchmark
方法<へ - パス
@State
インスタンスを動作します - - FAILS!ここで
は誤りです:
[ERROR]
/Users/.../jmh-benchmarks/target/generated-sources/annotations/test/generated/Test_nothing_jmhTest.java:[390,16]
method setUp in class test.Test cannot be applied to given
types;
required: org.openjdk.jmh.infra.BenchmarkParams
found:
org.openjdk.jmh.infra.generated.BenchmarkParams_jmhType,org.openjdk.jmh.infra.generated.BenchmarkParams_jmhType
reason: actual and formal argument lists differ in length
任意のヘルプを歓迎!
[EDIT 1]
FYI、私の実際のコードに@State(Scope.Thread)
クラスもあり、より多くのようなもの:
@State(Scope.Benchmark)
public abstract class TestBase
{
@Setup
public void setUp(BenchmarkParams params){}
}
@State(Scope.Benchmark)
public class TestImpl extends TestBase
{
@State(Scope.Thread)
public static class ThreadState
{
@Setup
public void setUp(TestImpl state){}
}
@Benchmark
public void nothing(ThreadState state){}
}
[EDIT 2]のよう
JMH 1.3これはもはや問題ではない