gpt4 book ai didi

java - 您如何指定 JMH 微基准测试在不使用资源文件的情况下运行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:41 34 4
gpt4 key购买 nike

jmh 0.6。我有 jmh-core、jmh-generator-annprocess、jmh-generator-reflection 作为依赖项。

首先,不幸的是,文档很差。首先,我使用 gradle,而不是 maven,所以使用 maven 原型(prototype)不是一种选择。

其次,我想使用 Java API,而不是命令行。

我非常简单的代码是:

public final class TestBenchmark
{
private static final int COUNT = 100_000;
private static final List<Integer> LIST = new ArrayList<>();

static {
for (int i = 0; i < COUNT; i++)
LIST.add(i);
}

@GenerateMicroBenchmark
public void foreachLoop()
{
int dummy;
for (final int i: LIST)
dummy = i;
}

@GenerateMicroBenchmark
public void forLoop()
{
int dummy;
final int size = LIST.size();
for (int i = 0; i < size; i++)
dummy = LIST.get(i);
}

public static void main(final String... args)
throws RunnerException
{
final Options options = new OptionsBuilder()
.forks(1)
.warmupIterations(1)
.measurementIterations(20)
.verbosity(VerboseMode.EXTRA)
.build();

new Runner(options).run();
}
}

因为我没有 .include(),所以它意味着 .* 作为正则表达式,因此所有基准测试。这是我项目中唯一的类(class)。

但是没有:“没有找到基准”。

因此,作为最后的手段,我尝试按照其他地方的建议创建了 META-INF/MicroBenchmarks 文件;内容,类名:

com.github.parboiled1.grappa.TestBenchmark

但它也不起作用:

Exception in thread "main" java.lang.IllegalStateException: Mismatched format for the line: com.github.parboiled1.grappa.TestBenchmark

当然,这个文件的格式没有记录。

但我不想一开始就使用这个文件;我想指定要运行的类列表。

我该怎么做?

最佳答案

您的问题不是基准不匹配,而是构建配置错误导致 JMH 无法为您生成和编译综合基准代码。您必须让注释处理器运行,并让构建的其余部分将生成的源代码和资源打包到完整的包中,即使您之后要使用 API。 Maven archetype 制作的项目就是这样做的。还有 Ant sample它确实指定了其他构建系统应该发生什么。如果您想使用 Gradle,try this .

附言在 JMH 中,META-INF/MicroBenchmarks 是一个内部 API,它可能会更改,恕不另行通知。您无法使用它也就不足为奇了。

关于java - 您如何指定 JMH 微基准测试在不使用资源文件的情况下运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23583625/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com