Java 如何在JMH中初始化每次调用的数据?
我正在尝试创建修改集合的基准。 问题是我不知道如何为每次调用初始化数据 假设Test.DATA是一个包含200个元素的集合。Java 如何在JMH中初始化每次调用的数据?,java,jmh,Java,Jmh,我正在尝试创建修改集合的基准。 问题是我不知道如何为每次调用初始化数据 假设Test.DATA是一个包含200个元素的集合。 test方法根据a.isTrue()的值删除数据。 我知道@Setup类似于JUnit的@Setup。我想在 但我在JMH里找不到。 如何在每次调用test方法之前初始化数据? 事先非常感谢 @State(Scope.Thread) public class JavaCollectionBenchmark { List<Foo> cols;
test
方法根据a.isTrue()
的值删除数据。我知道
@Setup
类似于JUnit的@Setup
。我想在
但我在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();
}
}
@状态(Scope.Thread)
公共类JavaCollectionBenchmark{
列出COL;
@设置
公众假期准备(){
cols=新的数组列表(Test.DATA);
}
@基准
公共长期测试(){
如果(cols.size()!=200){
System.out.println(“第二次不起作用!”);
系统出口(0);
}否则{
System.out.println(“第一次”);
}
cols.removeIf(a->a.isTrue());
返回cols.size();
}
}
检查设置
注释上的级别
参数。之前的@等价物为
@Setup(Level.Invocation)
这已经解释过了,还有很多警告(警告:这里是龙!这是一个锋利的工具。
等等)您是否阅读过文档中建议的JMH示例?值得注意的是,这个例子直接回答了您的问题:哦,对不起,当答案已经在样本中时,我不应该问这个问题。我承认我没有阅读每一个代码示例。由于某些原因,我的眼睛一直盯着州和固定装置。谢谢。我已经在评论部分从JMH的作者那里得到了答案。我将以此作为对你努力的回答。我写了一篇关于使用JMH的文章:如果您有时间回顾并给我反馈,我将不胜感激。