首页 > Java > 如何在 Java 中编写正确的微基准测试?

如何在 Java 中编写正确的微基准测试?

上一篇 下一篇

如何在 Java 中编写(和运行)正确的微基准测试?

我正在寻找一些代码示例和注释,说明要考虑的各种事情。

示例:基准测试应该测量时间/迭代还是迭代/时间,为什么?

相关: 秒表基准测试可以接受吗?

分割线

网友回答:

我知道这个问题已被标记为已回答,但我想提一下两个帮助我们编写微基准测试的库。

来自谷歌的卡尺

入门教程

  1. http://codingjunkie.net/micro-benchmarking-with-caliper/
  2. http://vertexlabs.co.uk/blog/caliper

来自OpenJDK的JMH

入门教程

  1. 避免 JVM 上的基准测试陷阱
  2. 使用 JMH 进行 Java 微基准测试
  3. JMH简介

分割线

网友回答:

关于从Java HotSpot的创建者那里编写微基准测试的提示:

规则 0:阅读有关 JVM 和微基准测试的知名论文。一个很好的是Brian Goetz,2005。不要对微观基准期望过高;它们仅测量有限范围的 JVM 性能特征。

规则 1:始终包含一个预热阶段,该预热阶段将测试内核一直运行到足以在计时阶段之前触发所有初始化和编译。(在预热阶段可以减少迭代次数。经验法则是数以万计的内部循环迭代。

规则 2:始终使用 、 等运行,以便您可以验证编译器和 JVM 的其他部分在计时阶段没有执行意外工作。-XX:+PrintCompilation-verbose:gc

第2.1条规则:在计时和预热阶段的开始和结束时打印消息,以便您可以验证在计时阶段没有规则 2 的输出。

规则 3:请注意 和 与 以及 OSR 和常规编译之间的区别。该标志使用 at 符号报告 OSR 编译,以表示非初始入口点,例如:。如果您追求最佳性能,则首选服务器而不是客户端,并且首选常规而不是 OSR。-client-server-XX:+PrintCompilationTrouble$1::run @ 2 (41 bytes)

规则4:请注意初始化效果。不要在计时阶段首次打印,因为打印会加载并初始化类。不要在预热阶段(或最终报告阶段)之外加载新类,除非您专门测试类加载(在这种情况下仅加载测试类)。规则 2 是您抵御此类影响的第一道防线。

规则5:请注意去优化和重新编译的影响。不要在计时阶段首次采用任何代码路径,因为编译器可能会根据先前的乐观假设(即根本不会使用该路径)丢弃并重新编译代码。规则 2 是您抵御此类影响的第一道防线。

规则6:使用适当的工具来阅读编译器的思想,并期望对它生成的代码感到惊讶。在形成关于什么使事物更快或更慢的理论之前,请自己检查代码。

规则7:降低测量中的噪声。在一台安静的机器上运行基准测试,并运行几次,丢弃异常值。用于与应用程序一起序列化编译器,并考虑设置以防止编译器与自身并行运行。尽量减少GC开销,设置(足够大)等于并在可用时使用。-Xbatch-XX:CICompilerCount=1XmxXmsUseEpsilonGC

规则8:使用库进行基准测试,因为它可能更有效,并且已经为此目的进行了调试。例如JMH,Caliper或Bill and Paul出色的UCSDJava基准测试。

分割线

网友回答:

Java 基准测试的重要事项是:

  • 首先通过运行代码几次来预热 JIT,然后再计时
  • 确保运行它的时间足够长,以便能够在几秒钟或(更好)几十秒内测量结果
  • 虽然不能在迭代之间调用,但最好在测试之间运行它,以便每个测试都有望获得一个“干净”的内存空间。(是的,与其说是保证,不如说是暗示,但根据我的经验,它很可能真的会垃圾收集。System.gc()gc()
  • 我喜欢显示迭代和时间,以及可以缩放的时间/迭代分数,以便“最佳”算法获得 1.0 分,而其他算法则以相对方式评分。这意味着您可以长时间运行所有算法,改变迭代次数和时间,但仍能获得可比较的结果。

我只是在写关于 .NET 中基准框架设计的博客。我之前有几篇文章,也许能给你一些想法——当然,不是所有的东西都是合适的,但其中一些可能是合适的。

模板简介:该模板名称为【如何在 Java 中编写正确的微基准测试?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 223次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-23
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信图片 html5 微信素材 微信公众平台 响应式 微信文章 微信模板 自适应 企业网站 单页式简历模板
您可能会喜欢的其他模板