@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
어떤 도움을 환영 :
여기
오류입니다! 현재로
@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]
:
는 [편집 1]
참고로, 내 실제 코드도 @State(Scope.Thread)
클래스, 뭔가 더 같이있다 JMH 1.3 더 이상 문제가되지 않습니다.