JMH中如何为每次调用初始化数据?
How to initialize the data for each invocation in JMH?
我正在尝试创建修改集合的基准。
问题是我不知道如何为每次调用初始化数据。
假设Test.DATA是一个包含200个元素的集合。
test
方法根据 a.isTrue()
的值删除数据。
我知道 @Setup
类似于 JUnit 的 @Setup
。我想使用 @Before
但我在 JMH 找不到。
每次调用test
方法前如何初始化数据?
非常感谢您。
@State(Scope.Thread)
public class JavaCollectionBenchmark {
List<Foo> cols;
@Setup
public void prepare(){
cols= new ArrayList<>(Test.DATA);
}
@Benchmark
public long test(){
if(cols.size() != 200) {
System.out.println("SECOND TIME DOESN'T WORK!");
System.exit(0);
}else{
System.out.println("FIRST TIME");
}
cols.removeIf(a-> a.isTrue());
return cols.size();
}
}
检查 @Setup
注释上的 Level
参数。 @Before
等价于
@Setup(Level.Invocation)
其中有解释,以及许多警告(WARNING: HERE BE DRAGONS! THIS IS A SHARP TOOL.
等)here
我正在尝试创建修改集合的基准。 问题是我不知道如何为每次调用初始化数据。
假设Test.DATA是一个包含200个元素的集合。
test
方法根据 a.isTrue()
的值删除数据。
我知道 @Setup
类似于 JUnit 的 @Setup
。我想使用 @Before
但我在 JMH 找不到。
每次调用test
方法前如何初始化数据?
非常感谢您。
@State(Scope.Thread)
public class JavaCollectionBenchmark {
List<Foo> cols;
@Setup
public void prepare(){
cols= new ArrayList<>(Test.DATA);
}
@Benchmark
public long test(){
if(cols.size() != 200) {
System.out.println("SECOND TIME DOESN'T WORK!");
System.exit(0);
}else{
System.out.println("FIRST TIME");
}
cols.removeIf(a-> a.isTrue());
return cols.size();
}
}
检查 @Setup
注释上的 Level
参数。 @Before
等价于
@Setup(Level.Invocation)
其中有解释,以及许多警告(WARNING: HERE BE DRAGONS! THIS IS A SHARP TOOL.
等)here