当前位置: 首页 > 面试题库 >

为什么JMH使用不同的分叉?

劳研
2023-03-14
问题内容

我正在使用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个迭代)有什么好处吗?

非常感谢,

丹尼


问题答案:

有人坚持认为,使用分叉解决的另一个问题是运行间差异:http :
//hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/ org
/ openjdk / jmh / samples /
JMHSample_13_RunToRun.java

但是,任何认真的工程师都必须能够对基准测试环境进行充分的控制,以消除运行之间的任何差异。看到人们使用分叉来克服他们的懒惰或对自己的基准是如何执行的缺乏理解,这令人沮丧。



 类似资料:
  • 我使用http://openjdk.java.net/projects/code-tools/jmh/的JMH基准框架对我的代码进行基准测试。我的理解是,JMH在基准测试期间多次分叉JVM,以便丢弃由JVM在执行期间执行的实时(JIT)分析建立的任何概要文件。 我理解为什么这在某些情况下是有用的,比如下面(逐字复制自http://Java-performance . info/jmh/): 默认情

  • 我不明白JMH结果的分数属性?我也没在网上找到任何关于它的东西。 有人能告诉我,这是关于什么的吗?据我所知,高分比低分好,但这到底是什么意思,是如何计算的?

  • 这是我的第一个JMH基准测试。我可能做错了一切,但是... 我的基准看起来是这样的 是我开始的...等了又等,然后杀了它。我怀疑在< code>@Setup中有问题,所以我简化了它,但是什么都没有改变。这场赛跑开始时相当乐观... 然后什么都没发生。过了很长时间,它继续写下20行像 和5行像 然后它输出一些结果 并更正其估计的eta: 我的是否比我想象的更频繁地被调用,或者还有什么其他原因导致了缓

  • 如果IIUC每个fork都会创建一个单独的虚拟机,因为每个虚拟机实例可能在JIT指令中略有不同? 我也很好奇时间属性在下面的注释中有什么作用: 蒂亚,奥莱

  • 我正在尝试测量运行基准测试时消耗的内存。我在网上发现我可以使用< code>GC profiler来测量它。我试过了,但是我不明白答案,也看不出消耗的内存量。有人能解释这个结果吗?谢了。

  • 本文向大家介绍vue和react有什么不同?使用场景分别是什么?相关面试题,主要包含被问及vue和react有什么不同?使用场景分别是什么?时的应答技巧和注意事项,需要的朋友参考一下 楼上说了等于没说,废柴,还是我来说几句吧。 首先你得说说相同点,两个都是MVVM框架,数据驱动视图,无争议。如果说不同,那可能分为以下这么几点: 1、vue是完整一套由官方维护的框架,核心库主要有由尤雨溪大神独自维护