Java 如何在JMH中初始化每次调用的数据?

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.DATA是一个包含200个元素的集合。
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的文章:如果您有时间回顾并给我反馈,我将不胜感激。