在此test ,我们可以看到golang的性能有时候比scala慢很多。在我看来,由于 golang 的代码是直接编译成 c/c++ 兼容的二进制代码,而 scala 的代码是编译成 JVM 字节码,所以 golang 应该有更好的性能,尤其是在这些计算密集型算法的 benchmark 中。我的理解有误吗?
最佳答案
以下是我认为 go 解决方案比 scala 解决方案最慢的四个基准测试中发生的情况。
- mandelbrot:Scala 实现的内部循环展开了一次。也可能是 JVM 可以像这样对计算进行矢量化,我认为 go 编译器还没有做到这一点。这是很好的手动优化以及对加速算术的更好的 JVM 支持。
- regex-dna:scala 实现没有做基准测试所要求的:它被要求“””(一次一个模式)匹配替换重定向文件中的模式,并且记录序列长度"""但它只是计算长度并打印它。 go 版本会进行匹配替换,因此速度较慢。
- k-核苷酸:scala 实现已通过使用位旋转将核苷酸打包成长而不是使用字符进行了优化。这是一个很好的优化,也可以应用于 Go 代码。
- 二叉树:通过填充 RAM 来测试 gc 性能。确实,java gc 比 go gc 快得多,但是这不是 go 的首要任务的论点是,通常可以通过不产生垃圾来避免在实际程序中进行 gc。
关于performance - 为什么golang比scala慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20875341/