使用 scastie 和 scalafiddle 评估代码执行时间

using scastie and scalafiddle to evaluate code execution time

我正在尝试减少一些小的 scala 例程的执行时间,比如字符串的连接,因为我懒得设置本地环境,我使用在线 scala 编译器,但发现比较结果不同在 scastie and scalafiddle 之间使用以下代码:

// routine 1
var startT1 = System.nanoTime()
(1 until 100 * 1000).foreach{ x=>
  val sb = new StringBuilder("a")
  sb.append("b").append("c").append("d").append("e").append("f")
}
println(System.nanoTime() - startT1)

// routine 2
var startT2 = System.nanoTime()
(1 until 100 * 1000).foreach{ x=>
  val arr = Array[Char]('a', 'b', 'c', 'd', 'e', 'f')
}
println(System.nanoTime() - startT2)

在 scalafiddle 中例程 1 更快,但在 scastie 例程 2 中更快。
我读过这篇文章 https://medium.com/@otto.chrons/what-makes-scalafiddle-so-fast-9a3edf33ed4d,所以看起来 scalafiddle 实际上运行 JavaScript 而不是 scala。但剩下的问题是,我真的可以使用 scastie 作为执行时间基准吗?

简答 - NO 我不知道你不能依赖 ANY 在线运行使用 scastie 和 scalafiddle 等工具来验证性能。

因为有 1000 多个原因导致某些基准测试会显示某些操作的 X 毫秒执行情况,其中 99% 的原因是 运行宁环境:硬件、操作系统、CPU体系结构、机器负载、使用的 Scala 编译器、使用的 JVM 等。例如,我们不知道 Scatie 上 运行s 之间的环境变化,因此您可以获得完全不同的数字并且不知道为什么,因此进行基准测试结果不可靠。

如果你想得到一些结果,你至少要依赖一个,看看 https://openjdk.java.net/projects/code-tools/jmh/ and it's sbt helper plugin https://github.com/ktoso/sbt-jmh 和 运行 已知环境。

连同 post 基准测试结果 - 请 post 环境详细信息,运行。