我想开始看看JMH,由于某些原因,我无法运行基准测试。让我解释一下我尝试过什么:
下载了一些官方的JMH示例。作为例子,我选择了非常简单,是一个很好的起点:http://hg.openjdk.java.net/code-tools/jmh/file/0c58dc4fcf17/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_01_HelloWorld.java
然而,这会产生以下输出:
Exception in thread "main" No benchmarks to run; check the include/exclude regexps.
at org.openjdk.jmh.runner.Runner.run(Runner.java:155)
at org.openjdk.jmh.samples.JMHSample_01_HelloWorld.main(JMHSample_01_HelloWorld.java:90)
我已经谷歌了,上面的例子似乎应该有效,但对我来说不是这样。我也试图通过阅读来解决这个问题,但这似乎不适合我:
>
我尝试手动将生成的类移动到/META-INF/MicroBenchmarks,但这会产生以下错误:
Exception in thread "main" java.lang.IllegalStateException: Mismatched format for the line: JMHSample_01_HelloWorld.class
at org.openjdk.jmh.runner.BenchmarkRecord.<init>(BenchmarkRecord.java:92)
at org.openjdk.jmh.runner.MicroBenchmarkList.find(MicroBenchmarkList.java:133)
at org.openjdk.jmh.runner.Runner.run(Runner.java:150)
at JMHSample_01_HelloWorld.main(JMHSample_01_HelloWorld.java:80)
看起来JMH应该在 /META-INF/MicroBenchmarks中生成一些有效的行——这意味着在这个文件夹中不应该有生成的java类文件,对吗?
有人能帮我找出错误吗?谢谢你。
我得到了同样的错误,因为我在之前运行了包含@Benchmark
类的包之后,更改了它的名称。一次“清洁和构建”就足以让它再次工作。
我在我的jmh maven eclipse项目上的eclipse控制台中得到了同样的错误,尽管具有所有必需的依赖项和插件。
尝试从终端进行mvn全新安装
,而不是在日食中嵌入专家,得到以下错误
ERROR: org.openjdk.jmh.runner.RunnerException: ERROR: Unable to acquire the JMH lock (/tmp/jmh.lock): already taken by another JMH instance, exiting. Use -Djmh.ignoreLock=true to forcefully continue.
at org.openjdk.jmh.runner.Runner.run(Runner.java:202)
at org.openjdk.jmh.Main.main(Main.java:71)
如上所述,添加-Djmh.ignoreLock=true
作为eclipseJava应用程序启动器中的VM参数,它起作用了
基准测试“源代码”除了像往常一样编译外,还需要由JMH注释处理器进行处理。在JMH 0.5之前,注释处理器是JMH主工件的一部分,因此对jmh内核
的单一依赖就足够了。在 JMH 0.5 中,注释处理功能被提取到单独的工件中,以便于支持其他语言。
为了让注释处理器回到“旧的”基于Java的JMH项目中,应该声明一个对处理器工件的附加依赖:
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>${jmh.version}</version>
<!--
the processor artifact is required only during compilation and
does not need to be transitive, hence provided scope
-->
<scope>provided</scope>
</dependency>
对于新的JMH项目,最简单的方法是使用适当的特定语言原型(除了Java,还有Scala、Groovy和Kotlin原型)生成一个新项目,正如JMH主页上所描述的。
mvn archetype:generate \
-DinteractiveMode=false \
-DarchetypeGroupId=org.openjdk.jmh \
-DarchetypeArtifactId=jmh-java-benchmark-archetype \
-DgroupId=my.benchmark.group \
-DartifactId=MyBenchMarkArtifact \
-Dversion=1.0
javapapers.com上的这篇文章展示了如何通过键入在Maven中运行JMH基准测试。在Maven中运行JMH非常方便,因为您可以从Eclipse Run配置甚至在Maven阶段轻松运行它。 然而,这种设置有两个问题: > < li> 当您杀死Maven时,JMH将继续在后台运行,因为< code>exec:exec在一个单独的虚拟机中启动它。 通常,JMH 将启动另一个 VM 来运行基准测
我正在调试一个我自己编写的程序。程序编译和运行没有错误。 使用调试器gcc4.9.3 (rtools_34)时,我得到一条消息: '没有可用的“标准:::o流::运算符”的来源 当跨过任何包含d::c的线时 代码包括:iostream、ostream和string。 此代码也已与其他编译器一起调试,没有出现此问题。它是新编译器对Eclipse的新导入,因此我假设我设置错了。 问题似乎与std::e
我正在使用JMH,一个OpenJDK微基准测试工具。构建过程创建<代码>微基准。我用调用并传递jar名称和JMH参数的jar。 我想知道我们应该使用选项运行基准测试吗?为什么? 换句话说,我是否应该使用以下命令运行基准测试:
注意到Karma测试没有在新的angular-cli项目上运行
我有几个用@Benchmark注释的大型基准类。在使用基准构建jar后,我可以使用以下命令运行所有这些类 如果我不想运行所有基准测试,如何指定要运行的基准测试?
问题内容: 我想通过在Eclipse中将其作为Java应用程序运行来尝试JMH的新功能。我导入并构建了jmh-samples项目。编译的类以/ jmh-samples / target / generated-sources / annotation结尾,/ target /中有多个JAR,并且像往常一样从命令行运行microbenchmarks.jar。 但是,当我执行main时,我总是得到 有