如何解决为什么JMH使用不同的分叉?
有人坚持认为,使用分叉解决的另一个问题是运行间差异:http ://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/ org / openjdk / jmh / samples / JMHSample_13_RunToRun.java
但是,任何认真的工程师都必须能够对基准测试环境进行充分的控制,以消除运行之间的任何差异。看到人们使用分叉来克服他们的懒惰或对自己的基准是如何执行的缺乏理解,这令人沮丧。
解决方法
我正在使用JMH基准测试框架(http://openjdk.java.net/projects/code-
tools/jmh/)在我的代码上运行基准测试。我的理解是,JMH在基准测试期间多次分叉JVM,以便丢弃由JVM在执行期间进行的即时(JIT)分析所建立的任何概要文件。
我了解为什么在某些情况下(例如,下面的情况(从http://java-performance.info/jmh/复制的逐字记录))中这很有用:
默认情况下,JHM为每个试验(迭代集)派生一个新的Java进程。为了保护测试免受先前收集的“配置文件”(关于其他已加载类的信息及其执行信息)的影响,这是必需的。例如,如果您有2个类实现相同的接口并测试它们的性能,则第一个实现(按测试顺序)可能比第二个实现(在同一JVM中)快,因为JIT代替了发现第二种实现后,将直接方法调用与接口方法调用相结合。
但是,如果您反复对同一代码进行基准测试,那么运行10个fork(每个20个迭代)而不是1个fork(200个迭代)有什么好处吗?
非常感谢,
丹尼
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。