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

2022-09-04 22:21:14

我正在尝试创建修改集合的基准。问题是我不知道如何为每个调用初始化数据。

假定 Test.DATA 是一个包含 200 个元素的集合。
该方法根据 的值删除数据。
我知道这与JUnit的类似。我想使用,但我在JMH中找不到一个。如何在每次调用方法之前初始化数据?
非常感谢你提前。testa.isTrue()@Setup@Setup@Beforetest

@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();
    }
}

答案 1

检查注释上的参数。等效于Level@Setup@Before

@Setup(Level.Invocation)

这被解释,以及许多警告(等)这里WARNING: HERE BE DRAGONS! THIS IS A SHARP TOOL.


答案 2

推荐