jmh 0.6。我有jmh-core,jmh-生成器-annprocess,jmh-生成器-反射作为依赖项。
首先,不幸的是,文档很差。首先,我使用gradle,而不是maven,所以使用maven原型是不可取的。
其次,我想使用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(),这意味着.*作为正则表达式,因此所有基准。这是我的项目中唯一的类。
但不是:“找不到基准”。
因此,作为最后的手段,我尝试并按照其他地方的建议创建了META-INF/MicroBenchmarks文件;content,类名:
com.github.parboiled1.grappa.TestBenchmark但它也不起作用:
Exception in thread "main" java.lang.IllegalStateException: Mismatched format for the line: com.github.parboiled1.grappa.TestBenchmark当然,这个文件的格式没有文档记录。
但是我不想一开始就使用这个文件;我想指定要运行的类的列表。
我该怎么做?
发布于 2014-05-11 03:39:46
您的问题不是不匹配的基准,而是构建错误的配置,它阻止了JMH为您生成和编译合成基准代码。您必须让批注处理器运行,并让构建的其余部分将生成的源代码和资源打包到完整的捆绑包中,即使您随后要使用API。Maven archetype生成的项目就是这样做的。还有一个Ant sample,它确实指定了其他构建系统应该发生的事情。如果你想和Gradle一起去,try this。
注:在JMH中,META-INF/MicroBenchmark是一个内部API,它可能会在不通知的情况下发生变化。你不能使用它就不足为奇了。
发布于 2014-05-22 03:09:43
我使用的是Maven,所以这是一个Maven解决方案,但是如果你遵循下面的步骤,我相信你可以让它适应Gradle。我必须承认,JMH的伟大之处被缺乏文档所掩盖。
一开始我不能让它正常运行,所以最后我创建了一个JUnit测试用例来启动基准测试。对于我来说没有main,因为它对Jenkins来说更容易,而且我也没有创建jar项目。
这个配置文件告诉maven将*Benchmark.java添加到surefire执行中。
<profile>
<id>benchmark</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Benchmark.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>当我使用profile基准测试运行Maven时。然后执行基准测试。
https://stackoverflow.com/questions/23583625
复制相似问题