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

hus*_*hai 9 java 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Kir*_* S. 5

检查注释上的Level参数@Setup.相当于@BeforeIS

@Setup(Level.Invocation)
Run Code Online (Sandbox Code Playgroud)

这说明,有许多的警告(合WARNING: HERE BE DRAGONS! THIS IS A SHARP TOOL.等)在这里